From 50cb88c5ed55928c8cffe38ac63739304e7c1d76 Mon Sep 17 00:00:00 2001 From: Tomasz Sowa Date: Sun, 4 Jul 2010 20:27:14 +0000 Subject: [PATCH] added: parameters consist of a name and a value now sample: /dir/dir2/function/paramname:paramvalue removed: TemplatesMisc namespace git-svn-id: svn://ttmath.org/publicrep/winix/trunk@618 e52654a7-88a9-db11-a3e9-0013d4bc506e --- content/node.cpp | 2 +- core/functionparser.cpp | 40 +++++++++++++++++++++++++---- core/functionparser.h | 1 + core/request.cpp | 23 ++++++++++++++--- core/request.h | 11 +++++--- core/requesttypes.h | 11 +++++++- templates/Makefile.dep | 10 ++++++-- templates/item.cpp | 8 +++--- templates/ls.cpp | 11 +++++--- templates/misc.cpp | 28 ++++++++++++++++++-- templates/misc.h | 4 +-- templates/templates.cpp | 20 +++++++-------- templates/templates.h | 10 ++++---- templates/thread.cpp | 2 +- templates/upload.cpp | 11 +++++--- templatesnotify/templatesnotify.cpp | 7 +++-- templatesnotify/templatesnotify.h | 2 +- 17 files changed, 150 insertions(+), 51 deletions(-) diff --git a/content/node.cpp b/content/node.cpp index cf8f9b1..b24ffdf 100755 --- a/content/node.cpp +++ b/content/node.cpp @@ -23,7 +23,7 @@ void Content::FunNode() return; } - long id = atol( request.param_table[0]->c_str() ); + long id = atol( request.param_table[0].name.c_str() ); RedirectTo(id); } diff --git a/core/functionparser.cpp b/core/functionparser.cpp index 4389841..14d7d07 100755 --- a/core/functionparser.cpp +++ b/core/functionparser.cpp @@ -117,19 +117,49 @@ void FunctionParser::ParseFunction() } + +void FunctionParser::ParseParams(const std::string & par) +{ +Param param; +size_t i; + + if( par.empty() ) + return; + + // looking for the first colon ':' + for(i=0 ; i 0 ) + param.name = par.substr(0, i); + + if( i < par.size() - 1 ) + param.value = par.substr(i+1); + } + + request.param_table.push_back(param); + + log << log3 << "FP: Param: name=" << param.name << ", value=" << param.value << logend; +} + + + void FunctionParser::ParseParams() { - while( true ) + for( ; true ; ++get_index ) { SkipEmptyString("FP: Params: skipped empty string"); if( get_index == get_table_len ) break; - request.param_table.push_back( &request.get_table[get_index] ); - log << log3 << "FP: Params: " << request.get_table[get_index] << logend; - - ++get_index; + ParseParams(request.get_table[get_index]); } } diff --git a/core/functionparser.h b/core/functionparser.h index 09d9c69..b1940c0 100755 --- a/core/functionparser.h +++ b/core/functionparser.h @@ -24,6 +24,7 @@ class FunctionParser void ParseItem(); bool IsAppFunction(); void ParseFunction(); + void ParseParams(const std::string & par); void ParseParams(); public: diff --git a/core/request.cpp b/core/request.cpp index 60d5ee8..9d275cf 100755 --- a/core/request.cpp +++ b/core/request.cpp @@ -535,13 +535,15 @@ bool compressing = data.compression && role == responder && redirect_to.empty() -bool Request::IsParam(const char * s) +bool Request::IsParam(const char * param_name) { - std::vector::iterator i; + ParamTable::iterator i; for(i=param_table.begin() ; i!=param_table.end() ; ++i) { - if( **i == s ) + // !! make sure that exists std::string::operator==(const char*) + // (optimization) + if( i->name == param_name ) return true; } @@ -549,6 +551,21 @@ return false; } +const std::string & Request::ParamValue(const char * param_name) +{ + ParamTable::iterator i; + + for(i=param_table.begin() ; i!=param_table.end() ; ++i) + { + if( i->name == param_name ) + { + return i->value; + } + } + +return str_empty; +} + bool Request::CanChangeUser(const Item & item, long new_user_id) { diff --git a/core/request.h b/core/request.h index eff5c41..3de035f 100755 --- a/core/request.h +++ b/core/request.h @@ -34,7 +34,7 @@ struct Request // request id // is incremented for each request and is never 0 // (from -1 will be incremented twice) - // it's used for some optimalization e.g. in templates + // it's used for some optimalizations e.g. in templates size_t id; @@ -89,8 +89,8 @@ struct Request // null if there is no a function Function * pfunction; - // !! moze nazwac to poprostu param? - std::vector param_table; + // parameters (name:value) + ParamTable param_table; Error status; @@ -131,7 +131,8 @@ struct Request void Init(); - bool IsParam(const char * s); + bool IsParam(const char * param_name); + const std::string & ParamValue(const char * param_name); // returns empty string if there is no such a parameter void SetCookie(const char * name, const char * value, tm * expires = 0); void SetCookie(const char * name, long value, tm * expires = 0); @@ -200,6 +201,8 @@ private: // it contains '\0' const char char_empty; + // used in ParamValue(const char * param_name) when there is no such a param + const std::string str_empty; PostMultiParser post_multi_parser; diff --git a/core/requesttypes.h b/core/requesttypes.h index c083caf..de4b173 100755 --- a/core/requesttypes.h +++ b/core/requesttypes.h @@ -24,12 +24,21 @@ struct PostFile std::string tmp_filename; // file with content (in /tmp) }; + +// parameters from get name:value +struct Param +{ + std::string name; + std::string value; +}; + + // some global types used by Request class typedef std::vector GetTable; typedef std::map PostTable; typedef std::map PostFileTable; typedef std::map CookieTable; - +typedef std::vector ParamTable; diff --git a/templates/Makefile.dep b/templates/Makefile.dep index a362ee2..ec2808b 100755 --- a/templates/Makefile.dep +++ b/templates/Makefile.dep @@ -85,8 +85,14 @@ misc.o: ../core/users.h ../core/user.h ../core/ugcontainer.h ../core/log.h misc.o: ../core/groups.h ../core/group.h ../core/functions.h misc.o: ../core/function.h ../core/lastcontainer.h ../core/mounts.h misc.o: ../core/mount.h ../core/error.h ../core/rebus.h ../core/loadavg.h -misc.o: ../core/misc.h misc.h localefilter.h ../core/locale.h -misc.o: ../confparser/confparser.h +misc.o: ../core/misc.h ../core/request.h ../core/requesttypes.h +misc.o: ../core/session.h ../core/plugindata.h ../core/thread.h +misc.o: ../core/compress.h ../core/acceptencodingparser.h +misc.o: ../core/acceptbaseparser.h ../core/htmlfilter.h +misc.o: ../core/postmultiparser.h ../core/ticket.h templates.h +misc.o: patterncacher.h ../core/item.h misc.h localefilter.h ../core/locale.h +misc.o: ../confparser/confparser.h ckeditorgetparser.h +misc.o: ../core/httpsimpleparser.h ../core/log.h indexpatterns.h mount.o: templates.h patterncacher.h ../core/item.h misc.h localefilter.h mount.o: ../core/locale.h ../confparser/confparser.h ckeditorgetparser.h mount.o: ../core/httpsimpleparser.h ../core/log.h indexpatterns.h diff --git a/templates/item.cpp b/templates/item.cpp index 4c45057..c667eca 100755 --- a/templates/item.cpp +++ b/templates/item.cpp @@ -263,14 +263,14 @@ void item_date_modification(Info & i) void item_date_creation_nice(Info & i) { tm * ptm = &request.item.date_creation; - TemplatesMisc::print_date_nice(i, ptm); + print_date_nice(i, ptm); } void item_date_modification_nice(Info & i) { tm * ptm = &request.item.date_modification; - TemplatesMisc::print_date_nice(i, ptm); + print_date_nice(i, ptm); } @@ -535,7 +535,7 @@ void item_tab_date_creation_nice(Info & i) if( item_index < request.item_table.size() ) { tm * ptm = &request.item_table[item_index].date_creation; - TemplatesMisc::print_date_nice(i, ptm); + print_date_nice(i, ptm); } } @@ -546,7 +546,7 @@ void item_tab_date_modification_nice(Info & i) if( item_index < request.item_table.size() ) { tm * ptm = &request.item_table[item_index].date_modification; - TemplatesMisc::print_date_nice(i, ptm); + print_date_nice(i, ptm); } } diff --git a/templates/ls.cpp b/templates/ls.cpp index 968e274..8eb15ce 100755 --- a/templates/ls.cpp +++ b/templates/ls.cpp @@ -28,10 +28,15 @@ void ls_ckeditor_funnum_browse(Info & i) ls_ckeditor_reqid = request.id; ckeditor_getparser.fun_num = 2; // default if there is a problem with parsing info - if( !request.param_table.empty() ) + if( !request.get_table.empty() ) { - const char * str = request.param_table[request.param_table.size()-1]->c_str() + 1; // the first char is '?' - ckeditor_getparser.Parse(str); + size_t last = request.get_table.size()-1; + + if( !request.get_table[last].empty() ) + { + const char * str = request.get_table[last].c_str() + 1; // the first char is '?' + ckeditor_getparser.Parse(str); + } } ls_ckeditor_funnum = ckeditor_getparser.fun_num; diff --git a/templates/misc.cpp b/templates/misc.cpp index 0ccb430..22c3920 100755 --- a/templates/misc.cpp +++ b/templates/misc.cpp @@ -10,10 +10,12 @@ #include "../core/data.h" #include "../core/misc.h" +#include "../core/request.h" +#include "templates.h" #include "misc.h" -namespace TemplatesMisc +namespace TemplatesFunctions { @@ -77,6 +79,28 @@ size_t loc, pat; } -} // namespace TemplatesMisc + +int ParseCKeditorFun() +{ + ckeditor_getparser.fun_num = 2; // default if there is a problem with parsing info + + if( !request.get_table.empty() ) + { + size_t last = request.get_table.size()-1; + + if( !request.get_table[last].empty() ) + { + const char * str = request.get_table[last].c_str() + 1; // the first char is '?' + ckeditor_getparser.Parse(str); + } + } + +return ckeditor_getparser.fun_num; +} + + + + +} // namespace TemplatesFunctions diff --git a/templates/misc.h b/templates/misc.h index 64332a6..6e37ed3 100755 --- a/templates/misc.h +++ b/templates/misc.h @@ -19,7 +19,7 @@ -namespace TemplatesMisc +namespace TemplatesFunctions { // table: [language][file] typedef std::vector > Patterns; @@ -36,7 +36,7 @@ void ClearPatterns(Patterns & patterns, size_t len); -} // namespace TemplatesMisc +} // namespace TemplatesFunctions #endif diff --git a/templates/templates.cpp b/templates/templates.cpp index 74d3f30..b5315bd 100755 --- a/templates/templates.cpp +++ b/templates/templates.cpp @@ -20,13 +20,13 @@ namespace TemplatesFunctions { -IndexPatterns index_patterns; -TemplatesMisc::Patterns patterns; -Ezc::Functions functions; -PatternCacher pattern_cacher; -Locale locale; -LocaleFilter locale_filter; -CKEditorGetParser ckeditor_getparser; +IndexPatterns index_patterns; +Patterns patterns; +Ezc::Functions functions; +PatternCacher pattern_cacher; +Locale locale; +LocaleFilter locale_filter; +CKEditorGetParser ckeditor_getparser; const std::string empty; // used by GenerateRunRaw() @@ -485,7 +485,7 @@ void Templates::ReadFile(TemplatesFunctions::Pat pat, const char * file) { using namespace TemplatesFunctions; - TemplatesMisc::Read(patterns, static_cast(pat), locale, locale_filter, file); + Read(patterns, static_cast(pat), locale, locale_filter, file); } @@ -587,8 +587,8 @@ using namespace TemplatesFunctions; void Templates::ClearPatterns() { using namespace TemplatesFunctions; - - TemplatesMisc::ClearPatterns(patterns, pat_last); + + TemplatesFunctions::ClearPatterns(patterns, pat_last); } diff --git a/templates/templates.h b/templates/templates.h index b7a5e66..679b52d 100755 --- a/templates/templates.h +++ b/templates/templates.h @@ -69,11 +69,11 @@ namespace TemplatesFunctions }; - extern IndexPatterns index_patterns; - extern TemplatesMisc::Patterns patterns; - extern PatternCacher pattern_cacher; - extern Locale locale; - extern Ezc::Functions functions; + extern IndexPatterns index_patterns; + extern Patterns patterns; + extern PatternCacher pattern_cacher; + extern Locale locale; + extern Ezc::Functions functions; extern CKEditorGetParser ckeditor_getparser; diff --git a/templates/thread.cpp b/templates/thread.cpp index 90e9338..2a5eb8e 100755 --- a/templates/thread.cpp +++ b/templates/thread.cpp @@ -140,7 +140,7 @@ void thread_tab_last_item_date_modification_nice(Info & i) { if( thread_tab_index < request.thread_tab.size() ) if( request.thread_tab[thread_tab_index].last_item.id != -1 ) - TemplatesMisc::print_date_nice(i, &request.thread_tab[thread_tab_index].last_item.date_modification); + print_date_nice(i, &request.thread_tab[thread_tab_index].last_item.date_modification); } diff --git a/templates/upload.cpp b/templates/upload.cpp index 1f60329..5c5487e 100755 --- a/templates/upload.cpp +++ b/templates/upload.cpp @@ -27,10 +27,15 @@ void upload_ckeditor_funnum(Info & i) upload_ckeditor_reqid = request.id; ckeditor_getparser.fun_num = 2; // default if there is a problem with parsing info - if( !request.param_table.empty() ) + if( !request.get_table.empty() ) { - const char * str = request.param_table[request.param_table.size()-1]->c_str() + 1; // the first char is '?' - ckeditor_getparser.Parse(str); + size_t last = request.get_table.size()-1; + + if( !request.get_table[last].empty() ) + { + const char * str = request.get_table[last].c_str() + 1; // the first char is '?' + ckeditor_getparser.Parse(str); + } } upload_fun_num = ckeditor_getparser.fun_num; diff --git a/templatesnotify/templatesnotify.cpp b/templatesnotify/templatesnotify.cpp index 32aef77..2d07f05 100755 --- a/templatesnotify/templatesnotify.cpp +++ b/templatesnotify/templatesnotify.cpp @@ -19,7 +19,7 @@ namespace TemplatesNotifyFunctions { -TemplatesMisc::Patterns patterns; +Patterns patterns; Ezc::Functions functions; Locale locale; LocaleFilter locale_filter; @@ -63,7 +63,7 @@ void TemplatesNotify::ClearPatterns() using namespace TemplatesNotifyFunctions; - TemplatesMisc::ClearPatterns(patterns, pat_last); + TemplatesFunctions::ClearPatterns(patterns, pat_last); } @@ -73,7 +73,6 @@ using namespace TemplatesNotifyFunctions; void TemplatesNotify::Read() { using namespace TemplatesNotifyFunctions; -using namespace TemplatesMisc; Locale::Lang lang = Locale::StrToLang(data.locale_str); @@ -84,7 +83,7 @@ using namespace TemplatesMisc; ClearPatterns(); locale.Read(data.locale_dir, data.locale_dir_default); - TemplatesMisc::Read(patterns, pat_email_notify, locale, locale_filter, "notify_email.txt", true); + TemplatesFunctions::Read(patterns, pat_email_notify, locale, locale_filter, "notify_email.txt", true); notify_msg = 0; } diff --git a/templatesnotify/templatesnotify.h b/templatesnotify/templatesnotify.h index 2cc09da..613c75a 100755 --- a/templatesnotify/templatesnotify.h +++ b/templatesnotify/templatesnotify.h @@ -43,7 +43,7 @@ namespace TemplatesNotifyFunctions typedef std::vector > Patterns; - extern TemplatesMisc::Patterns patterns; + extern Patterns patterns; extern NotifyMsg * notify_msg; void notify_item_added(Info & i);