From e7c73240588704626f4741596b039dacad99b9cf Mon Sep 17 00:00:00 2001 From: Tomasz Sowa Date: Sat, 19 Jun 2021 23:48:12 +0200 Subject: [PATCH] ItemContent::user_name(EzcEnv & env) changed to ItemContent::user(morm::ModelWrapper ** model_wrapper) and we return a User class ItemContent::group_name(EzcEnv & env) changed to ItemContent::group(morm::ModelWrapper ** model_wrapper) and we return a Group class added ItemContent::display_user_name(EzcEnv & env) some functions in templates/item.cpp moved to Item --- winixd/core/app.cpp | 3 + winixd/core/threadmanager.cpp | 10 ++-- winixd/core/threadmanager.h | 2 +- winixd/html/fun_cat.html | 20 +++---- winixd/locale/en | 1 + winixd/locale/pl | 1 + winixd/models/item.cpp | 7 ++- winixd/models/itemcontent.cpp | 65 +++++++++++++++++--- winixd/models/itemcontent.h | 5 +- winixd/models/user.cpp | 40 ++++++++----- winixd/models/user.h | 3 + winixd/models/winixmodel.cpp | 85 +++++++++++++++++++++++++++ winixd/models/winixmodel.h | 11 ++++ winixd/models/winixmodelconnector.cpp | 67 +++++++++++++++++++++ winixd/models/winixmodelconnector.h | 16 +++++ winixd/templates/item.cpp | 32 +++++----- winixd/templates/misc.cpp | 18 +----- winixd/templates/misc.h | 8 --- winixd/templates/templates.cpp | 6 +- winixd/templates/templates.h | 6 +- 20 files changed, 318 insertions(+), 88 deletions(-) diff --git a/winixd/core/app.cpp b/winixd/core/app.cpp index 76e5a44..3449579 100644 --- a/winixd/core/app.cpp +++ b/winixd/core/app.cpp @@ -341,6 +341,9 @@ bool App::Init() model_connector.set_winix_groups(&system.groups); model_connector.set_winix_session_logger(nullptr); // will be set for each request model_connector.set_winix_session(nullptr); // will be set for each request + model_connector.set_winix_locale(&TemplatesFunctions::locale); + model_connector.set_winix_session_manager(&session_manager); + model_connector.set_winix_time_zones(&system.time_zones); if( !TryToMakeDatabaseMigration() ) return false; diff --git a/winixd/core/threadmanager.cpp b/winixd/core/threadmanager.cpp index abecc78..11a1a67 100644 --- a/winixd/core/threadmanager.cpp +++ b/winixd/core/threadmanager.cpp @@ -5,7 +5,7 @@ */ /* - * Copyright (c) 2011-2019, Tomasz Sowa + * Copyright (c) 2011-2021, Tomasz Sowa * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -105,11 +105,9 @@ void ThreadManager::Add(BaseThread * pbase, const wchar_t * thread_name) data.model_connector.set_winix_groups(nullptr); data.model_connector.set_winix_session_logger(nullptr); data.model_connector.set_winix_session(nullptr); - - - - - //data.model_connector.set_winix_request(); + data.model_connector.set_winix_locale(nullptr); // null for a moment, may will be changed + data.model_connector.set_winix_session_manager(nullptr);// null for a moment, may will be changed + data.model_connector.set_winix_time_zones(nullptr);// null for a moment, may will be changed item.object->set_model_connector(&data.model_connector); diff --git a/winixd/core/threadmanager.h b/winixd/core/threadmanager.h index 03811af..b0c0d81 100644 --- a/winixd/core/threadmanager.h +++ b/winixd/core/threadmanager.h @@ -5,7 +5,7 @@ */ /* - * Copyright (c) 2011-2014, Tomasz Sowa + * Copyright (c) 2011-2021, Tomasz Sowa * All rights reserved. * * Redistribution and use in source and binary forms, with or without diff --git a/winixd/html/fun_cat.html b/winixd/html/fun_cat.html index bdabd66..02391d3 100644 --- a/winixd/html/fun_cat.html +++ b/winixd/html/fun_cat.html @@ -1,20 +1,20 @@ -[if item_content_type_is "other"][item.content.print_content][else] +[if item.content.type_is "other"][item.content.print_content][else] [if false] - [if mount_page_arg_is "subject"][if mount_page_arg_is "info"]

