winix/templates/templates.cpp

585 lines
18 KiB
C++
Executable File

/*
* This file is a part of CMSLU -- Content Management System like Unix
* and is not publicly distributed
*
* Copyright (c) 2008-2009, Tomasz Sowa
* All rights reserved.
*
*/
#include "templates.h"
#include "../core/data.h"
#include "../core/request.h"
#include "../core/misc.h"
#include "../core/plugin.h"
namespace TemplatesFunctions
{
Ezc::Pattern pat_index;
Ezc::Pattern pat_fun_cat;
Ezc::Pattern pat_fun_ls;
Ezc::Pattern pat_fun_emacs;
Ezc::Pattern pat_fun_mkdir;
Ezc::Pattern pat_fun_default;
Ezc::Pattern pat_fun_priv;
Ezc::Pattern pat_fun_rm;
Ezc::Pattern pat_fun_who;
Ezc::Pattern pat_fun_run;
Ezc::Pattern pat_fun_last;
Ezc::Pattern pat_fun_thread;
Ezc::Pattern pat_fun_reload;
Ezc::Pattern pat_fun_createthread;
Ezc::Pattern pat_fun_upload;
Ezc::Pattern pat_fun_ticket;
Ezc::Pattern pat_fun_createticket;
Ezc::Pattern pat_err_item_required;
Ezc::Pattern pat_err_404;
Ezc::Pattern pat_err_per_denied;
Ezc::Pattern pat_err_others;
Ezc::Pattern pat_item_info;
Ezc::Pattern pat_item_tab_info;
Ezc::Pattern pat_dir_last_info;
Ezc::Functions functions;
PatternCacher pattern_cacher;
Ezc::Pattern * content_for_function()
{
Ezc::Pattern * p = 0;
if( !request.pfunction )
{
log << log1 << "Templates: no function" << logend;
return p;
}
switch( request.pfunction->code )
{
case FUN_CAT:
p = &pat_fun_cat;
break;
case FUN_LS:
p = &pat_fun_ls;
break;
case FUN_RM:
p = &pat_fun_rm;
break;
case FUN_EMACS:
p = &pat_fun_emacs;
break;
case FUN_MKDIR:
p = &pat_fun_mkdir;
break;
case FUN_DEFAULT:
p = &pat_fun_default;
break;
case FUN_PRIV:
p = &pat_fun_priv;
break;
case FUN_RUN:
p = &pat_fun_run;
break;
case FUN_WHO:
p = &pat_fun_who;
break;
case FUN_LAST:
p = &pat_fun_last;
break;
case FUN_THREAD:
p = &pat_fun_thread;
break;
case FUN_RELOAD:
p = &pat_fun_reload;
break;
case FUN_CREATETHREAD:
p = &pat_fun_createthread;
break;
case FUN_TICKET:
p = &pat_fun_ticket;
break;
case FUN_CREATETICKET:
case FUN_EDITTICKET:
p = &pat_fun_createticket;
break;
case FUN_UPLOAD:
p = &pat_fun_upload;
break;
default:
break;
}
return p;
}
void content(Info & i)
{
Ezc::Pattern * p = 0;
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:
p = &pat_err_per_denied;
break;
case Error::no_item:
case Error::no_function:
case Error::unknown_param:
p = &pat_err_404;
break;
default:
p = &pat_err_others;
break;
}
if( p )
{
Ezc::Generator gen(i.out, *p, functions);
gen.Generate();
}
else
{
i.out << "<!-- there are not any patterns -->";
}
}
} // 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_language", doc_language);
functions.Insert("doc_title", doc_title);
functions.Insert("doc_charset", doc_charset);
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;
pat_index.Directory(data.templates);
pat_index.ParseFile("index.html");
pat_err_404.Directory(data.templates);
pat_err_404.ParseFile("err_404.html");
pat_err_per_denied.Directory(data.templates);
pat_err_per_denied.ParseFile("err_per_denied.html");
pat_fun_cat.Directory(data.templates);
pat_fun_cat.ParseFile("fun_cat.html");
pat_fun_ls.Directory(data.templates);
pat_fun_ls.ParseFile("fun_ls.html");
pat_fun_rm.Directory(data.templates);
pat_fun_rm.ParseFile("fun_rm.html");
pat_err_item_required.Directory(data.templates);
pat_err_item_required.ParseFile("err_item_required.html");
pat_fun_emacs.Directory(data.templates);
pat_fun_emacs.ParseFile("fun_emacs.html");
pat_fun_mkdir.Directory(data.templates);
pat_fun_mkdir.ParseFile("fun_mkdir.html");
pat_fun_default.Directory(data.templates);
pat_fun_default.ParseFile("fun_default.html");
pat_fun_priv.Directory(data.templates);
pat_fun_priv.ParseFile("fun_priv.html");
pat_err_others.Directory(data.templates);
pat_err_others.ParseFile("err_others.html");
pat_fun_who.Directory(data.templates);
pat_fun_who.ParseFile("fun_who.html");
pat_fun_run.Directory(data.templates);
pat_fun_run.ParseFile("fun_run.html");
pat_fun_last.Directory(data.templates);
pat_fun_last.ParseFile("fun_last.html");
pat_item_info.Directory(data.templates);
pat_item_info.ParseFile("item_info.html");
pat_item_tab_info.Directory(data.templates);
pat_item_tab_info.ParseFile("item_tab_info.html");
pat_fun_thread.Directory(data.templates);
pat_fun_thread.ParseFile("fun_thread.html");
pat_fun_createthread.Directory(data.templates);
pat_fun_createthread.ParseFile("fun_createthread.html");
pat_dir_last_info.Directory(data.templates);
pat_dir_last_info.ParseFile("dir_last_info.html");
pat_fun_reload.Directory(data.templates);
pat_fun_reload.ParseFile("fun_reload.html");
pat_fun_upload.Directory(data.templates);
pat_fun_upload.ParseFile("fun_upload.html");
pat_fun_ticket.Directory(data.templates);
pat_fun_ticket.ParseFile("fun_ticket.html");
pat_fun_createticket.Directory(data.templates);
pat_fun_createticket.ParseFile("fun_createticket.html");
}
void Templates::Generate()
{
using namespace TemplatesFunctions;
Ezc::Generator generator(request.page, 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);
}