From 240bf4dc5ddb2411daede660d12b289c3cc4e4b8 Mon Sep 17 00:00:00 2001 From: Tomasz Sowa Date: Mon, 4 Apr 2016 16:02:36 +0000 Subject: [PATCH] changed: the way how raw template is set option for setting raw template from 'emacs' function has been removed now we have index_raw.html template and it can be set from 'template' function removed: template index_fullscreen.html changed: some work in miscspace (changed: space_list_tab, space_list_tab_value and space_list_tab_has_next) fixed: main index template could not be set through 'template' function git-svn-id: svn://ttmath.org/publicrep/winix/trunk@1039 e52654a7-88a9-db11-a3e9-0013d4bc506e --- winixd/core/app.cpp | 36 +--- winixd/core/config.cpp | 3 +- winixd/core/config.h | 6 +- winixd/core/item.h | 4 +- winixd/core/system.cpp | 25 +-- winixd/core/system.h | 3 +- winixd/functions/functions.cpp | 8 +- winixd/functions/template.cpp | 9 +- winixd/html/index_fullscreen.html | 24 --- winixd/html/index_raw.html | 1 + winixd/plugins/gallery/templates.cpp | 6 +- winixd/plugins/menu/templates.cpp | 6 +- winixd/templates/dir.cpp | 10 +- winixd/templates/env.cpp | 8 +- winixd/templates/item.cpp | 19 +- winixd/templates/miscspace.cpp | 280 ++------------------------- winixd/templates/miscspace.h | 10 +- winixd/templates/template.cpp | 5 +- winixd/templates/templates.cpp | 70 +++---- winixd/templates/templates.h | 6 +- winixd/templates/user.cpp | 11 +- 21 files changed, 105 insertions(+), 445 deletions(-) delete mode 100644 winixd/html/index_fullscreen.html create mode 100644 winixd/html/index_raw.html diff --git a/winixd/core/app.cpp b/winixd/core/app.cpp index 3b0e58a..107918f 100644 --- a/winixd/core/app.cpp +++ b/winixd/core/app.cpp @@ -601,8 +601,6 @@ void App::CreateJSONAnswer() // !! IMPROVE ME change to a better name void App::MakePage() { -bool sent = false; - if( cur.request->page_generated || !cur.request->redirect_to.empty() || !cur.request->x_sendfile.empty() ) return; @@ -610,27 +608,7 @@ bool sent = false; cur.request->gen_skip_new_line, cur.request->gen_use_special_chars); - if( cur.request->is_item && cur.request->item.file_type == WINIX_ITEM_FILETYPE_NONE && - cur.request->item.content_type == Item::ct_raw && cur.request->status == WINIX_ERR_OK && cur.request->function ) - { - if( cur.request->function == &functions.fun_cat ) - { - TemplatesFunctions::item_print_content(cur.request->out_main_stream, - cur.request->item.content, cur.request->item.content_type); - sent = true; - } - else - if( cur.request->function == &functions.fun_run ) - { - templates.GenerateRunRaw(); - sent = true; - } - } - - if( !sent ) - { - templates.Generate(); - } + templates.Generate(); } @@ -1182,13 +1160,6 @@ void App::SendHeaders() - template - DbTextStream::RawText R(const RawType & par) - { - return DbTextStream::RawText(par); - } - - void App::SendCookies() { PT::Space::TableSingle::iterator i; @@ -1248,14 +1219,11 @@ void App::PrepareHeaders(bool compressing, int compress_encoding, Header header, void App::FilterContent() { Request & req = *cur.request; - bool raw = req.is_item && req.item.content_type == Item::ct_raw && - req.status == WINIX_ERR_OK && req.function && - (req.function == &functions.fun_cat || req.function == &functions.fun_run); bool filter_main_stream = false; bool filter_json = false; - if( config.html_filter && !req.send_bin_stream && !raw ) + if( config.html_filter && !req.send_bin_stream ) { if( req.return_json ) { diff --git a/winixd/core/config.cpp b/winixd/core/config.cpp index c0bd60c..2ce1e2d 100644 --- a/winixd/core/config.cpp +++ b/winixd/core/config.cpp @@ -5,7 +5,7 @@ */ /* - * Copyright (c) 2008-2015, Tomasz Sowa + * Copyright (c) 2008-2016, Tomasz Sowa * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -182,6 +182,7 @@ void Config::AssignValues(bool stdout_is_closed) templates_fun_prefix = Text(L"templates_fun_prefix", L"fun_"); templates_fun_postfix = Text(L"templates_fun_postfix", L".html"); templates_index = Text(L"templates_index", L"index.html"); + templates_index_raw = Text(L"templates_index_raw", L"index_raw.html"); template_only_root_use_template_fun = Bool(L"template_only_root_use_template_fun", false); http_session_id_name = Text(L"http_session_id_name", L"session_id"); diff --git a/winixd/core/config.h b/winixd/core/config.h index 08ee767..405dd5e 100644 --- a/winixd/core/config.h +++ b/winixd/core/config.h @@ -5,7 +5,7 @@ */ /* - * Copyright (c) 2008-2015, Tomasz Sowa + * Copyright (c) 2008-2016, Tomasz Sowa * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -175,6 +175,10 @@ public: // default: index.html std::wstring templates_index; + // html template used to send raw content + // default: index_raw.html + std::wstring templates_index_raw; + // if true then only root can use 'template' winix function // default: false bool template_only_root_use_template_fun; diff --git a/winixd/core/item.h b/winixd/core/item.h index 7ef2730..d3a12e2 100644 --- a/winixd/core/item.h +++ b/winixd/core/item.h @@ -5,7 +5,7 @@ */ /* - * Copyright (c) 2008-2014, Tomasz Sowa + * Copyright (c) 2008-2016, Tomasz Sowa * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -82,7 +82,6 @@ struct Item ct_formatted_text, ct_html, ct_bbcode, - ct_raw }; ContentType content_type; @@ -116,7 +115,6 @@ struct Item int hash_type; // hash type WINIX_CRYPT_HASH_* (see crypt.h) size_t file_size; // size of the file - std::wstring html_template; diff --git a/winixd/core/system.cpp b/winixd/core/system.cpp index db4a241..d4cb56a 100644 --- a/winixd/core/system.cpp +++ b/winixd/core/system.cpp @@ -5,7 +5,7 @@ */ /* - * Copyright (c) 2010-2014, Tomasz Sowa + * Copyright (c) 2010-2016, Tomasz Sowa * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -753,11 +753,6 @@ bool System::CanUseBBCode(long user_id) } -bool System::CanUseRaw(long user_id) -{ - return IsSuperUser(user_id) || IsMemberOfGroup(user_id, L"allow_raw"); -} - bool System::IsSuperUser(long user_id) @@ -1395,15 +1390,15 @@ bool System::AddCommonFileToVar(const wchar_t * file_path, const wchar_t * url, } file_content_item.Clear(); - file_content_item.parent_id = var->id; - file_content_item.user_id = var->user_id; - file_content_item.group_id = var->group_id; - file_content_item.privileges = 07555; // !! IMPROVE ME: may it should be added as a parameter to this function? - file_content_item.subject = url; - file_content_item.url = url; - file_content_item.type = Item::file; - file_content_item.content_type = Item::ct_raw; - file_content_item.content = file_content; + file_content_item.parent_id = var->id; + file_content_item.user_id = var->user_id; + file_content_item.group_id = var->group_id; + file_content_item.privileges = 07555; // !! IMPROVE ME: may it should be added as a parameter to this function? + file_content_item.subject = url; + file_content_item.url = url; + file_content_item.type = Item::file; + file_content_item.html_template = config->templates_index_raw; + file_content_item.content = file_content; return AddFile(file_content_item, false) == WINIX_ERR_OK; } diff --git a/winixd/core/system.h b/winixd/core/system.h index 476a837..6b89725 100644 --- a/winixd/core/system.h +++ b/winixd/core/system.h @@ -5,7 +5,7 @@ */ /* - * Copyright (c) 2010-2014, Tomasz Sowa + * Copyright (c) 2010-2016, Tomasz Sowa * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -158,7 +158,6 @@ public: bool CanUseHtml(long user_id); bool CanUseBBCode(long user_id); - bool CanUseRaw(long user_id); bool IsSuperUser(long user_id); bool IsMemberOfGroup(long user_id, const wchar_t * group_name); diff --git a/winixd/functions/functions.cpp b/winixd/functions/functions.cpp index 85d9f8b..29478fd 100644 --- a/winixd/functions/functions.cpp +++ b/winixd/functions/functions.cpp @@ -5,7 +5,7 @@ */ /* - * Copyright (c) 2010-2014, Tomasz Sowa + * Copyright (c) 2010-2016, Tomasz Sowa * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -590,12 +590,6 @@ void Functions::ReadItemContentWithType(Item & item) if( system->CanUseBBCode(user_id) ) item.content_type = Item::ct_bbcode; } - else - if( temp == L"4" ) - { - if( system->CanUseRaw(user_id) ) - item.content_type = Item::ct_raw; - } } diff --git a/winixd/functions/template.cpp b/winixd/functions/template.cpp index bfd9dcf..2f8f4df 100644 --- a/winixd/functions/template.cpp +++ b/winixd/functions/template.cpp @@ -5,7 +5,7 @@ */ /* - * Copyright (c) 2010-2014, Tomasz Sowa + * Copyright (c) 2010-2016, Tomasz Sowa * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -96,8 +96,13 @@ void Template::CreateTemplateFileName(const std::wstring & index_str) html_template = config->templates_index; } else + if( index == 1 ) { - index -= 1; + html_template = config->templates_index_raw; + } + else + { + index -= 2; Mount::ParamRow & par = system->mounts.pmount->param[system->mounts.MountParHtmlTemplate()]; if( !par.defined || (size_t)index >= par.arg.size() ) diff --git a/winixd/html/index_fullscreen.html b/winixd/html/index_fullscreen.html deleted file mode 100644 index bc6f937..0000000 --- a/winixd/html/index_fullscreen.html +++ /dev/null @@ -1,24 +0,0 @@ - -[# minimalistic template] - - - - - - [doc_title] - [include "index_head_functions_add.html"] - - - - -
-[include "slog.html"] - -[# each winix function has div.winix in its template defined -- only functions: cat and run don't have div.winix] -[# so you can easly use 'content' with your own template] -[# and when using other winix functions you automatically get proper styling] -[content] -
- - - diff --git a/winixd/html/index_raw.html b/winixd/html/index_raw.html new file mode 100644 index 0000000..f972084 --- /dev/null +++ b/winixd/html/index_raw.html @@ -0,0 +1 @@ +[content] diff --git a/winixd/plugins/gallery/templates.cpp b/winixd/plugins/gallery/templates.cpp index 631b782..7baa8af 100644 --- a/winixd/plugins/gallery/templates.cpp +++ b/winixd/plugins/gallery/templates.cpp @@ -5,7 +5,7 @@ */ /* - * Copyright (c) 2011-2014, Tomasz Sowa + * Copyright (c) 2011-2016, Tomasz Sowa * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -151,7 +151,7 @@ void gallery_tab_meta_tab_value(Info & i) if( gallery_index < gallery_info.item_sort_tab.size() ) { Item & item = *gallery_info.item_sort_tab[gallery_index]; - space_list_tab_value(i, item.meta); + space_list_tab_value(i, item.meta, L"gallery_tab_meta_tab"); } } @@ -161,7 +161,7 @@ void gallery_tab_meta_tab_has_next(Info & i) if( gallery_index < gallery_info.item_sort_tab.size() ) { Item & item = *gallery_info.item_sort_tab[gallery_index]; - space_list_tab_has_next(i, item.meta); + space_list_tab_has_next(i, item.meta, L"gallery_tab_meta_tab"); } } diff --git a/winixd/plugins/menu/templates.cpp b/winixd/plugins/menu/templates.cpp index 84ebf58..52e12af 100644 --- a/winixd/plugins/menu/templates.cpp +++ b/winixd/plugins/menu/templates.cpp @@ -5,7 +5,7 @@ */ /* - * Copyright (c) 2011-2015, Tomasz Sowa + * Copyright (c) 2011-2016, Tomasz Sowa * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -405,7 +405,7 @@ void menu_dir_tab_meta_tab_value(Info & i) StackItem * sitem = reinterpret_cast(stack->fun_data); if( stack->iter < sitem->citem->menu_items.size() ) - space_list_tab_value(i, sitem->citem->menu_items[stack->iter].meta); + space_list_tab_value(i, sitem->citem->menu_items[stack->iter].meta, L"menu_dir_tab_meta_tab"); } } @@ -417,7 +417,7 @@ void menu_dir_tab_meta_tab_has_next(Info & i) StackItem * sitem = reinterpret_cast(stack->fun_data); if( stack->iter < sitem->citem->menu_items.size() ) - space_list_tab_has_next(i, sitem->citem->menu_items[stack->iter].meta); + space_list_tab_has_next(i, sitem->citem->menu_items[stack->iter].meta, L"menu_dir_tab_meta_tab"); } } diff --git a/winixd/templates/dir.cpp b/winixd/templates/dir.cpp index 63f917f..3ce01a8 100644 --- a/winixd/templates/dir.cpp +++ b/winixd/templates/dir.cpp @@ -5,7 +5,7 @@ */ /* - * Copyright (c) 2008-2014, Tomasz Sowa + * Copyright (c) 2008-2016, Tomasz Sowa * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -482,14 +482,14 @@ void dir_last_meta_tab(Info & i) void dir_last_meta_tab_value(Info & i) { - space_list_tab_value(i, cur->request->dir_tab.back()->meta); + space_list_tab_value(i, cur->request->dir_tab.back()->meta, L"dir_last_meta_tab"); } void dir_last_meta_tab_has_next(Info & i) { - space_list_tab_has_next(i, cur->request->dir_tab.back()->meta); + space_list_tab_has_next(i, cur->request->dir_tab.back()->meta, L"dir_last_meta_tab"); } @@ -515,13 +515,13 @@ void dir_last_admin_meta_tab(Info & i) void dir_last_admin_meta_tab_value(Info & i) { - space_list_tab_value(i, cur->request->dir_tab.back()->ameta); + space_list_tab_value(i, cur->request->dir_tab.back()->ameta, L"dir_last_admin_meta_tab"); } void dir_last_admin_meta_tab_has_next(Info & i) { - space_list_tab_has_next(i, cur->request->dir_tab.back()->ameta); + space_list_tab_has_next(i, cur->request->dir_tab.back()->ameta, L"dir_last_admin_meta_tab"); } diff --git a/winixd/templates/env.cpp b/winixd/templates/env.cpp index b924999..b696e48 100644 --- a/winixd/templates/env.cpp +++ b/winixd/templates/env.cpp @@ -79,7 +79,7 @@ void env_tab_value(Info & i) User * puser = cur->session->puser; if( puser ) - space_list_tab_value(i, puser->env); + space_list_tab_value(i, puser->env, L"env_tab"); } @@ -89,7 +89,7 @@ void env_tab_has_next(Info & i) User * puser = cur->session->puser; if( puser ) - space_list_tab_has_next(i, puser->env); + space_list_tab_has_next(i, puser->env, L"env_tab"); } @@ -132,7 +132,7 @@ void env_admin_tab_value(Info & i) User * puser = cur->session->puser; if( puser ) - space_list_tab_value(i, puser->aenv); + space_list_tab_value(i, puser->aenv, L"env_admin_tab"); } @@ -142,7 +142,7 @@ void env_admin_tab_has_next(Info & i) User * puser = cur->session->puser; if( puser ) - space_list_tab_has_next(i, puser->aenv); + space_list_tab_has_next(i, puser->aenv, L"env_admin_tab"); } diff --git a/winixd/templates/item.cpp b/winixd/templates/item.cpp index 67aab42..0eb2917 100644 --- a/winixd/templates/item.cpp +++ b/winixd/templates/item.cpp @@ -5,7 +5,7 @@ */ /* - * Copyright (c) 2008-2014, Tomasz Sowa + * Copyright (c) 2008-2016, Tomasz Sowa * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -114,9 +114,6 @@ void item_content_type_is(Item & item, Info & i) else if( item.content_type == Item::ct_bbcode && i.par == L"bbcode" ) i.res = true; - else - if( item.content_type == Item::ct_raw && i.par == L"raw" ) - i.res = true; } @@ -138,7 +135,7 @@ void item_print_content(HtmlTextStream & out, const std::wstring & content, Item HtmlEscapeFormTxt(out, content); } else - if( content_type == Item::ct_html || content_type == Item::ct_raw ) + if( content_type == Item::ct_html ) { out << R(content); } @@ -436,14 +433,14 @@ void item_meta_tab(Info & i) void item_meta_tab_value(Info & i) { - space_list_tab_value(i, cur->request->last_item->meta); + space_list_tab_value(i, cur->request->last_item->meta, L"item_meta_tab"); } void item_meta_tab_has_next(Info & i) { - space_list_tab_has_next(i, cur->request->last_item->meta); + space_list_tab_has_next(i, cur->request->last_item->meta, L"item_meta_tab"); } @@ -469,13 +466,13 @@ void item_admin_meta_tab(Info & i) void item_admin_meta_tab_value(Info & i) { - space_list_tab_value(i, cur->request->last_item->ameta); + space_list_tab_value(i, cur->request->last_item->ameta, L"item_admin_meta_tab"); } void item_admin_meta_tab_has_next(Info & i) { - space_list_tab_has_next(i, cur->request->last_item->ameta); + space_list_tab_has_next(i, cur->request->last_item->ameta, L"item_admin_meta_tab"); } @@ -861,7 +858,7 @@ void item_tab_meta_tab(Info & i) void item_tab_meta_tab_value(Info & i) { if( item_index < cur->request->item_tab.size() ) - space_list_tab_value(i, cur->request->item_tab[item_index].meta); + space_list_tab_value(i, cur->request->item_tab[item_index].meta, L"item_tab_meta_tab"); } @@ -869,7 +866,7 @@ void item_tab_meta_tab_value(Info & i) void item_tab_meta_tab_has_next(Info & i) { if( item_index < cur->request->item_tab.size() ) - space_list_tab_has_next(i, cur->request->item_tab[item_index].meta); + space_list_tab_has_next(i, cur->request->item_tab[item_index].meta, L"item_tab_meta_tab"); } diff --git a/winixd/templates/miscspace.cpp b/winixd/templates/miscspace.cpp index 48ee3d6..d251a1b 100644 --- a/winixd/templates/miscspace.cpp +++ b/winixd/templates/miscspace.cpp @@ -120,44 +120,6 @@ static size_t space_reqid = 0; -/* - -struct SpaceKey -{ - PT::Space * global_space; - std::vector spaces_names; - - - bool operator<(const SpaceKey & k) - { - if( global_space != k.global_space ) - return global_space < k.global_space; - - if( spaces_names.size() != k.spaces_names.size() ) - return spaces_names.size() < k.spaces_names.size(); - - for(size_t i=0 ; i space_map; - - - void space_init(const std::vector & params, PT::Space & space, SpaceInfo & space_info) @@ -212,233 +174,20 @@ void space_value(Info & i, PT::Space & space, bool escape) - -/* - stack item for [for] statement -*/ -struct SpaceStackItem +struct SpaceTabStackItem : public Ezc::FunData { - // names of the spaces - std::vector spaces; - - // table of values std::vector values; - - // an index to 'values' which is incremented every each [for] - size_t value_index; - - - SpaceStackItem() - { - value_index = 0; - } }; -/* - each Space has its own SpacesTabInfo struct -*/ -struct SpacesTabInfo -{ - // a stack for [for] statements - std::vector stack_tab; - - // current item from 'stack_tab' - size_t cur_stack; - - SpacesTabInfo() - { - cur_stack = 0; - } -}; - -static std::map spaces_tab_info_map; -static size_t spaces_tab_reqid = 0; - - - -bool spaces_tab_find_stack_item(std::vector & params, SpacesTabInfo & spaces_tab_info) -{ - bool found = false; - spaces_tab_info.cur_stack = spaces_tab_info.stack_tab.size(); - - for(size_t i=0 ; i & params, PT::Space & space, SpacesTabInfo & spaces_tab_info) -{ - if( !params.empty() ) - { - // adding a new item at the end (with the default constructor) - spaces_tab_info.stack_tab.resize(spaces_tab_info.stack_tab.size() + 1); - spaces_tab_info.cur_stack = spaces_tab_info.stack_tab.size() - 1; - - SpaceStackItem & stack_item = spaces_tab_info.stack_tab.back(); - - copy_space(params, stack_item.spaces); - space.ListText(params.back().str, stack_item.values); - stack_item.value_index = 0; - } -} - - -void spaces_tab_check_reqid() -{ - if( spaces_tab_reqid != cur->request->id ) - { - spaces_tab_reqid = cur->request->id; - spaces_tab_info_map.clear(); - } -} - - -void spaces_tab_init(std::vector & params, PT::Space & space, SpacesTabInfo & spaces_tab_info) -{ - PT::Space * child_space = find_space(params, space); - - if( child_space ) - { - if( !spaces_tab_find_stack_item(params, spaces_tab_info) ) - { - // add a new value to the stack - spaces_tab_add_to_stack(params, *child_space, spaces_tab_info); - } - } - else - { - // there is not such a space - // space_list_tab() will return false immediately - spaces_tab_info.cur_stack = spaces_tab_info.stack_tab.size(); - } -} - - void space_list_tab(Info & i, PT::Space & space) -{ - spaces_tab_check_reqid(); - - if( !i.params.empty() ) - { - SpacesTabInfo & spaces_tab_info = spaces_tab_info_map[&space]; - spaces_tab_init(i.params, space, spaces_tab_info); - - if( spaces_tab_info.cur_stack < spaces_tab_info.stack_tab.size() ) - { - SpaceStackItem & stack_item = spaces_tab_info.stack_tab[spaces_tab_info.cur_stack]; - - // i.iter is different for each [for] statement (implemented in EZC) - // so we don't have to remember it in our stack - // for each the same space we have only one item in the stack, e.g. - // [for item_meta "space1" "space2" "value"] - // [for item_meta "space1" "space2" "value"] - // [end] - // [end] - // above two [for]s use the same item on our stack - stack_item.value_index = i.iter; - - i.res = stack_item.value_index < stack_item.values.size(); - } - } -} - - -void spaces_tab_value_print(HtmlTextStream & out, SpacesTabInfo & spaces_tab_info) -{ - if( spaces_tab_info.cur_stack < spaces_tab_info.stack_tab.size() ) - { - SpaceStackItem & stack_item = spaces_tab_info.stack_tab[spaces_tab_info.cur_stack]; - - if( stack_item.value_index < stack_item.values.size() ) - out << stack_item.values[stack_item.value_index]; - } -} - - -void space_list_tab_value(Info & i, PT::Space & space) -{ - spaces_tab_check_reqid(); - SpacesTabInfo & spaces_tab_info = spaces_tab_info_map[&space]; - - if( i.params.empty() ) - { - // value from last [for ...] statement - spaces_tab_value_print(i.out, spaces_tab_info); - } - else - { - size_t cur_stack_old = spaces_tab_info.cur_stack; - - if( spaces_tab_find_stack_item(i.params, spaces_tab_info) ) - spaces_tab_value_print(i.out, spaces_tab_info); - - spaces_tab_info.cur_stack = cur_stack_old; - } -} - - -bool spaces_tab_has_next(SpacesTabInfo & spaces_tab_info) -{ - if( spaces_tab_info.cur_stack < spaces_tab_info.stack_tab.size() ) - { - SpaceStackItem & val = spaces_tab_info.stack_tab[spaces_tab_info.cur_stack]; - return val.value_index + 1 < val.values.size(); - } - -return false; -} - - -void space_list_tab_has_next(Info & i, PT::Space & space) -{ - spaces_tab_check_reqid(); - SpacesTabInfo & spaces_tab_info = spaces_tab_info_map[&space]; - - if( i.params.empty() ) - { - // value from last [for ...] statement - i.res = spaces_tab_has_next(spaces_tab_info); - } - else - { - size_t cur_stack_old = spaces_tab_info.cur_stack; - - if( spaces_tab_find_stack_item(i.params, spaces_tab_info) ) - i.res = spaces_tab_has_next(spaces_tab_info); - - spaces_tab_info.cur_stack = cur_stack_old; - } -} - - - -struct Space2StackItem : public Ezc::FunData -{ - std::vector values; -}; - - - -void space2_list_tab(Info & i, PT::Space & space) { if( !i.stack.fun_data ) { if( !i.params.empty() ) { - i.stack.for_name = new std::wstring(L"space_list_tab"); - - Space2StackItem * stack_item = new Space2StackItem(); + SpaceTabStackItem * stack_item = new SpaceTabStackItem(); i.stack.fun_data = stack_item; PT::Space * dst_space = find_space(i.params, space); @@ -451,27 +200,32 @@ void space2_list_tab(Info & i, PT::Space & space) } else { - auto stack_item = reinterpret_cast(i.stack.fun_data); + auto stack_item = reinterpret_cast(i.stack.fun_data); i.res = i.iter < stack_item->values.size(); } } -void space2_list_tab_value(Info & i, PT::Space & space) +void space_list_tab_value(Info & i, PT::Space & space, const std::wstring & function_name) { - Ezc::Stack * stack = i.FindLastFor(i.par, L"space_list_tab"); + Ezc::Stack * stack; + auto user_object = i.FindUserObject(function_name, &stack); - if( stack && stack->fun_data ) - { - auto stack_item = dynamic_cast(stack->fun_data); - - if( stack_item && stack->iter < stack_item->values.size() ) - i.out << stack_item->values[stack->iter]; - } + if( user_object && stack->iter < user_object->values.size() ) + i.out << user_object->values[stack->iter]; } +void space_list_tab_has_next(Info & i, PT::Space & space, const std::wstring & function_name) +{ + Ezc::Stack * stack; + auto user_object = i.FindUserObject(function_name, &stack); + + if( user_object && stack->iter + 1 < user_object->values.size() ) + i.res = true; + +} diff --git a/winixd/templates/miscspace.h b/winixd/templates/miscspace.h index 53e7d80..3d3932f 100644 --- a/winixd/templates/miscspace.h +++ b/winixd/templates/miscspace.h @@ -72,13 +72,13 @@ void space_value(Info & i, PT::Space & space, bool escape = true); // add // void space_list_tab_size(Info & i, PT::Space & space); -void space_list_tab(Info & i, PT::Space & space); -void space_list_tab_value(Info & i, PT::Space & space); -void space_list_tab_has_next(Info & i, PT::Space & space); -void space2_list_tab(Info & i, PT::Space & space); -void space2_list_tab_value(Info & i, PT::Space & space); +void space_list_tab(Info & i, PT::Space & space); +void space_list_tab_value(Info & i, PT::Space & space, const std::wstring & function_name); +void space_list_tab_has_next(Info & i, PT::Space & space, const std::wstring & function_name); + + // !! IMPROVE ME diff --git a/winixd/templates/template.cpp b/winixd/templates/template.cpp index 5078112..d3a7d00 100644 --- a/winixd/templates/template.cpp +++ b/winixd/templates/template.cpp @@ -5,7 +5,7 @@ */ /* - * Copyright (c) 2008-2014, Tomasz Sowa + * Copyright (c) 2008-2016, Tomasz Sowa * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -91,7 +91,8 @@ void template_init() // the first item in the html template is an empty string // added in the html template temp_tab.clear(); - temp_tab.push_back(config->templates_index); + temp_tab.push_back(config->templates_index); // index: 0 + temp_tab.push_back(config->templates_index_raw); // index: 1 Mount::ParamRow & par = system->mounts.pmount->param[system->mounts.MountParHtmlTemplate()]; diff --git a/winixd/templates/templates.cpp b/winixd/templates/templates.cpp index 0103980..7499bdb 100644 --- a/winixd/templates/templates.cpp +++ b/winixd/templates/templates.cpp @@ -46,7 +46,7 @@ namespace TemplatesFunctions { size_t pat_index; // main index pattern -size_t pat_index_fullscreen; // an empty pattern (without menus etc. but with all rest html tags, used for ckeditor images browser) +size_t pat_index_raw; // pattern for a raw content size_t pat_err_404; // 404 error size_t pat_err_per_denied; // permission denied error @@ -678,7 +678,6 @@ void Templates::CreateFunctions() ezc_functions.Insert("user_is_in_all_groups", user_is_in_all_groups); ezc_functions.Insert("user_can_use_html", user_can_use_html); ezc_functions.Insert("user_can_use_bbcode", user_can_use_bbcode); - ezc_functions.Insert("user_can_use_raw", user_can_use_raw); ezc_functions.Insert("user_has_correct_time_zone",user_has_correct_time_zone); ezc_functions.Insert("user_time_zone_name", user_time_zone_name); ezc_functions.Insert("user_time_zone_id", user_time_zone_id); @@ -949,7 +948,7 @@ using namespace TemplatesFunctions; ezc_blocks.Clear(); pat_index = patterns.Add(config->templates_index); - pat_index_fullscreen = patterns.Add(L"index_fullscreen.html"); // !! IMPROVE ME name to the config + pat_index_raw = patterns.Add(config->templates_index_raw); pat_err_404 = patterns.Add(L"err_404.html"); // !! IMPROVE ME name to the config pat_err_per_denied = patterns.Add(L"err_per_denied.html"); // !! IMPROVE ME name to the config @@ -1005,36 +1004,29 @@ using namespace TemplatesFunctions; // can return a null pointer -Ezc::Pattern * Templates::SelectIndexPatternFromItemAndMountPoint() +Ezc::Pattern * Templates::SelectIndexPattern(const std::wstring & template_name) { using namespace TemplatesFunctions; Ezc::Pattern * index = 0; - // first we try to get an index template from 'template' item parameter (template winix function) - // if such a parameter is not defined then we try to get an index from the mount point - if( !cur->request->last_item->html_template.empty() && cur->request->last_item->html_template != config->templates_index ) + if( template_name == config->templates_index ) { - index = index_patterns.Get(cur->request->last_item->html_template, locale.GetCurLang()); - - if( index ) - { - log << log4 << "Templates: index template taken from the last item, template file name: " - << cur->request->last_item->html_template << logend; - } + index = patterns.Get(pat_index, locale.GetCurLang()); + } + else + if( template_name == config->templates_index_raw ) + { + index = patterns.Get(pat_index_raw, locale.GetCurLang()); } else { - Mounts & mounts = TemplatesFunctions::system->mounts; - const std::wstring & mount_file_name = cur->mount->FirstArg(mounts.MountParHtmlTemplate()); + index = index_patterns.Get(template_name, locale.GetCurLang()); + } - if( !mount_file_name.empty() && mount_file_name != config->templates_index ) - { - index = index_patterns.Get(mount_file_name, locale.GetCurLang()); - - if( index ) - log << log4 << "Templates: index template taken from the mount point, template file name: " << mount_file_name << logend; - } + if( index ) + { + log << log3 << "Templates: index template taken from: " << template_name << logend; } return index; @@ -1050,18 +1042,19 @@ using namespace TemplatesFunctions; Ezc::Pattern * index = 0; - if( cur->request->IsParam(L"fullscreen") ) + if( !cur->request->last_item->html_template.empty() ) { - index = patterns.Get(pat_index_fullscreen, locale.GetCurLang()); - - if( index ) - log << log3 << "Templates: index template taken from index_fullscreen.html" << logend; + index = SelectIndexPattern(cur->request->last_item->html_template); } else { - index = SelectIndexPatternFromItemAndMountPoint(); + Mounts & mounts = TemplatesFunctions::system->mounts; + const std::wstring & mount_file_name = cur->mount->FirstArg(mounts.MountParHtmlTemplate()); + + if( !mount_file_name.empty() ) + index = SelectIndexPattern(mount_file_name); } - + if( !index ) { index = change_patterns.Get(cur->mount->dir_id, config->templates_index, locale.GetCurLang()); @@ -1072,7 +1065,7 @@ using namespace TemplatesFunctions; if( !index ) { - index = patterns.Get(pat_index, locale.GetCurLang());; + index = patterns.Get(pat_index, locale.GetCurLang()); if( index ) log << log3 << "Templates: index template taken from: " << config->templates_index << logend; @@ -1114,21 +1107,6 @@ using namespace TemplatesFunctions; -void Templates::GenerateRunRaw() -{ -using namespace TemplatesFunctions; - - if( !empty_pars.empty() ) - empty_pars.clear(); - - Ezc::Stack s; - Info info(cur->request->out_main_stream, empty_pars, empty_string, empty_stream, s); - - info.iter = s.iter; - info.res = false; - - item_run(info); -} void Templates::Generate(Ezc::Pattern & pattern) diff --git a/winixd/templates/templates.h b/winixd/templates/templates.h index 6be781e..6c1a969 100644 --- a/winixd/templates/templates.h +++ b/winixd/templates/templates.h @@ -5,7 +5,7 @@ */ /* - * Copyright (c) 2008-2015, Tomasz Sowa + * Copyright (c) 2008-2016, Tomasz Sowa * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -573,7 +573,6 @@ namespace TemplatesFunctions void user_is_in_all_groups(Info & i); void user_can_use_html(Info & i); void user_can_use_bbcode(Info & i); - void user_can_use_raw(Info & i); void user_has_correct_time_zone(Info & i); void user_time_zone_name(Info & i); void user_time_zone_id(Info & i); @@ -686,7 +685,6 @@ public: void SetEzcParameters(bool trim_white, bool skip_new_line, bool use_special_chars); void Generate(); - void GenerateRunRaw(); void Generate(Ezc::Pattern & pattern); private: @@ -697,7 +695,7 @@ private: void ReadLocale(); void SetHtmlFilter(); void CreateFunctions(); // should be called before reading patterns (patterns will cache ezc functions) - Ezc::Pattern * SelectIndexPatternFromItemAndMountPoint(); + Ezc::Pattern * SelectIndexPattern(const std::wstring & template_name); Ezc::Pattern * SelectIndexPattern(); TemplatesFunctions::EzcGen generator; diff --git a/winixd/templates/user.cpp b/winixd/templates/user.cpp index 600dcad..3e5115b 100644 --- a/winixd/templates/user.cpp +++ b/winixd/templates/user.cpp @@ -5,7 +5,7 @@ */ /* - * Copyright (c) 2008-2014, Tomasz Sowa + * Copyright (c) 2008-2016, Tomasz Sowa * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -128,15 +128,6 @@ void user_can_use_bbcode(Info & i) } -void user_can_use_raw(Info & i) -{ - if( !cur->session->puser ) - i.res = false; - else - i.res = system->CanUseRaw(cur->session->puser->id); -} - - void user_has_correct_time_zone(Info & i) { if( cur->session->puser )