changed: now Request class is a model class - we have fields() method there to map fields for ezc templates (currently only dir_tab)

removed: [dir_tab] ezc statement
changed: Ls winix function loads its own dir_tab container (beforehand it was loaded by [dir_tab] ezc statement)
         it's available by [child_dirs] name
This commit is contained in:
Tomasz Sowa 2021-06-17 21:44:29 +02:00
parent 4db421d6c3
commit ebd791a256
11 changed files with 146 additions and 69 deletions

View File

@ -88,6 +88,7 @@ App::App()
winix_request.set_cur(&cur);
winix_request.set_session_manager(&session_manager);
winix_request.set_locale(&TemplatesFunctions::locale);
winix_request.set_model_connector(&model_connector);
// //////////////////////////////////

View File

@ -53,6 +53,13 @@ Request::Request()
}
void Request::fields()
{
field(L"", L"dirs", dir_tab);
}
void Request::SetConfig(Config * pconfig)
{
config = pconfig;

View File

@ -50,6 +50,8 @@
#include "outstreams.h"
#include "models.h"
#include "models/winixmodel.h"
namespace Winix
{
@ -62,7 +64,7 @@ class FunctionBase;
struct Request
struct Request : public WinixModel
{
// how many input headers can be put to in_headers struct
static const size_t MAX_INPUT_HEADERS = 32;
@ -360,6 +362,10 @@ struct Request
Request();
void SetConfig(Config * pconfig);
void fields();
void RequestStarts();
void Clear();

View File

@ -50,6 +50,41 @@ Ls::Ls()
}
void Ls::prepare_files()
{
morm::Finder<Item> finder(model_connector);
finder.
select().
where().
eq(L"parent_id", cur->request->dir_tab.back()->id).
neq(L"type", static_cast<int>(Item::dir));
if( cur->request->IsParam(L"ckeditor_browse") )
{
finder.eq(L"content", L"file_type", WINIX_ITEM_FILETYPE_IMAGE);
}
finder.get_vector(item_tab);
}
void Ls::prepare_dirs()
{
dir_tab.clear();
// with parent directory (if exists)
// if dir_tab.size() is equal to 1 then we at the root directory
if( cur->request->dir_tab.size() >= 2 )
{
Item * dir_up = cur->request->dir_tab[cur->request->dir_tab.size()-2];
dir_tab.push_back(dir_up);
}
system->dirs.GetDirChilds(cur->request->dir_tab.back()->id, dir_tab);
}
void Ls::MakeGet()
{
// !! IMPROVE ME
@ -61,33 +96,15 @@ void Ls::MakeGet()
if( !cur->request->is_item )
{
// DbItemQuery iq;
//
// iq.sel_content = false;
//
// iq.WhereParentId(cur->request->dir_tab.back()->id);
// iq.WhereType(Item::dir, false);
prepare_files();
prepare_dirs();
morm::Finder<Item> finder(model_connector);
cur->request->models.Add(L"items", item_tab);
cur->request->models.Add(L"child_dirs", dir_tab);
finder.
select().
where().
eq(L"parent_id", cur->request->dir_tab.back()->id).
neq(L"type", static_cast<int>(Item::dir));
if( cur->request->IsParam(L"ckeditor_browse") )
{
//iq.WhereFileType(WINIX_ITEM_FILETYPE_IMAGE);
//db->GetItems(cur->request->item_tab, iq);
finder.eq(L"content", L"file_type", WINIX_ITEM_FILETYPE_IMAGE);
}
// else
// {
// //db->GetItems(cur->request->item_tab, iq);
// }
finder.get_vector(cur->request->item_tab);
// IMPROVEME this will be put by a generic method from winix
// if output is html
cur->request->models.Add(L"request", cur->request);
}
}

View File

@ -5,7 +5,7 @@
*/
/*
* Copyright (c) 2010-2014, Tomasz Sowa
* Copyright (c) 2010-2021, Tomasz Sowa
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -55,7 +55,11 @@ public:
private:
std::vector<Item> item_tab;
std::vector<Item*> dir_tab;
void prepare_files();
void prepare_dirs();
};

View File

@ -7,14 +7,14 @@
<div class="uk-margin">
<ul class="uk-breadcrumb">
[for dir_tab]
[for request.dirs]
<li>
<a href="[doc_base_url][dir_tab_link]ls/ckeditor_browse/CKEditor:itemcontent/CKEditorFuncNum:[ls_ckeditor_funnum_browse]">
[if cmp dir_tab_url ""]
<a href="[doc_base_url][request.dirs.link]ls/ckeditor_browse/CKEditor:itemcontent/CKEditorFuncNum:[ls_ckeditor_funnum_browse]">
[if cmp request.dirs.url ""]
[# !! IMPROVE ME it would be better to have a flag of some kind to indicate that this is a root dir]
{ls_root_dir_name}
[else]
[dir_tab_url]
[request.dirs.url]
[end]
</a>
</li>
@ -25,16 +25,16 @@
<div class="uk-flex uk-margin-medium">
<div class="uk-width-1-4">
[if dir_childs_tab "with_parent"]
[if child_dirs]
<ul class="uk-list uk-list-disc uk-list-collapse">
[for dir_childs_tab "with_parent"]
[for child_dirs]
<li>
[if dir_childs_is_parent]
[if child_dirs.is_parent_for_current_dir]
[# make sure the name of the textarea in fun_ckeditor.html is called: itemcontent]
[# is it needed?]
<a href="[doc_base_url][dir_parent]ls/ckeditor_browse/CKEditor:itemcontent/CKEditorFuncNum:[ls_ckeditor_funnum_browse]">../</a>
[else]
<a href="[doc_base_url][dir][dir_childs_tab_url]/ls/ckeditor_browse/CKEditor:itemcontent/CKEditorFuncNum:[ls_ckeditor_funnum_browse]">[dir_childs_tab_url]/</a>
<a href="[doc_base_url][dir][child_dirs.url]/ls/ckeditor_browse/CKEditor:itemcontent/CKEditorFuncNum:[ls_ckeditor_funnum_browse]">[child_dirs.url]/</a>
[end]
</li>
[end]
@ -45,12 +45,12 @@
<div class="">
[if item_tab]
[if items]
<ul class="uk-list uk-list-collapse" data-uk-grid>
[for item_tab]
<li><a href="javascript:select('[item_tab_link]')"><img data-src="[item_tab_link]/-/thumb" alt="[item_tab_subject]" height="120" data-uk-img></a></li>
[for items]
<li><a href="javascript:select('[items.link]')"><img data-src="[items.link]/-/thumb" alt="[items.subject]" height="120" data-uk-img></a></li>
[end]
</ul>
@ -69,11 +69,7 @@
[if winix_function_param_is "l"]
[# loading dir childs table with a parent directory]
[# now the parameter can be passed directly to if-one]
[dir_childs_tab "with_parent"]
[if one dir_childs_tab item_tab]
[if one child_dirs items]
<table class="uk-table uk-table-divider uk-table-small uk-table-justify uk-table-responsive">
<tr>
@ -84,29 +80,29 @@
<th>{ls_name}</th>
</tr>
[for dir_childs_tab]
[for child_dirs]
<tr>
<td>d</td>
<td>[dir_childs_tab_privileges]</td>
<td>[dir_childs_tab_user]</td>
<td>[dir_childs_tab_group]</td>
<td>[child_dirs_privileges]</td>
<td>[child_dirs_user]</td>
<td>[child_dirs_group]</td>
<td>
[if dir_childs_is_parent]
[if child_dirs.is_parent_for_current_dir]
<a href="[doc_base_url][dir_parent_without_slash][if winix_function_param_is "dirls"]/ls/l/dirls[end]">../</a>
[else]
<a href="[doc_base_url][dir][dir_childs_tab_url][if winix_function_param_is "dirls"]/ls/l/dirls[end]">[dir_childs_tab_url]/</a>
<a href="[doc_base_url][dir][child_dirs.url][if winix_function_param_is "dirls"]/ls/l/dirls[end]">[child_dirs.url]/</a>
[end]
</td>
</tr>
[end]
[for item_tab]
[for items]
<tr>
<td>[if item_tab_type_is_symlink]l[else][if item_tab_has_static_file]s[else]-[end][end]</td>
<td>[item_tab_privileges]</td>
<td>[item_tab_user]</td>
<td>[item_tab_group]</td>
<td><a href="[doc_base_url][dir][item_tab_url]">[item_tab_url]</a>[if item_tab_type_is_symlink] -> [item_tab_link_to][end]</td>
<td>[if items_type_is_symlink]l[else][if items_has_static_file]s[else]-[end][end]</td>
<td>[items_privileges]</td>
<td>[items_user]</td>
<td>[items_group]</td>
<td><a href="[doc_base_url][dir][items.url]">[items.url]</a>[if items_type_is_symlink] -> [items_link_to][end]</td>
</tr>
[end]
</table>
@ -115,27 +111,24 @@
[else]
[# loading dir childs table with a parent directory]
[dir_childs_tab "with_parent"]
[if dir_childs_tab]
[if child_dirs]
<ul class="uk-list uk-list-disc uk-list-collapse">
[for dir_childs_tab]
[for child_dirs]
<li>
[if dir_childs_is_parent]
[if child_dirs.is_parent_for_current_dir]
<a href="[doc_base_url][dir_parent_without_slash][if winix_function_param_is "dirls"]/ls/dirls[end]">../</a>
[else]
<a href="[doc_base_url][dir][dir_childs_tab_url][if winix_function_param_is "dirls"]/ls/dirls[end]">[dir_childs_tab_url]/</a>
<a href="[doc_base_url][dir][child_dirs.url][if winix_function_param_is "dirls"]/ls/dirls[end]">[child_dirs.url]/</a>
[end]
</li>
[end]
</ul>
[end]
[# !! IMPROVE ME those two lists (above and below) can be combined together]
[if item_tab]
[if items]
<ul class="uk-list uk-list-disc uk-list-collapse">
[for item_tab]
<li><a href="[doc_base_url][dir][item_tab_url]">[item_tab_url]</a></li>
[for items]
<li><a href="[doc_base_url][dir][items.url]">[items.url]</a></li>
[end]
</ul>
[end]

View File

@ -70,6 +70,9 @@ void Item::fields()
field(L"is", &Item::is);
field(L"dir_link", &Item::dir_link);
field(L"link", &Item::link);
field(L"is_parent_for_current_dir", &Item::is_parent_for_current_dir);
field(L"is_current_dir", &Item::is_current_dir);
field(L"is_root", &Item::is_root);
// may we should add a method setTypeFromInt(int t)?
@ -325,6 +328,41 @@ void Item::link(Ezc::FunInfo<HtmlTextStream> & env)
}
void Item::is_parent_for_current_dir(Ezc::FunInfo<HtmlTextStream> & env)
{
Request * req = get_request();
if( req )
{
if( req->dir_tab.size() > 1 )
{
env.res = (id == req->dir_tab[req->dir_tab.size() - 2]->id);
}
}
}
void Item::is_current_dir(Ezc::FunInfo<HtmlTextStream> & env)
{
Request * req = get_request();
if( req )
{
env.res = (id == req->dir_tab.back()->id);
}
}
// rename to is_root_dir
void Item::is_root(Ezc::FunInfo<HtmlTextStream> & env)
{
Request * req = get_request();
if( req )
{
// add a test whether this is a directory (not a file or a symlink)
env.res = (parent_id == -1);
}
}

View File

@ -190,6 +190,9 @@ public:
void is(Ezc::FunInfo<HtmlTextStream> & env);
void dir_link(Ezc::FunInfo<HtmlTextStream> & env);
void link(Ezc::FunInfo<HtmlTextStream> & env);
void is_parent_for_current_dir(Ezc::FunInfo<HtmlTextStream> & env);
void is_current_dir(Ezc::FunInfo<HtmlTextStream> & env);
void is_root(Ezc::FunInfo<HtmlTextStream> & env);
protected:

View File

@ -204,7 +204,7 @@ void dir_level_is(Info & i)
/*
static std::vector<Item*> dir_childs_table;
static size_t dir_childs_index;
// cur->request->id is never 0 and we can start dir_childs_reqid from 0
@ -298,12 +298,12 @@ void dir_childs_tab_group(Info & i)
i.out << group_id;
}
}
*/
/*
static size_t dir_index;
@ -333,7 +333,6 @@ void dir_tab_link(Info & i)
}
}
void dir_tab_is_root(Info & i)
{
i.res = (dir_index == 0);
@ -345,6 +344,7 @@ void dir_tab_subject(Info & i)
if( dir_index < cur->request->dir_tab.size() )
i.out << cur->request->dir_tab[dir_index]->subject;
}
*/
void dir_last_link_to(Info & i)

View File

@ -274,18 +274,22 @@ void Templates::CreateFunctions()
ezc_functions.Insert("dir_has_parents", dir_has_parents);
ezc_functions.Insert("dir_level_is", dir_level_is);
/*
ezc_functions.Insert("dir_childs_tab", dir_childs_tab);
ezc_functions.Insert("dir_childs_is_parent", dir_childs_is_parent);
ezc_functions.Insert("dir_childs_tab_url", dir_childs_tab_url);
ezc_functions.Insert("dir_childs_tab_privileges", dir_childs_tab_privileges);
ezc_functions.Insert("dir_childs_tab_user", dir_childs_tab_user);
ezc_functions.Insert("dir_childs_tab_group", dir_childs_tab_group);
*/
/*
ezc_functions.Insert("dir_tab", dir_tab);
ezc_functions.Insert("dir_tab_url", dir_tab_url);
ezc_functions.Insert("dir_tab_link", dir_tab_link);
ezc_functions.Insert("dir_tab_subject", dir_tab_subject);
ezc_functions.Insert("dir_tab_is_root", dir_tab_is_root);
*/
ezc_functions.Insert("dir_last_link_to", dir_last_link_to);
ezc_functions.Insert("dir_last_is_link_redirect", dir_last_is_link_redirect);

View File

@ -164,18 +164,22 @@ namespace TemplatesFunctions
void dir_has_parents(Info & i);
void dir_level_is(Info & i);
/*
void dir_childs_tab(Info & i);
void dir_childs_is_parent(Info & i);
void dir_childs_tab_url(Info & i);
void dir_childs_tab_privileges(Info & i);
void dir_childs_tab_user(Info & i);
void dir_childs_tab_group(Info & i);
*/
/*
void dir_tab(Info & i);
void dir_tab_url(Info & i);
void dir_tab_link(Info & i);
void dir_tab_subject(Info & i);
void dir_tab_is_root(Info & i);
*/
void dir_last_link_to(Info &);
void dir_last_is_link_redirect(Info & i);