- added to FunctionBase: bool register_default_models (default true)

if true then winix will add default models for ezc templates such as "request", "item", etc.
- some methods from templates/item.cpp moved to Item
This commit is contained in:
2021-06-20 18:04:50 +02:00
parent e7c7324058
commit 79eda7abb0
21 changed files with 271 additions and 83 deletions

View File

@@ -38,6 +38,7 @@
#include "core/request.h"
#include "templates/templates.h"
#include "core/session.h"
#include "core/log.h"
@@ -85,7 +86,10 @@ void Item::fields()
field(L"can_be_removed", &Item::can_be_removed);
field(L"has_read_access", &Item::has_read_access);
field(L"has_write_access", &Item::has_write_access);
field(L"has_read_write_access", &Item::has_read_write_access);
field(L"has_read_exec_access", &Item::has_read_exec_access);
field(L"execute", &Item::execute);
// may we should add a method setTypeFromInt(int t)?
@@ -374,17 +378,27 @@ bool Item::can_be_removed() const
}
bool Item::has_read_access()
bool Item::has_read_access() const
{
return item_content.has_read_access();
}
bool Item::has_write_access()
bool Item::has_write_access() const
{
return item_content.has_write_access();
}
bool Item::has_read_write_access() const
{
return item_content.has_read_write_access();
}
bool Item::has_read_exec_access() const
{
return item_content.has_read_exec_access();
}
bool Item::type_is_symlink() const
{
@@ -603,10 +617,43 @@ void Item::url_is(EzcEnv & env)
}
//bool Item::has_read_accessxx() const
//{
//
//}
void Item::execute(EzcEnv & env)
{
if( has_read_access() )
{
PatternCacher * pattern_cacher = get_pattern_cacher();
Request * request = get_request();
Config * config = get_config();
if( pattern_cacher && request && config )
{
HtmlTextStream item_run_content;
TemplatesFunctions::EzcGen ezc_generator;
Ezc::Pattern * p = pattern_cacher->GetPattern(*this);
TemplatesFunctions::InitGenerator(ezc_generator, request->models);
ezc_generator.SetPattern(*p);
if( config->allow_ezc_frames_in_executable_items )
ezc_generator.Generate(item_run_content, request->out_streams);
else
ezc_generator.Generate(item_run_content);
ItemContent::print_content(env.out, item_run_content.Str(), item_content.content_raw_type, config->html_filter);
}
}
else
{
Log * log = get_logger();
if( log )
{
(*log) << "Item::execute: permission denied, no read_exec access to item id: " << id << ", url: " << url << ", subject" << subject;
}
}
}

View File

@@ -38,12 +38,6 @@
#include <string>
#include "winixmodel.h"
#include "itemcontent.h"
// temporary
#include "core/log.h"
#include "funinfo.h"
#include "templates/htmltextstream.h"
#include "templates/misc.h"
@@ -189,8 +183,10 @@ public:
bool can_remove_child(long child_user_id) const;
bool can_be_removed() const;
bool has_read_access();
bool has_write_access();
bool has_read_access() const;
bool has_write_access() const;
bool has_read_write_access() const;
bool has_read_exec_access() const;
bool type_is_symlink() const;
bool type_is_file() const;
@@ -202,7 +198,6 @@ public:
bool is_current_dir() const;
protected:
CalcItemsHelper calc_items_by_url(long parent_id, const std::wstring & url);
@@ -216,9 +211,8 @@ protected:
void print_dir_without_slash(EzcEnv & env);
void dir_link(EzcEnv & env);
void link(EzcEnv & env);
void url_is(EzcEnv & env);
void execute(EzcEnv & env);
MORM_MEMBER_FIELD(Item)

View File

@@ -209,6 +209,17 @@ TimeZones * WinixModel::get_time_zones()
}
PatternCacher * WinixModel::get_pattern_cacher()
{
WinixModelConnector * connector = get_winix_model_connector();
if( connector )
{
return connector->get_winix_pattern_cacher();
}
return nullptr;
}
@@ -383,6 +394,19 @@ const TimeZones * WinixModel::get_time_zones() const
}
const PatternCacher * WinixModel::get_pattern_cacher() const
{
const WinixModelConnector * connector = get_winix_model_connector();
if( connector )
{
return connector->get_winix_pattern_cacher();
}
return nullptr;
}

View File

@@ -55,7 +55,7 @@ class User;
class Locale;
class SessionManager;
class TimeZones;
class PatternCacher;
class WinixModel : public morm::Model
@@ -75,6 +75,7 @@ public:
Locale * get_locale();
SessionManager * get_session_manager();
TimeZones * get_time_zones();
PatternCacher * get_pattern_cacher();
const Config * get_config() const;
const Request * get_request() const;
@@ -89,6 +90,7 @@ public:
const Locale * get_locale() const;
const SessionManager * get_session_manager() const;
const TimeZones * get_time_zones() const;
const PatternCacher * get_pattern_cacher() const;

View File

@@ -53,6 +53,7 @@ WinixModelConnector::WinixModelConnector()
locale = nullptr;
session_manager = nullptr;
time_zones = nullptr;
pattern_cacher = nullptr;
}
@@ -127,6 +128,10 @@ TimeZones * WinixModelConnector::get_winix_time_zones()
return time_zones;
}
PatternCacher * WinixModelConnector::get_winix_pattern_cacher()
{
return pattern_cacher;
}
@@ -207,6 +212,12 @@ const TimeZones * WinixModelConnector::get_winix_time_zones() const
}
const PatternCacher * WinixModelConnector::get_winix_pattern_cacher() const
{
return pattern_cacher;
}
void WinixModelConnector::set_winix_config(Config * config)
{
@@ -280,6 +291,11 @@ void WinixModelConnector::set_winix_time_zones(TimeZones * time_zones)
}
void WinixModelConnector::set_winix_pattern_cacher(PatternCacher * pattern_cacher)
{
this->pattern_cacher = pattern_cacher;
}

View File

@@ -52,6 +52,8 @@ class Session;
class Locale;
class SessionManager;
class TimeZones;
class PatternCacher;
class WinixModelConnector : public morm::ModelConnector
@@ -72,6 +74,8 @@ public:
Locale * get_winix_locale();
SessionManager * get_winix_session_manager();
TimeZones * get_winix_time_zones();
PatternCacher * get_winix_pattern_cacher();
const Config * get_winix_config() const;
const Request * get_winix_request() const;
@@ -85,6 +89,7 @@ public:
const Locale * get_winix_locale() const;
const SessionManager * get_winix_session_manager() const;
const TimeZones * get_winix_time_zones() const;
const PatternCacher * get_winix_pattern_cacher() const;
void set_winix_config(Config * config);
void set_winix_request(Request * request);
@@ -98,6 +103,7 @@ public:
void set_winix_locale(Locale * locale);
void set_winix_session_manager(SessionManager * session_manager);
void set_winix_time_zones(TimeZones * time_zones);
void set_winix_pattern_cacher(PatternCacher * pattern_cacher);
protected:
@@ -114,7 +120,7 @@ protected:
Locale * locale;
SessionManager * session_manager;
TimeZones * time_zones;
PatternCacher * pattern_cacher;
};