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]
-
+
[# 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);