From 8705b3437c2d51e71e408b0b7a12e70140a9cb10 Mon Sep 17 00:00:00 2001 From: Tomasz Sowa Date: Tue, 16 Apr 2013 09:51:36 +0000 Subject: [PATCH] fixed: imgcrop winix function should load only images (when called in a directory) added: to reload winix function: reloading (clearing) the cache from 'menu' plugin added: to 'menu' plugin possibility to read 'meta' information from files third argument 'withmeta' to menu_dir_tab ezc function e.g. [for menu_dir_tab "/directory" "..." "withmeta"]...[end] and some ezc functions to retrieve the meta values git-svn-id: svn://ttmath.org/publicrep/winix/trunk@921 e52654a7-88a9-db11-a3e9-0013d4bc506e --- functions/imgcrop.cpp | 4 ++ html/fun_reload.html | 4 ++ locale/en | 1 + locale/pl | 1 + plugins/menu/Makefile.dep | 1 + plugins/menu/cache.h | 9 ++-- plugins/menu/init.cpp | 16 +++++- plugins/menu/templates.cpp | 105 +++++++++++++++++++++++++++++++++---- 8 files changed, 127 insertions(+), 14 deletions(-) diff --git a/functions/imgcrop.cpp b/functions/imgcrop.cpp index 0a67bcc..7093879 100755 --- a/functions/imgcrop.cpp +++ b/functions/imgcrop.cpp @@ -33,8 +33,12 @@ bool ImgCrop::HasAccess() void ImgCrop::GetDirContent() { + iq.sel_type = Item::file; iq.sel_content = false; + iq.WhereParentId(cur->request->dir_tab.back()->id); + iq.WhereFileType(WINIX_ITEM_FILETYPE_IMAGE); + db->GetItems(cur->request->item_tab, iq); system->CheckWriteAccessToItems(cur->request->item_tab); } diff --git a/html/fun_reload.html b/html/fun_reload.html index 545d4e1..c114e6d 100755 --- a/html/fun_reload.html +++ b/html/fun_reload.html @@ -20,6 +20,10 @@
  • {reload_export}
  • [end] +[if winix_has_plugin "menu"] +
  • {reload_menu}
  • +[end] + diff --git a/locale/en b/locale/en index f690e72..0b4a5fa 100755 --- a/locale/en +++ b/locale/en @@ -226,6 +226,7 @@ reload_templates = html templates reload_tickets = tickets config files reload_group = groups config files reload_export = "export directories (FTP)" +reload_menu = plugin menu cache rm_header = Remove diff --git a/locale/pl b/locale/pl index 45de9f7..b120f49 100755 --- a/locale/pl +++ b/locale/pl @@ -248,6 +248,7 @@ reload_templates = szablony html reload_tickets = pliki konfiguracyjne ticketów reload_group = pliki konfiguracyjne grup reload_export = "katalogi exportu (FTP)" +reload_menu = cache pluginu 'menu' rm_header = Usuń diff --git a/plugins/menu/Makefile.dep b/plugins/menu/Makefile.dep index 51916c0..ac11353 100755 --- a/plugins/menu/Makefile.dep +++ b/plugins/menu/Makefile.dep @@ -165,3 +165,4 @@ templates.o: ../../functions/tinymce.h ../../functions/uname.h templates.o: ../../functions/upload.h ../../functions/uptime.h templates.o: ../../functions/who.h ../../functions/vim.h ../../core/log.h templates.o: ../../core/misc.h cache.h ../../core/dirs.h +templates.o: ../../templates/miscspace.h ../../templates/templates.h diff --git a/plugins/menu/cache.h b/plugins/menu/cache.h index 09c8104..f000f13 100755 --- a/plugins/menu/cache.h +++ b/plugins/menu/cache.h @@ -2,7 +2,7 @@ * This file is a part of Winix * and is not publicly distributed * - * Copyright (c) 2012, Tomasz Sowa + * Copyright (c) 2012-2013, Tomasz Sowa * All rights reserved. * */ @@ -24,11 +24,12 @@ namespace Menu struct MenuItem { - long id; // item id + long id; // item id std::wstring url; std::wstring subject; - Item::Type type; - int file_type; + PT::Space meta; + Item::Type type; + int file_type; }; diff --git a/plugins/menu/init.cpp b/plugins/menu/init.cpp index d285f89..12d2d62 100755 --- a/plugins/menu/init.cpp +++ b/plugins/menu/init.cpp @@ -2,7 +2,7 @@ * This file is a part of Winix * and is not publicly distributed * - * Copyright (c) 2011-2012, Tomasz Sowa + * Copyright (c) 2011-2013, Tomasz Sowa * All rights reserved. * */ @@ -85,6 +85,19 @@ void InvalidateCacheById(PluginInfo & info) +void ProcessRequest(PluginInfo & info) +{ + if( info.cur->request->function == &info.functions->fun_reload ) + { + if( info.cur->request->IsParam(L"menu") ) + { + cache.Clear(); + log << log3 << "Menu: cache has been cleared" << logend; + } + } +} + + void AddEzcFunctions(PluginInfo & info); } // namespace @@ -117,6 +130,7 @@ using namespace Menu; plugin.Assign(WINIX_FILE_PREPARE_TO_MOVE, InvalidateCacheByPointerParent); plugin.Assign(WINIX_FILE_MOVED, InvalidateCacheByPointerParent); plugin.Assign(WINIX_DIR_CONTENT_SORTED, InvalidateCacheByPointer); + plugin.Assign(WINIX_PROCESS_REQUEST, ProcessRequest); // !! IMPROVE ME // we need a WINIX_DIR_CHANGED message diff --git a/plugins/menu/templates.cpp b/plugins/menu/templates.cpp index 597f862..8d01792 100755 --- a/plugins/menu/templates.cpp +++ b/plugins/menu/templates.cpp @@ -2,7 +2,7 @@ * This file is a part of Winix * and is not publicly distributed * - * Copyright (c) 2011-2012, Tomasz Sowa + * Copyright (c) 2011-2013, Tomasz Sowa * All rights reserved. * */ @@ -13,6 +13,7 @@ #include "core/log.h" #include "core/misc.h" #include "cache.h" +#include "templates/miscspace.h" #define WINIX_PL_MENU_PARAM_NONE 0 @@ -70,7 +71,7 @@ return WINIX_PL_MENU_PARAM_NONE; -void read_from_db(long dir_id, int param) +void read_from_db(long dir_id, int param, bool with_meta) { iq.SetAll(false, false); iq.sel_subject = true; @@ -78,6 +79,7 @@ void read_from_db(long dir_id, int param) iq.sel_sort_index = true; iq.sel_type = true; iq.sel_file = true; + iq.sel_meta = with_meta; iq.WhereParentId(dir_id); if( param == WINIX_PL_MENU_PARAM_IMAGES ) @@ -158,6 +160,7 @@ void copy_items(CacheItem & citem) menu_item.id = item_tab[i].id; menu_item.subject = item_tab[i].subject; menu_item.url = item_tab[i].url; + menu_item.meta = item_tab[i].meta; menu_item.type = item_tab[i].type; menu_item.file_type = item_tab[i].file_type; @@ -167,13 +170,13 @@ void copy_items(CacheItem & citem) -void menu_dir_init(Info & i, long dir_id, int param) +void menu_dir_init(Info & i, long dir_id, int param, bool with_meta) { CacheItem * citem = cache.Get(dir_id, param); if( !citem ) { - read_from_db(dir_id, param); + read_from_db(dir_id, param, with_meta); citem = cache.Insert(dir_id, param); copy_items(*citem); skip_mount_items(*citem); @@ -186,13 +189,13 @@ void menu_dir_init(Info & i, long dir_id, int param) } -void menu_dir_init(Info & i, const std::wstring & dir, int param) +void menu_dir_init(Info & i, const std::wstring & dir, int param, bool with_meta) { Item * pdir = system->dirs.GetDir(dir); if( pdir ) { - menu_dir_init(i, pdir->id, param); + menu_dir_init(i, pdir->id, param, with_meta); } else { @@ -205,13 +208,17 @@ void menu_dir_init(Info & i, const std::wstring & dir, int param) void menu_dir_init(Info & i) { int param = WINIX_PL_MENU_PARAM_NONE; + bool with_meta = false; if( i.params.size() >= 2 ) param = string_to_param(i.params[1]); + if( i.params.size() >=3 && i.params[2] == L"withmeta" ) + with_meta = true; + if( i.params.empty() || i.params[0].empty() ) { - menu_dir_init(i, cur->request->dir_tab.back()->id, param); + menu_dir_init(i, cur->request->dir_tab.back()->id, param, with_meta); } else if( !i.params.empty() ) @@ -223,10 +230,15 @@ void menu_dir_init(Info & i) StackItem * previous_sitem = reinterpret_cast(stack->fun_data); if( stack->iter < previous_sitem->citem->menu_items.size() ) - menu_dir_init(i, previous_sitem->citem->menu_items[stack->iter].id, param); + menu_dir_init(i, previous_sitem->citem->menu_items[stack->iter].id, param, with_meta); } } else + if( i.params[0] == L"this" ) + { + menu_dir_init(i, cur->request->dir_tab.back()->id, param, with_meta); + } + else if( !i.params[0].empty() && i.params[0][0] != '/' ) { log << log1 << "Menu: path for a menu should not be relative" << logend; @@ -234,7 +246,7 @@ void menu_dir_init(Info & i) } else { - menu_dir_init(i, i.params[0], param); + menu_dir_init(i, i.params[0], param, with_meta); } } } @@ -274,6 +286,13 @@ void menu_dir_tab(Info & i) } + +void menu_dir_tab_index(Info & i) +{ + i.out << stack->iter; +} + + void menu_dir_tab_subject(Info & i) { if( stack->fun_data ) @@ -314,6 +333,66 @@ void menu_dir_tab_link(Info & i) } + +void menu_dir_tab_meta_str(Info & i) +{ + if( stack->fun_data ) + { + StackItem * sitem = reinterpret_cast(stack->fun_data); + + if( stack->iter < sitem->citem->menu_items.size() ) + sitem->citem->menu_items[stack->iter].meta.Serialize(i.out, true, false); + } +} + +void menu_dir_tab_meta(Info & i) +{ + if( stack->fun_data ) + { + StackItem * sitem = reinterpret_cast(stack->fun_data); + + if( stack->iter < sitem->citem->menu_items.size() ) + space(i, sitem->citem->menu_items[stack->iter].meta); + } +} + +void menu_dir_tab_meta_tab(Info & i) +{ + if( stack->fun_data ) + { + StackItem * sitem = reinterpret_cast(stack->fun_data); + + if( stack->iter < sitem->citem->menu_items.size() ) + spaces_tab(i, sitem->citem->menu_items[stack->iter].meta); + } +} + + +void menu_dir_tab_meta_tab_value(Info & i) +{ + if( stack->fun_data ) + { + StackItem * sitem = reinterpret_cast(stack->fun_data); + + if( stack->iter < sitem->citem->menu_items.size() ) + spaces_tab_value(i, sitem->citem->menu_items[stack->iter].meta); + } +} + + +void menu_dir_tab_meta_tab_has_next(Info & i) +{ + if( stack->fun_data ) + { + StackItem * sitem = reinterpret_cast(stack->fun_data); + + if( stack->iter < sitem->citem->menu_items.size() ) + spaces_tab_has_next(i, sitem->citem->menu_items[stack->iter].meta); + } +} + + + void menu_dir_tab_is_dir(Info & i) { if( stack->fun_data ) @@ -428,9 +507,17 @@ void AddEzcFunctions(PluginInfo & info) EzcFun * fun = reinterpret_cast(info.p1); fun->Insert("menu_dir_tab", menu_dir_tab); + fun->Insert("menu_dir_tab_index", menu_dir_tab_index); fun->Insert("menu_dir_tab_subject", menu_dir_tab_subject); fun->Insert("menu_dir_tab_url", menu_dir_tab_url); fun->Insert("menu_dir_tab_link", menu_dir_tab_link); + + fun->Insert("menu_dir_tab_meta_str", menu_dir_tab_meta_str); + fun->Insert("menu_dir_tab_meta", menu_dir_tab_meta); + fun->Insert("menu_dir_tab_meta_tab", menu_dir_tab_meta_tab); + fun->Insert("menu_dir_tab_meta_tab_value", menu_dir_tab_meta_tab_value); + fun->Insert("menu_dir_tab_meta_tab_has_next", menu_dir_tab_meta_tab_has_next); + fun->Insert("menu_dir_tab_is_dir", menu_dir_tab_is_dir); fun->Insert("menu_dir_tab_is_file", menu_dir_tab_is_file); fun->Insert("menu_dir_tab_is_symlink", menu_dir_tab_is_symlink);