/* * This file is a part of Winix * and is not publicly distributed * * Copyright (c) 2008-2010, Tomasz Sowa * All rights reserved. * */ #include "templates.h" #include "misc.h" #include "../core/data.h" #include "../core/request.h" #include "../core/misc.h" #include "../core/bbcodeparser.h" namespace TemplatesFunctions { static BBCODEParser bbcode_parser; void print_user_name(Info & i, const User * puser, const std::string & guest_name) { if( puser ) { HtmlEscape(i.out, puser->name); } else { i.out << "~"; if( !guest_name.empty() ) HtmlEscape(i.out, guest_name); else i.out << "guest"; // !! dodac do konfiga } } void item_is(Info & i) { i.res = request.is_item; } void item_id(Info & i) { i.out << request.item.id; } void item_subject(Info & i) { HtmlEscape(i.out, request.item.subject); } void item_subject_noescape(Info & i) { i.out << request.item.subject; } void item_content(Info & i) { HtmlEscape(i.out, request.item.content); } void item_content_noescape(Info & i) { i.out << request.item.content; } void item_content_type_is(Info & i) { i.res = false; if( request.item.content_type == Item::ct_text && i.par == "text" ) i.res = true; if( request.item.content_type == Item::ct_formatted_text && i.par == "formatted text" ) i.res = true; if( request.item.content_type == Item::ct_html && i.par == "html" ) i.res = true; if( request.item.content_type == Item::ct_bbcode && i.par == "bbcode" ) i.res = true; if( request.item.content_type == Item::ct_raw && i.par == "raw" ) i.res = true; } void item_print_content(std::ostringstream & out, const std::string & content, Item::ContentType content_type) { if( content_type == Item::ct_text ) { HtmlEscape(out, content); } else if( content_type == Item::ct_formatted_text ) { HtmlEscapeFormTxt(out, content); } else if( content_type == Item::ct_html || content_type == Item::ct_raw ) { out << content; } else if( content_type == Item::ct_bbcode ) { static std::string out_temp; out_temp.clear(); out_temp.reserve(content.size()*2); bbcode_parser.Filter(content.c_str(), out_temp); out << out_temp; } } void item_content_is_empty(Info & i) { i.res = request.item.content.empty(); } void item_print_content(Info & i) { item_print_content(i.out, request.item.content, request.item.content_type); } void item_privileges(Info & i) { i.out << std::setbase(8) << request.item.privileges << std::setbase(10); } void item_dir(Info & i) { dir(i); } void item_url(Info & i) { HtmlEscape(i.out, request.item.url); } void item_url_is(Info & i) { if( !request.is_item ) return; // default false i.res = (request.item.url == i.par); } void item_link(Info & i) { HtmlEscape(i.out, data.base_url); item_dir(i); item_url(i); } void item_auth_is_none(Info & i) { i.res = request.item.auth == Item::auth_none; } void item_auth_is_image(Info & i) { i.res = request.item.auth == Item::auth_image; } void item_can_read(Info & i) { i.res = request.HasReadAccess(request.item); } void item_can_write(Info & i) { i.res = request.HasWriteAccess(request.item); } void item_can_remove(Info & i) { i.res = request.CanRemove(request.item); } void item_info(Info & i) { if( static_cast(locale.GetLang()) >= patterns.size() ) return; Ezc::Generator gen(i.out, patterns[locale.GetLang()][pat_item_info], functions); gen.Generate(); } void item_user(Info & i) { User * puser = data.users.GetUser(request.item.user_id); print_user_name(i, puser, request.item.guest_name); } void item_modification_user(Info & i) { User * puser = data.users.GetUser(request.item.modification_user_id); print_user_name(i, puser, request.item.guest_name); } void item_users_different(Info & i) { i.res = (request.item.user_id != request.item.modification_user_id); } void item_date_creation(Info & i) { tm * ptm = &request.item.date_creation; i.out << DateToStr(ptm->tm_year + 1900, ptm->tm_mon + 1, ptm->tm_mday, ptm->tm_hour, ptm->tm_min, ptm->tm_sec); } void item_date_modification(Info & i) { tm * ptm = &request.item.date_modification; i.out << DateToStr(ptm->tm_year + 1900, ptm->tm_mon + 1, ptm->tm_mday, ptm->tm_hour, ptm->tm_min, ptm->tm_sec); } void item_date_creation_nice(Info & i) { tm * ptm = &request.item.date_creation; print_date_nice(i, ptm); } void item_date_modification_nice(Info & i) { tm * ptm = &request.item.date_modification; print_date_nice(i, ptm); } void item_dates_equal(Info & i) { tm * ptm1 = &request.item.date_creation; tm * ptm2 = &request.item.date_modification; i.res = ptm1->tm_year == ptm2->tm_year && ptm1->tm_mon == ptm2->tm_mon && ptm1->tm_mday == ptm2->tm_mday && ptm1->tm_hour == ptm2->tm_hour && ptm1->tm_min == ptm2->tm_min && ptm1->tm_sec == ptm2->tm_sec; } void item_run(Info & i) { if( !request.is_item ) { i.out << ""; return; } if( !request.HasReadExecAccess(request.item) ) { i.out << ""; return; } Ezc::Pattern * p = pattern_cacher.GetPattern(request.item); std::ostringstream item_run_content; Ezc::Generator gen(item_run_content, *p, functions); gen.Generate(); item_print_content(i.out, item_run_content.str(), request.item.content_type); } void item_guest_name(Info & i) { HtmlEscape(i.out, request.item.guest_name); } static size_t item_index; void item_tab(Info & i) { item_index = i.iter; i.res = item_index < request.item_table.size(); } void item_tab_id(Info & i) { if( item_index < request.item_table.size() ) i.out << request.item_table[item_index].id; } void item_tab_subject(Info & i) { if( item_index < request.item_table.size() ) HtmlEscape(i.out, request.item_table[item_index].subject); } void item_tab_subject_noescape(Info & i) { if( item_index < request.item_table.size() ) i.out << request.item_table[item_index].subject; } void item_tab_content(Info & i) { if( item_index < request.item_table.size() ) HtmlEscape(i.out, request.item_table[item_index].content); } void item_tab_content_noescape(Info & i) { if( item_index < request.item_table.size() ) i.out << request.item_table[item_index].content; } void item_tab_print_content(Info & i) { if( item_index >= request.item_table.size() ) return; std::string & content = request.item_table[item_index].content; Item::ContentType type = request.item_table[item_index].content_type; item_print_content(i.out, content, type); } void item_tab_privileges(Info & i) { if( item_index < request.item_table.size() ) i.out << "0" << std::setbase(8) << request.item_table[item_index].privileges << std::setbase(10); } void item_tab_dir(Info & i) { if( item_index < request.item_table.size() ) { std::string path; if( data.dirs.MakePath(request.item_table[item_index].parent_id, path) ) HtmlEscape(i.out, path); else i.out << "/the path does not exist/"; } } void item_tab_url(Info & i) { if( item_index < request.item_table.size() ) HtmlEscape(i.out, request.item_table[item_index].url); } void item_tab_link(Info & i) { if( item_index < request.item_table.size() ) { HtmlEscape(i.out, data.base_url); item_tab_dir(i); item_tab_url(i); } } void item_tab_link_auth(Info & i) { if( item_index < request.item_table.size() ) { HtmlEscape(i.out, data.base_url_auth); item_tab_dir(i); item_tab_url(i); } } void item_tab_can_read(Info & i) { if( item_index < request.item_table.size() ) { if( request.HasReadAccess(request.item_table[item_index]) ) i.res = true; } } void item_tab_can_write(Info & i) { if( item_index < request.item_table.size() ) { if( request.HasWriteAccess(request.item_table[item_index]) ) i.res = true; } } void item_tab_info(Info & i) { if( static_cast(locale.GetLang()) >= patterns.size() ) return; Ezc::Generator gen(i.out, patterns[locale.GetLang()][pat_item_tab_info], functions); gen.Generate(); } void item_tab_user(Info & i) { if( item_index < request.item_table.size() ) { User * puser = data.users.GetUser(request.item_table[item_index].user_id); print_user_name(i, puser, request.item_table[item_index].guest_name); } } void item_tab_modification_user(Info & i) { if( item_index < request.item_table.size() ) { User * puser = data.users.GetUser(request.item_table[item_index].modification_user_id); print_user_name(i, puser, request.item_table[item_index].guest_name); } } void item_tab_users_different(Info & i) { if( item_index < request.item_table.size() ) { i.res = (request.item_table[item_index].user_id != request.item_table[item_index].modification_user_id); } } void item_tab_group(Info & i) { if( item_index < request.item_table.size() ) { long group_id = request.item_table[item_index].group_id; Group * pgroup = data.groups.GetGroup(group_id); if( pgroup ) HtmlEscape(i.out, pgroup->name); else i.out << group_id; } } void item_tab_date_creation(Info & i) { if( item_index < request.item_table.size() ) { tm * ptm = &request.item_table[item_index].date_creation; i.out << DateToStr(ptm->tm_year + 1900, ptm->tm_mon + 1, ptm->tm_mday, ptm->tm_hour, ptm->tm_min, ptm->tm_sec); } } void item_tab_date_modification(Info & i) { if( item_index < request.item_table.size() ) { tm * ptm = &request.item_table[item_index].date_modification; i.out << DateToStr(ptm->tm_year + 1900, ptm->tm_mon + 1, ptm->tm_mday, ptm->tm_hour, ptm->tm_min, ptm->tm_sec); } } void item_tab_date_creation_nice(Info & i) { if( item_index < request.item_table.size() ) { tm * ptm = &request.item_table[item_index].date_creation; print_date_nice(i, ptm); } } void item_tab_date_modification_nice(Info & i) { if( item_index < request.item_table.size() ) { tm * ptm = &request.item_table[item_index].date_modification; print_date_nice(i, ptm); } } void item_tab_dates_equal(Info & i) { if( item_index < request.item_table.size() ) { tm * ptm1 = &request.item_table[item_index].date_creation; tm * ptm2 = &request.item_table[item_index].date_modification; i.res = ptm1->tm_year == ptm2->tm_year && ptm1->tm_mon == ptm2->tm_mon && ptm1->tm_mday == ptm2->tm_mday && ptm1->tm_hour == ptm2->tm_hour && ptm1->tm_min == ptm2->tm_min && ptm1->tm_sec == ptm2->tm_sec; } } void item_tab_run(Info & i) { if( item_index < request.item_table.size() ) { if( !request.HasReadExecAccess(request.item) ) { i.out << ""; return; } Ezc::Pattern * p = pattern_cacher.GetPattern(request.item_table[item_index]); Ezc::Generator gen(i.out, *p, functions); gen.Generate(); } } void item_tab_can_use_emacs(Info & i) { if( item_index < request.item_table.size() ) { i.res = request.CanUseEmacs(request.item_table[item_index], true); } } } // namespace TemplatesFunctions