[else]

[end][item_subject]

[end] - [if mount_page_arg_is "info"][include "item_info.html"][end] + [if mount_page_arg_is "subject"][if mount_page_arg_is "info"]

[else]

[end][item.subject]

[end] + [if mount_page_arg_is "info"][include "item.info.html"][end] [end] - [if one item_filetype_is_image] + [if item.content.file_type_is_image] - [item_subject] + [item.subject] [# we use pre.nowinixbreak to tell the html_filter not to put a blank space into those urles]
-		{cat_image_url}: [item_link]
- {cat_image_thumb_url}: [item_link]/-/thumb + {cat_image_url}: [item.link]
+ {cat_image_thumb_url}: [item.link]/-/thumb
@@ -22,11 +22,11 @@ [else] - [if not item_filetype_is_none] - {download}: [item_subject] + [if not item.content.file_type_is_none] + {download}: [item.subject]
-			{cat_file_url}: [item_link]
+ {cat_file_url}: [item.link]
diff --git a/winixd/locale/en b/winixd/locale/en index 331bf2a..5cd63a7 100644 --- a/winixd/locale/en +++ b/winixd/locale/en @@ -10,6 +10,7 @@ winix_frontend_tooltip = Visit UIkit 3 site logged_as = logged as +not_existing_user = not existing user display_guest_name = guest unknown = unknown diff --git a/winixd/locale/pl b/winixd/locale/pl index 10f80c9..a8c172f 100644 --- a/winixd/locale/pl +++ b/winixd/locale/pl @@ -10,6 +10,7 @@ winix_frontend_tooltip = Odwiedź stronę UIkit 3 logged_as = zalogowany jako +not_existing_user = brak takiego użytkownika display_guest_name = gość unknown = nie znany diff --git a/winixd/models/item.cpp b/winixd/models/item.cpp index 625930d..1e2463e 100644 --- a/winixd/models/item.cpp +++ b/winixd/models/item.cpp @@ -597,14 +597,17 @@ bool Item::is_current_dir() const } - - void Item::url_is(EzcEnv & env) { env.res = (url == env.par); } +//bool Item::has_read_accessxx() const +//{ +// +//} + } // namespace Winix diff --git a/winixd/models/itemcontent.cpp b/winixd/models/itemcontent.cpp index 114571c..d08a440 100644 --- a/winixd/models/itemcontent.cpp +++ b/winixd/models/itemcontent.cpp @@ -88,8 +88,8 @@ void ItemContent::fields() field(L"print_content", &ItemContent::print_content); field(L"has_static_file", &ItemContent::has_static_file); field(L"privileges_octal", &ItemContent::privileges_octal); - field(L"user_name", &ItemContent::user_name); - field(L"group_name", &ItemContent::group_name); + field(L"user", &ItemContent::user); + field(L"group", &ItemContent::group); field(L"type_is", &ItemContent::type_is); field(L"is_empty", &ItemContent::is_empty); @@ -99,6 +99,7 @@ void ItemContent::fields() field(L"file_type_is_sound", &ItemContent::file_type_is_sound); field(L"has_thumb", &ItemContent::has_thumb); + field(L"display_user_name", &ItemContent::display_user_name); @@ -432,19 +433,23 @@ void ItemContent::privileges_octal(EzcEnv & env) } -void ItemContent::user_name(EzcEnv & env) +void ItemContent::user(morm::ModelWrapper ** model_wrapper) { Users * users = get_users(); if( users ) { User * puser = users->GetUser(user_id); - TemplatesFunctions::print_user_name(env, puser, guest_name); + + if( puser ) + { + *model_wrapper = new morm::ModelWrapperModel(puser); + } } } -void ItemContent::group_name(EzcEnv & env) +void ItemContent::group(morm::ModelWrapper ** model_wrapper) { Groups * groups = get_groups(); @@ -453,9 +458,9 @@ void ItemContent::group_name(EzcEnv & env) Group * pgroup = groups->GetGroup(group_id); if( pgroup ) - env.out << pgroup->name; - else - env.out << group_id; + { + *model_wrapper = new morm::ModelWrapperModel(pgroup); + } } } @@ -525,6 +530,50 @@ void ItemContent::has_thumb(EzcEnv & env) } +void ItemContent::display_user_name(EzcEnv & env) +{ + Locale * locale = get_locale(); + + if( user_id != -1 ) + { + Users * users = get_users(); + + if( users ) + { + User * user = users->GetUser(user_id); + + if( user ) + { + user->display_name(env); + } + else + { + if( locale ) + locale->Get(L"not_existing_user"); + else + env.out << "not existing user"; + } + } + } + else + { + // IMPROVEME these should be moved to a better place + + env.out << "~"; + + if( !guest_name.empty() && !IsWhite(guest_name) ) + { + env.out << guest_name; + } + else + { + if( locale ) + env.out << locale->Get(L"display_guest_name"); + else + env.out << "guest"; + } + } +} } // namespace Winix diff --git a/winixd/models/itemcontent.h b/winixd/models/itemcontent.h index 3ec66e1..5b92327 100644 --- a/winixd/models/itemcontent.h +++ b/winixd/models/itemcontent.h @@ -282,8 +282,8 @@ protected: void print_content(EzcEnv & env); void has_static_file(EzcEnv & env); void privileges_octal(EzcEnv & env); - void user_name(EzcEnv & env); - void group_name(EzcEnv & env); + void user(morm::ModelWrapper ** model_wrapper); + void group(morm::ModelWrapper ** model_wrapper); void type_is(EzcEnv & env); void is_empty(EzcEnv & env); void file_type_is_none(EzcEnv & env); @@ -291,6 +291,7 @@ protected: void file_type_is_video(EzcEnv & env); void file_type_is_sound(EzcEnv & env); void has_thumb(EzcEnv & env); + void display_user_name(EzcEnv & env); MORM_MEMBER_FIELD(ItemContent) diff --git a/winixd/models/user.cpp b/winixd/models/user.cpp index 35ce904..890c6df 100644 --- a/winixd/models/user.cpp +++ b/winixd/models/user.cpp @@ -34,6 +34,7 @@ #include "user.h" #include "core/misc.h" +#include "templates/templates.h" namespace Winix @@ -51,23 +52,23 @@ User::User() void User::fields() { - field(L"id", id, morm::FT::no_insertable | morm::FT::no_updatable | morm::FT::primary_key); - field(L"login", name); // IMPROVEME set the same name, either 'login' or 'name' - field(L"super_user", super_user); + field(L"id", id, morm::FT::no_insertable | morm::FT::no_updatable | morm::FT::primary_key); + field(L"login", name); // IMPROVEME set the same name, either 'login' or 'name' + field(L"super_user", super_user); // IMPROVEME rename to is_super_user - field(L"has_pass", has_pass); - field(L"pass_type", pass_type); - field(L"password", password); - field(L"pass_encrypted", pass_encrypted, morm::FT::binary); - field(L"pass_hash_salted", pass_hash_salted); + field(L"has_pass", has_pass); + field(L"pass_type", pass_type); + field(L"password", L"", password); + field(L"pass_encrypted", L"", pass_encrypted, morm::FT::binary); + field(L"pass_hash_salted", pass_hash_salted); // IMPROVEME rename to pass_is_hash_salted or is_pass_hash_salted - field(L"email", email); - field(L"notify", notify); - field(L"env", env); - field(L"aenv", aenv); - field(L"status", status); - field(L"locale_id", locale_id); - field(L"time_zone_id", time_zone_id); + field(L"email", email); + field(L"notify", notify); + field(L"env", env); + field(L"aenv", aenv); // IMPROVEME rename to admin_env + field(L"status", status); + field(L"locale_id", locale_id); + field(L"time_zone_id", time_zone_id); } @@ -177,6 +178,15 @@ bool User::do_migration_to_1() +void User::display_name(EzcEnv & env) +{ + std::wstring * dname = aenv.get_wstr(L"display_name"); + + if( dname && !IsWhite(*dname, true) ) + env.out << *dname; + else + env.out << name; +} diff --git a/winixd/models/user.h b/winixd/models/user.h index 25d0411..51f7306 100644 --- a/winixd/models/user.h +++ b/winixd/models/user.h @@ -40,6 +40,7 @@ #include "model.h" #include "space/space.h" #include "date/date.h" +#include "templates/misc.h" namespace Winix @@ -145,6 +146,8 @@ public: bool do_migration(int & current_table_version); + void display_name(EzcEnv & env); + private: diff --git a/winixd/models/winixmodel.cpp b/winixd/models/winixmodel.cpp index 02f3624..0bcbd38 100644 --- a/winixd/models/winixmodel.cpp +++ b/winixd/models/winixmodel.cpp @@ -170,6 +170,47 @@ User * WinixModel::get_current_user() } +Locale * WinixModel::get_locale() +{ + WinixModelConnector * connector = get_winix_model_connector(); + + if( connector ) + { + return connector->get_winix_locale(); + } + + return nullptr; +} + + +SessionManager * WinixModel::get_session_manager() +{ + WinixModelConnector * connector = get_winix_model_connector(); + + if( connector ) + { + return connector->get_winix_session_manager(); + } + + return nullptr; +} + + +TimeZones * WinixModel::get_time_zones() +{ + WinixModelConnector * connector = get_winix_model_connector(); + + if( connector ) + { + return connector->get_winix_time_zones(); + } + + return nullptr; +} + + + + const Config * WinixModel::get_config() const { @@ -303,6 +344,50 @@ const User * WinixModel::get_current_user() const +const Locale * WinixModel::get_locale() const +{ + const WinixModelConnector * connector = get_winix_model_connector(); + + if( connector ) + { + return connector->get_winix_locale(); + } + + return nullptr; +} + + +const SessionManager * WinixModel::get_session_manager() const +{ + const WinixModelConnector * connector = get_winix_model_connector(); + + if( connector ) + { + return connector->get_winix_session_manager(); + } + + return nullptr; +} + + +const TimeZones * WinixModel::get_time_zones() const +{ + const WinixModelConnector * connector = get_winix_model_connector(); + + if( connector ) + { + return connector->get_winix_time_zones(); + } + + return nullptr; +} + + + + + + + WinixModelConnector * WinixModel::get_winix_model_connector() { if( model_connector ) diff --git a/winixd/models/winixmodel.h b/winixd/models/winixmodel.h index 993cdb4..248ddcf 100644 --- a/winixd/models/winixmodel.h +++ b/winixd/models/winixmodel.h @@ -52,6 +52,9 @@ class Groups; class SLog; class Session; class User; +class Locale; +class SessionManager; +class TimeZones; @@ -69,6 +72,9 @@ public: 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 Session * get_session(); User * get_current_user(); + Locale * get_locale(); + SessionManager * get_session_manager(); + TimeZones * get_time_zones(); const Config * get_config() const; const Request * get_request() const; @@ -80,6 +86,11 @@ public: const SLog * get_session_logger() const; // FIXME always return null at the moment, should be set when a new request is created and clear at the end of a request const Session * get_session() const; const User * get_current_user() const; + const Locale * get_locale() const; + const SessionManager * get_session_manager() const; + const TimeZones * get_time_zones() const; + + protected: diff --git a/winixd/models/winixmodelconnector.cpp b/winixd/models/winixmodelconnector.cpp index a02ec49..2635938 100644 --- a/winixd/models/winixmodelconnector.cpp +++ b/winixd/models/winixmodelconnector.cpp @@ -50,6 +50,9 @@ WinixModelConnector::WinixModelConnector() groups = nullptr; slog = nullptr; session = nullptr; + locale = nullptr; + session_manager = nullptr; + time_zones = nullptr; } @@ -107,6 +110,31 @@ Session * WinixModelConnector::get_winix_session() } +Locale * WinixModelConnector::get_winix_locale() +{ + return locale; +} + + +SessionManager * WinixModelConnector::get_winix_session_manager() +{ + return session_manager; +} + + +TimeZones * WinixModelConnector::get_winix_time_zones() +{ + return time_zones; +} + + + + + + + + + const Config * WinixModelConnector::get_winix_config() const { return config; @@ -161,6 +189,24 @@ const Session * WinixModelConnector::get_winix_session() const } +const Locale * WinixModelConnector::get_winix_locale() const +{ + return locale; +} + + +const SessionManager * WinixModelConnector::get_winix_session_manager() const +{ + return session_manager; +} + + +const TimeZones * WinixModelConnector::get_winix_time_zones() const +{ + return time_zones; +} + + void WinixModelConnector::set_winix_config(Config * config) { @@ -216,5 +262,26 @@ void WinixModelConnector::set_winix_session(Session * session) } +void WinixModelConnector::set_winix_locale(Locale * locale) +{ + this->locale = locale; +} + + +void WinixModelConnector::set_winix_session_manager(SessionManager * session_manager) +{ + this->session_manager = session_manager; +} + + +void WinixModelConnector::set_winix_time_zones(TimeZones * time_zones) +{ + this->time_zones = time_zones; +} + + + + + } diff --git a/winixd/models/winixmodelconnector.h b/winixd/models/winixmodelconnector.h index 26bb28f..f136f70 100644 --- a/winixd/models/winixmodelconnector.h +++ b/winixd/models/winixmodelconnector.h @@ -49,6 +49,9 @@ class Users; class Groups; class SLog; class Session; +class Locale; +class SessionManager; +class TimeZones; class WinixModelConnector : public morm::ModelConnector @@ -66,6 +69,9 @@ public: Groups * get_winix_groups(); SLog * get_winix_session_logger(); Session * get_winix_session(); + Locale * get_winix_locale(); + SessionManager * get_winix_session_manager(); + TimeZones * get_winix_time_zones(); const Config * get_winix_config() const; const Request * get_winix_request() const; @@ -76,6 +82,9 @@ public: const Groups * get_winix_groups() const; const SLog * get_winix_session_logger() const; const Session * get_winix_session() const; + const Locale * get_winix_locale() const; + const SessionManager * get_winix_session_manager() const; + const TimeZones * get_winix_time_zones() const; void set_winix_config(Config * config); void set_winix_request(Request * request); @@ -86,6 +95,9 @@ public: void set_winix_groups(Groups * groups); void set_winix_session_logger(SLog * slog); void set_winix_session(Session * session); + void set_winix_locale(Locale * locale); + void set_winix_session_manager(SessionManager * session_manager); + void set_winix_time_zones(TimeZones * time_zones); protected: @@ -99,6 +111,10 @@ protected: Groups * groups; SLog * slog; Session * session; + Locale * locale; + SessionManager * session_manager; + TimeZones * time_zones; + }; diff --git a/winixd/templates/item.cpp b/winixd/templates/item.cpp index 2b5c744..bb77e1b 100644 --- a/winixd/templates/item.cpp +++ b/winixd/templates/item.cpp @@ -201,24 +201,26 @@ static EzcGen ezc_generator; //} -void item_can_read(Info & i) -{ - i.res = system->HasReadAccess(*cur->request->last_item); -} +// changed to item.has_read_access +//void item_can_read(Info & i) +//{ +// i.res = system->HasReadAccess(*cur->request->last_item); +//} -void item_can_write(Info & i) -{ - i.res = system->HasWriteAccess(*cur->request->last_item); -} +// changed to item.has_write_access +//void item_can_write(Info & i) +//{ +// i.res = system->HasWriteAccess(*cur->request->last_item); +//} - -void item_can_remove(Info & i) -{ - // !! tutaj trzeba bedzie cos innego zrobic - // zwlaszcza jak dojdzie sticky bit - i.res = system->HasWriteAccess(*cur->request->dir_tab.back()); -} +// changed to item.can_be_removed +//void item_can_remove(Info & i) +//{ +// // !! tutaj trzeba bedzie cos innego zrobic +// // zwlaszcza jak dojdzie sticky bit +// i.res = system->HasWriteAccess(*cur->request->dir_tab.back()); +//} //void item_user(Info & i) diff --git a/winixd/templates/misc.cpp b/winixd/templates/misc.cpp index 4e55a64..f86d128 100644 --- a/winixd/templates/misc.cpp +++ b/winixd/templates/misc.cpp @@ -142,25 +142,12 @@ void print_date_nice(Info & i, const pt::Date & date) - -// cannot be a const reference at the moment (pt::Space is used) -void print_user_name(Info & i, User & user) -{ - std::wstring * dname = user.aenv.get_wstr(L"display_name"); - - if( dname && !IsWhite(*dname, true) ) - i.out << *dname; - else - i.out << user.name; -} - - -// IMPROVEME move me to User class +// DEPRECATED, we have ItemContent::display_user_name and User::display_name void print_user_name(Info & i, User * puser, const std::wstring & guest_name) { if( puser ) { - print_user_name(i, *puser); + puser->display_name(i); } else { @@ -176,6 +163,7 @@ void print_user_name(Info & i, User * puser, const std::wstring & guest_name) + } // namespace TemplatesFunctions } // namespace Winix diff --git a/winixd/templates/misc.h b/winixd/templates/misc.h index 0195a5b..e51342d 100644 --- a/winixd/templates/misc.h +++ b/winixd/templates/misc.h @@ -74,14 +74,6 @@ void print_hour_min(Info & i, time_t time); void print_date_nice(Info & i, const pt::Date & date); -/* - print a user name -- it is trying to use 'display_name' from user's admin env - if it not find it or if the 'display_name' is all white (consists of all white characters) - then the login name is printed -*/ -void print_user_name(Info & i, User & user); - - /* puser can be null -- in such a case guest_name is used diff --git a/winixd/templates/templates.cpp b/winixd/templates/templates.cpp index 2e12528..e4c927f 100644 --- a/winixd/templates/templates.cpp +++ b/winixd/templates/templates.cpp @@ -452,9 +452,9 @@ void Templates::CreateFunctions() //ezc_functions.Insert("item_has_static_file", item_has_static_file); // ezc_functions.Insert("item_has_thumb", item_has_thumb); - ezc_functions.Insert("item_can_read", item_can_read); - ezc_functions.Insert("item_can_write", item_can_write); - ezc_functions.Insert("item_can_remove", item_can_remove); +// ezc_functions.Insert("item_can_read", item_can_read); +// ezc_functions.Insert("item_can_write", item_can_write); +// ezc_functions.Insert("item_can_remove", item_can_remove); //ezc_functions.Insert("item_user", item_user); ezc_functions.Insert("item_modification_user", item_modification_user); ezc_functions.Insert("item_users_different", item_users_different); diff --git a/winixd/templates/templates.h b/winixd/templates/templates.h index fb220cd..c0caf94 100644 --- a/winixd/templates/templates.h +++ b/winixd/templates/templates.h @@ -342,9 +342,9 @@ namespace TemplatesFunctions //void item_filetype_is_image(Info & i); //void item_has_static_file(Info & i); //void item_has_thumb(Info & i); - void item_can_read(Info & i); - void item_can_write(Info & i); - void item_can_remove(Info & i); +// void item_can_read(Info & i); +// void item_can_write(Info & i); +// void item_can_remove(Info & i); //void item_user(Info & i); void item_modification_user(Info & i); void item_users_different(Info & i);