/* * This file is a part of CMSLU -- Content Management System like Unix * and is not publicly distributed * * Copyright (c) 2008-2010, Tomasz Sowa * All rights reserved. * */ #include "templates.h" #include "localefilter.h" #include "../core/data.h" #include "../core/request.h" #include "../core/misc.h" #include "../core/plugin.h" namespace TemplatesFunctions { TemplatesMisc::Patterns patterns; Ezc::Functions functions; PatternCacher pattern_cacher; LocaleFilter locale_filter; Ezc::Pattern * content_for_function() { Ezc::Pattern * p = 0; if( !request.pfunction ) { log << log1 << "Templates: no function" << logend; return p; } static PatName pat_name_tab[] = { {FUN_CAT, pat_fun_cat}, {FUN_LS, pat_fun_ls}, {FUN_RM, pat_fun_rm}, {FUN_EMACS, pat_fun_emacs}, {FUN_MKDIR, pat_fun_mkdir}, {FUN_DEFAULT, pat_fun_default}, {FUN_PRIV, pat_fun_priv}, {FUN_RUN, pat_fun_run}, {FUN_WHO, pat_fun_who}, {FUN_LAST, pat_fun_last}, {FUN_THREAD, pat_fun_thread}, {FUN_RELOAD, pat_fun_reload}, {FUN_CREATETHREAD, pat_fun_createthread}, {FUN_TICKET, pat_fun_ticket}, {FUN_CREATETICKET, pat_fun_createticket}, {FUN_EDITTICKET, pat_fun_createticket}, {FUN_UPLOAD, pat_fun_upload} }; size_t i, len = sizeof(pat_name_tab)/sizeof(PatName); for(i=0 ; icode ) { // !! data.locale.GetLang() bedzie brane indywidualnie dla kazdego uzytkownika p = &patterns[data.locale.GetLang()][pat_name_tab[i].pat]; break; } } return p; } void content(Info & i) { Ezc::Pattern * p = 0; if( static_cast(data.locale.GetLang()) >= patterns.size() ) { log << log1 << "Templates: there is no such a language in patterns" << logend; return; } switch( request.status ) { case Error::ok: case Error::spam: case Error::incorrect_rebus: p = content_for_function(); break; //case Error::no_item: !! we need something like 'error::item_required' //p = &pat_err_item_required; //break; case Error::permission_denied: case Error::cant_change_user: case Error::cant_change_group: case Error::cant_change_privileges: // !! data.locale.GetLang() bedzie brane indywidualnie dla kazdego uzytkownika p = &patterns[data.locale.GetLang()][pat_err_per_denied]; break; case Error::no_item: case Error::no_function: case Error::unknown_param: // !! data.locale.GetLang() bedzie brane indywidualnie dla kazdego uzytkownika p = &patterns[data.locale.GetLang()][pat_err_404]; break; default: // !! data.locale.GetLang() bedzie brane indywidualnie dla kazdego uzytkownika p = &patterns[data.locale.GetLang()][pat_err_others]; break; } if( p ) { Ezc::Generator gen(i.out, *p, functions); gen.Generate(); } else { i.out << ""; } } } // namespace TemplatesFunctions void Templates::CreateFunctions() { using namespace TemplatesFunctions; functions.Clear(); /* sys */ functions.Insert("sys_ver_major", sys_ver_major); functions.Insert("sys_ver_minor", sys_ver_minor); functions.Insert("sys_ver_revision", sys_ver_revision); /* doc */ functions.Insert("doc_title", doc_title); functions.Insert("doc_base_url", doc_base_url); functions.Insert("doc_base_url_static", doc_base_url_static); functions.Insert("doc_base_url_static_auth", doc_base_url_static_auth); functions.Insert("doc_current_url", doc_current_url); functions.Insert("doc_is_error", doc_is_error); functions.Insert("doc_status", doc_status); /* item */ functions.Insert("item_is", item_is); functions.Insert("item_id", item_id); functions.Insert("item_subject", item_subject); functions.Insert("item_subject_noescape", item_subject_noescape); functions.Insert("item_content", item_content); functions.Insert("item_content_noescape", item_content_noescape); functions.Insert("item_content_type_is", item_content_type_is); functions.Insert("item_print_content", item_print_content); functions.Insert("item_privileges", item_privileges); functions.Insert("item_dir", item_dir); functions.Insert("item_url", item_url); functions.Insert("item_link", item_link); functions.Insert("item_link_static_auth", item_link_static_auth); functions.Insert("item_static_auth_is_none", item_static_auth_is_none); functions.Insert("item_static_auth_is_image", item_static_auth_is_image); functions.Insert("item_static_auth_is_other", item_static_auth_is_other); functions.Insert("item_can_read", item_can_read); functions.Insert("item_can_write", item_can_write); functions.Insert("item_info", item_info); functions.Insert("item_user", item_user); functions.Insert("item_date_creation", item_date_creation); functions.Insert("item_date_modification", item_date_modification); functions.Insert("item_dates_equal", item_dates_equal); functions.Insert("item_run", item_run); functions.Insert("item_guest_name", item_guest_name); functions.Insert("item_old_id", item_old_id); functions.Insert("item_old_subject", item_old_subject); functions.Insert("item_old_subject_noescape", item_old_subject_noescape); functions.Insert("item_old_content", item_old_content); functions.Insert("item_old_content_noescape", item_old_content_noescape); functions.Insert("item_old_privileges", item_old_privileges); functions.Insert("item_old_dir", item_old_dir); functions.Insert("item_old_url", item_old_url); functions.Insert("item_old_link", item_old_link); functions.Insert("item_tab", item_tab); functions.Insert("item_tab_id", item_tab_id); functions.Insert("item_tab_subject", item_tab_subject); functions.Insert("item_tab_subject_noescape", item_tab_subject_noescape); functions.Insert("item_tab_content", item_tab_content); functions.Insert("item_tab_content_noescape", item_tab_content_noescape); functions.Insert("item_tab_print_content", item_tab_print_content); functions.Insert("item_tab_privileges", item_tab_privileges); functions.Insert("item_tab_dir", item_tab_dir); functions.Insert("item_tab_url", item_tab_url); functions.Insert("item_tab_link", item_tab_link); functions.Insert("item_tab_can_read", item_tab_can_read); functions.Insert("item_tab_info", item_tab_info); functions.Insert("item_tab_user", item_tab_user); functions.Insert("item_tab_date_creation", item_tab_date_creation); functions.Insert("item_tab_date_modification", item_tab_date_modification); functions.Insert("item_tab_dates_equal", item_tab_dates_equal); functions.Insert("item_tab_run", item_tab_run); /* dir */ functions.Insert("dir", dir); functions.Insert("dir_can_read_exec", dir_can_read_exec); functions.Insert("dir_can_write", dir_can_write); functions.Insert("dir_can_remove", dir_can_remove); functions.Insert("dir_can_use_emacs", dir_can_use_emacs); functions.Insert("dir_can_use_mkdir", dir_can_use_mkdir); functions.Insert("dir_childs_tab", dir_childs_tab); functions.Insert("dir_childs_tab_url", dir_childs_tab_url); functions.Insert("dir_tab", dir_tab); functions.Insert("dir_tab_url", dir_tab_url); functions.Insert("dir_tab_link", dir_tab_link); functions.Insert("dir_last_default_item_dir", dir_last_default_item_dir); functions.Insert("dir_last_default_item_url", dir_last_default_item_url); functions.Insert("dir_last_subject", dir_last_subject); functions.Insert("dir_last_info", dir_last_info); functions.Insert("dir_last_user", dir_last_user); functions.Insert("dir_last_date_creation", dir_last_date_creation); functions.Insert("dir_last_date_modification", dir_last_date_modification); functions.Insert("dir_last_dates_equal", dir_last_dates_equal); functions.Insert("dir_old", dir_old); /* user */ functions.Insert("user_name", user_name); functions.Insert("user_logged", user_logged); functions.Insert("user_super_user", user_super_user); functions.Insert("user_can_use_html", user_can_use_html); functions.Insert("user_can_use_bbcode", user_can_use_bbcode); functions.Insert("user_can_use_raw", user_can_use_raw); /* privileges */ functions.Insert("priv_user_tab", priv_user_tab); functions.Insert("priv_user_tab_name", priv_user_tab_name); functions.Insert("priv_user_tab_isdefault", priv_user_tab_isdefault); functions.Insert("priv_group_tab", priv_group_tab); functions.Insert("priv_group_tab_name", priv_group_tab_name); functions.Insert("priv_group_tab_isdefault", priv_group_tab_isdefault); functions.Insert("priv_privileges", priv_privileges); /* done */ functions.Insert("done_is_error", done_is_error); functions.Insert("done_status", done_status); functions.Insert("done_status_no_item", done_status_no_item); functions.Insert("done_status_incorrect_dir", done_status_incorrect_dir); functions.Insert("done_status_incorrect_rebus", done_status_incorrect_rebus); functions.Insert("done_status_spam", done_status_spam); functions.Insert("done_added_item", done_added_item); functions.Insert("done_edited_item", done_edited_item); functions.Insert("done_deleted_item", done_deleted_item); functions.Insert("done_privileged_item", done_privileged_item); functions.Insert("done_loggedout", done_loggedout); functions.Insert("done_added_dir", done_added_dir); functions.Insert("done_deleted_dir", done_deleted_dir); functions.Insert("done_defaulted_dir", done_defaulted_dir); functions.Insert("done_reloaded_templates", done_reloaded_templates); /* others */ functions.Insert("content", content); /* who */ functions.Insert("who_tab", who_tab); functions.Insert("who_tab_lp", who_tab_lp); functions.Insert("who_tab_user", who_tab_user); functions.Insert("who_tab_time", who_tab_time); functions.Insert("who_tab_last_time", who_tab_last_time); /* last */ functions.Insert("last_tab", last_tab); functions.Insert("last_tab_name", last_tab_name); functions.Insert("last_tab_ip", last_tab_ip); functions.Insert("last_tab_start", last_tab_start); functions.Insert("last_tab_end", last_tab_end); /* thread */ functions.Insert("thread_is", thread_is); functions.Insert("thread_tab", thread_tab); functions.Insert("thread_tab_url", thread_tab_url); functions.Insert("thread_tab_subject", thread_tab_subject); functions.Insert("thread_tab_author", thread_tab_author); functions.Insert("thread_tab_answers", thread_tab_answers); functions.Insert("thread_tab_last_item_date_modification", thread_tab_last_item_date_modification); functions.Insert("thread_tab_last_item_user", thread_tab_last_item_user); functions.Insert("thread_can_create", thread_can_create); /* ticket */ functions.Insert("ticket_is", ticket_is); functions.Insert("ticket_can_create", ticket_can_create); functions.Insert("ticket_type", ticket_type); functions.Insert("ticket_status", ticket_status); functions.Insert("ticket_priority", ticket_priority); functions.Insert("ticket_category", ticket_category); functions.Insert("ticket_expected", ticket_expected); functions.Insert("ticket_progress", ticket_progress); functions.Insert("ticket_tab", ticket_tab); functions.Insert("ticket_tab_url", ticket_tab_url); functions.Insert("ticket_tab_subject", ticket_tab_subject); functions.Insert("ticket_tab_subject_empty", ticket_tab_subject_empty); functions.Insert("ticket_tab_author", ticket_tab_author); functions.Insert("ticket_tab_type", ticket_tab_type); functions.Insert("ticket_tab_status", ticket_tab_status); functions.Insert("ticket_tab_priority", ticket_tab_priority); functions.Insert("ticket_tab_category", ticket_tab_category); functions.Insert("ticket_tab_expected", ticket_tab_expected); functions.Insert("ticket_tab_progress", ticket_tab_progress); functions.Insert("ticket_type_tab", ticket_type_tab); functions.Insert("ticket_type_tab_defined", ticket_type_tab_defined); functions.Insert("ticket_type_tab_isdefault", ticket_type_tab_isdefault); functions.Insert("ticket_type_tab_index", ticket_type_tab_index); functions.Insert("ticket_type_tab_name", ticket_type_tab_name); functions.Insert("ticket_status_tab", ticket_status_tab); functions.Insert("ticket_status_tab_defined", ticket_status_tab_defined); functions.Insert("ticket_status_tab_isdefault", ticket_status_tab_isdefault); functions.Insert("ticket_status_tab_index", ticket_status_tab_index); functions.Insert("ticket_status_tab_name", ticket_status_tab_name); functions.Insert("ticket_priority_tab", ticket_priority_tab); functions.Insert("ticket_priority_tab_defined", ticket_priority_tab_defined); functions.Insert("ticket_priority_tab_isdefault", ticket_priority_tab_isdefault); functions.Insert("ticket_priority_tab_index", ticket_priority_tab_index); functions.Insert("ticket_priority_tab_name", ticket_priority_tab_name); functions.Insert("ticket_category_tab", ticket_category_tab); functions.Insert("ticket_category_tab_defined", ticket_category_tab_defined); functions.Insert("ticket_category_tab_isdefault", ticket_category_tab_isdefault); functions.Insert("ticket_category_tab_index", ticket_category_tab_index); functions.Insert("ticket_category_tab_name", ticket_category_tab_name); functions.Insert("ticket_expected_tab", ticket_expected_tab); functions.Insert("ticket_expected_tab_defined", ticket_expected_tab_defined); functions.Insert("ticket_expected_tab_isdefault", ticket_expected_tab_isdefault); functions.Insert("ticket_expected_tab_index", ticket_expected_tab_index); functions.Insert("ticket_expected_tab_name", ticket_expected_tab_name); /* mount */ functions.Insert("mount_page_is", mount_page_is); functions.Insert("mount_thread_is", mount_thread_is); functions.Insert("mount_type_is_thread", mount_type_is_thread); functions.Insert("mount_type_is_ticket", mount_type_is_ticket); functions.Insert("mount_type_is_cms", mount_type_is_cms); /* rebus */ functions.Insert("rebus_question", rebus_question); plugin.Call(CMSLU_TEMPLATES_CREATEFUNCTIONS, &functions); } void Templates::ReadTemplates() { using namespace TemplatesFunctions; using namespace TemplatesMisc; ClearPatterns(); Read(patterns, pat_index, locale_filter, "index.html"); Read(patterns, pat_err_404, locale_filter, "err_404.html"); Read(patterns, pat_err_per_denied, locale_filter, "err_per_denied.html"); Read(patterns, pat_fun_cat, locale_filter, "fun_cat.html"); Read(patterns, pat_fun_ls, locale_filter, "fun_ls.html"); Read(patterns, pat_fun_rm, locale_filter, "fun_rm.html"); Read(patterns, pat_fun_emacs, locale_filter, "fun_emacs.html"); Read(patterns, pat_fun_mkdir, locale_filter, "fun_mkdir.html"); Read(patterns, pat_fun_default, locale_filter, "fun_default.html"); Read(patterns, pat_fun_priv, locale_filter, "fun_priv.html"); Read(patterns, pat_err_others, locale_filter, "err_others.html"); Read(patterns, pat_fun_who, locale_filter, "fun_who.html"); Read(patterns, pat_fun_run, locale_filter, "fun_run.html"); Read(patterns, pat_fun_last, locale_filter, "fun_last.html"); Read(patterns, pat_item_info, locale_filter, "item_info.html"); Read(patterns, pat_item_tab_info, locale_filter, "item_tab_info.html"); Read(patterns, pat_fun_thread, locale_filter, "fun_thread.html"); Read(patterns, pat_fun_createthread,locale_filter, "fun_createthread.html"); Read(patterns, pat_dir_last_info, locale_filter, "dir_last_info.html"); Read(patterns, pat_fun_reload, locale_filter, "fun_reload.html"); Read(patterns, pat_fun_upload, locale_filter, "fun_upload.html"); Read(patterns, pat_fun_ticket, locale_filter, "fun_ticket.html"); Read(patterns, pat_fun_createticket,locale_filter, "fun_createticket.html"); } void Templates::ClearPatterns() { using namespace TemplatesFunctions; TemplatesMisc::ClearPatterns(patterns, pat_last); } void Templates::Generate() { using namespace TemplatesFunctions; // !! locale beda w zaleznosci od uzytkownika if( static_cast(data.locale.GetLang()) >= patterns.size() ) return; Ezc::Generator generator(request.page, patterns[data.locale.GetLang()][pat_index], functions); generator.Generate(); } void Templates::GenerateRunRaw() { using namespace TemplatesFunctions; Ezc::Info info(request.page); info.iter = 0; info.result = false; item_run(info); } Templates::Templates() { ClearPatterns(); }