diff --git a/winixd/core/app.cpp b/winixd/core/app.cpp index 3a191d7..420872c 100644 --- a/winixd/core/app.cpp +++ b/winixd/core/app.cpp @@ -331,6 +331,11 @@ bool App::Init() model_connector.set_winix_config(&config); model_connector.set_winix_request(&req); model_connector.set_winix_logger(&log); + model_connector.set_winix_dirs(&system.dirs); + model_connector.set_winix_mounts(&system.mounts); + model_connector.set_winix_users(&system.users); + model_connector.set_winix_groups(&system.groups); + model_connector.set_winix_session_logger(nullptr); // will be set for each request if( !TryToMakeDatabaseMigration() ) return false; diff --git a/winixd/core/app.h b/winixd/core/app.h index d5da989..4067f77 100644 --- a/winixd/core/app.h +++ b/winixd/core/app.h @@ -106,10 +106,6 @@ public: - /* - model - */ - // ... System system; @@ -121,9 +117,6 @@ public: bool stdout_is_closed; - /* - view - */ Templates templates; diff --git a/winixd/core/threadmanager.cpp b/winixd/core/threadmanager.cpp index c00b9a8..fbf42a4 100644 --- a/winixd/core/threadmanager.cpp +++ b/winixd/core/threadmanager.cpp @@ -95,9 +95,19 @@ void ThreadManager::Add(BaseThread * pbase, const wchar_t * thread_name) data.postgresql_connector.wait_for_connection(); data.model_connector.set_db_connector(data.postgresql_connector); data.model_connector.set_flat_connector(data.json_connector); - data.model_connector.set_winix_config(config); - data.model_connector.set_winix_logger(item.object->get_logger()); data.model_connector.set_logger(item.object->get_logger()); + data.model_connector.set_winix_config(config); + data.model_connector.set_winix_request(nullptr); + data.model_connector.set_winix_logger(item.object->get_logger()); + data.model_connector.set_winix_dirs(nullptr); + data.model_connector.set_winix_mounts(nullptr); + data.model_connector.set_winix_users(nullptr); + data.model_connector.set_winix_groups(nullptr); + data.model_connector.set_winix_session_logger(nullptr); + + + + //data.model_connector.set_winix_request(); item.object->set_model_connector(&data.model_connector); diff --git a/winixd/models/item.cpp b/winixd/models/item.cpp index 64ad7d4..490307d 100644 --- a/winixd/models/item.cpp +++ b/winixd/models/item.cpp @@ -67,8 +67,9 @@ void Item::fields() field(L"sort_index", sort_index); field(L"content_id", L"content", item_content, morm::FT::foreign_key); - field(L"is", &Item::is); - field(L"link", &Item::link); + field(L"is", &Item::is); + field(L"dir_link", &Item::dir_link); + field(L"link", &Item::link); // may we should add a method setTypeFromInt(int t)? @@ -281,6 +282,21 @@ void Item::is(Ezc::FunInfo & env) } +void Item::dir_link(Ezc::FunInfo & env) +{ + Dirs * dirs = get_dirs(); + std::vector dir_tab; + + if( dirs && dirs->CreateDirTab(parent_id, dir_tab) ) + { + for(Item * pitem : dir_tab) + { + env.out << pitem->url << '/'; + } + } +} + + void Item::link(Ezc::FunInfo & env) { Config * config = get_config(); @@ -295,8 +311,15 @@ void Item::link(Ezc::FunInfo & env) env.out << config->base_url; - // FIXME this prints cur->request->dir_tab but we should print the directory in which actually there is the item - print_dir(env); + if( parent_id == req->dir_tab.back()->id ) + { + print_dir(env); + } + else + { + dir_link(env); + } + env.out << url; } } diff --git a/winixd/models/item.h b/winixd/models/item.h index fbf0e86..ce86466 100644 --- a/winixd/models/item.h +++ b/winixd/models/item.h @@ -188,6 +188,7 @@ public: void print_dir_without_slash(Ezc::FunInfo & env); void is(Ezc::FunInfo & env); + void dir_link(Ezc::FunInfo & env); void link(Ezc::FunInfo & env); diff --git a/winixd/models/winixmodel.cpp b/winixd/models/winixmodel.cpp index e6edcfa..14cbb5b 100644 --- a/winixd/models/winixmodel.cpp +++ b/winixd/models/winixmodel.cpp @@ -76,6 +76,74 @@ Log * WinixModel::get_logger() } +Dirs * WinixModel::get_dirs() +{ + WinixModelConnector * connector = get_winix_model_connector(); + + if( connector ) + { + return connector->get_winix_dirs(); + } + + return nullptr; +} + + +Mounts * WinixModel::get_mounts() +{ + WinixModelConnector * connector = get_winix_model_connector(); + + if( connector ) + { + return connector->get_winix_mounts(); + } + + return nullptr; +} + + +Users * WinixModel::get_users() +{ + WinixModelConnector * connector = get_winix_model_connector(); + + if( connector ) + { + return connector->get_winix_users(); + } + + return nullptr; +} + + +Groups * WinixModel::get_groups() +{ + WinixModelConnector * connector = get_winix_model_connector(); + + if( connector ) + { + return connector->get_winix_groups(); + } + + return nullptr; +} + + +SLog * WinixModel::get_session_logger() +{ + WinixModelConnector * connector = get_winix_model_connector(); + + if( connector ) + { + return connector->get_winix_session_logger(); + } + + return nullptr; +} + + + + + WinixModelConnector * WinixModel::get_winix_model_connector() { if( model_connector ) diff --git a/winixd/models/winixmodel.h b/winixd/models/winixmodel.h index 4fdc1af..5c53be3 100644 --- a/winixd/models/winixmodel.h +++ b/winixd/models/winixmodel.h @@ -45,6 +45,11 @@ namespace Winix class Config; class Request; class Log; +class Dirs; +class Mounts; +class Users; +class Groups; +class SLog; class WinixModel : public morm::Model @@ -54,7 +59,11 @@ public: Config * get_config(); Request * get_request(); Log * get_logger(); - + Dirs * get_dirs(); + Mounts * get_mounts(); + Users * get_users(); + Groups * get_groups(); + SLog * get_session_logger(); // FIXME always return null at the moment, should be set when a new request is created and clear at the end of a request protected: diff --git a/winixd/models/winixmodelconnector.cpp b/winixd/models/winixmodelconnector.cpp index 3ca8733..3c7897f 100644 --- a/winixd/models/winixmodelconnector.cpp +++ b/winixd/models/winixmodelconnector.cpp @@ -44,6 +44,11 @@ WinixModelConnector::WinixModelConnector() config = nullptr; request = nullptr; log = nullptr; + dirs = nullptr; + mounts = nullptr; + users = nullptr; + groups = nullptr; + slog = nullptr; } @@ -65,6 +70,35 @@ Log * WinixModelConnector::get_winix_logger() } +Dirs * WinixModelConnector::get_winix_dirs() +{ + return dirs; +} + + +Mounts * WinixModelConnector::get_winix_mounts() +{ + return mounts; +} + + +Users * WinixModelConnector::get_winix_users() +{ + return users; +} + + +Groups * WinixModelConnector::get_winix_groups() +{ + return groups; +} + +SLog * WinixModelConnector::get_winix_session_logger() +{ + return slog; +} + + void WinixModelConnector::set_winix_config(Config * config) { this->config = config; @@ -83,6 +117,34 @@ void WinixModelConnector::set_winix_logger(Log * log) } +void WinixModelConnector::set_winix_dirs(Dirs * dirs) +{ + this->dirs = dirs; +} + + +void WinixModelConnector::set_winix_mounts(Mounts * mounts) +{ + this->mounts = mounts; +} + + +void WinixModelConnector::set_winix_users(Users * users) +{ + this->users = users; +} + + +void WinixModelConnector::set_winix_groups(Groups * groups) +{ + this->groups = groups; +} + +void WinixModelConnector::set_winix_session_logger(SLog * slog) +{ + this->slog = slog; +} + } diff --git a/winixd/models/winixmodelconnector.h b/winixd/models/winixmodelconnector.h index 03f3dc5..2876e53 100644 --- a/winixd/models/winixmodelconnector.h +++ b/winixd/models/winixmodelconnector.h @@ -43,6 +43,12 @@ namespace Winix class Config; class Request; class Log; +class Dirs; +class Mounts; +class Users; +class Groups; +class SLog; + class WinixModelConnector : public morm::ModelConnector { @@ -50,13 +56,23 @@ public: WinixModelConnector(); - Config * get_winix_config(); + Config * get_winix_config(); Request * get_winix_request(); - Log * get_winix_logger(); + Log * get_winix_logger(); + Dirs * get_winix_dirs(); + Mounts * get_winix_mounts(); + Users * get_winix_users(); + Groups * get_winix_groups(); + SLog * get_winix_session_logger(); void set_winix_config(Config * config); void set_winix_request(Request * request); void set_winix_logger(Log * log); + void set_winix_dirs(Dirs * dirs); + void set_winix_mounts(Mounts * mounts); + void set_winix_users(Users * users); + void set_winix_groups(Groups * groups); + void set_winix_session_logger(SLog * slog); protected: @@ -64,6 +80,11 @@ protected: Config * config; // one global config Request * request; // each thread worker has its own request (not implemented yet) Log * log; // each thread has its own logger + Dirs * dirs; + Mounts * mounts; + Users * users; + Groups * groups; + SLog * slog; };