/* * This file is a part of CMSLU -- Content Management System like Unix * and is not publicly distributed * * Copyright (c) 2008, Tomasz Sowa * All rights reserved. * */ #include "templates.h" namespace TemplatesFunctions { Pattern pat_index; Pattern pat_item; Pattern pat_dir; Pattern pat_item_add_edit; Pattern pat_item_del_confirm; Pattern pat_err_404; Pattern pat_err_internal; Functions functions; void language(Info & i) { // at the moment only Polish language i.out << "pl"; } void title(Info & i) { i.out << ""; } void charset(Info & i) { i.out << "iso-8859-2"; } void version_major(Info & i) { i.out << MAJOR_VER; } void version_minor(Info & i) { i.out << MINOR_VER; } void version_revision(Info & i) { i.out << REVISION_VER; } void content(Info & i) { Pattern * p; switch( request.result ) { case Request::add_item: case Request::edit_item: p = &pat_item_add_edit; break; case Request::show_dir: p = &pat_dir; break; case Request::show_item: p = &pat_item; break; case Request::del_item_confirm: p = &pat_item_del_confirm; break; case Request::err_internal: p = &pat_err_internal; break; case Request::err404: default: p = &pat_err_404; } Generator gen(i.out, *p, functions); gen.Generate(); } void base_url(Info & i) { i.out << data.base_url; } void current_url(Info & i) { i.out << request.env_request_uri; } void user_logged(Info & i) { i.result = request.session->is_logged; } void user(Info & i) { i.out << request.session->user; } void item_id(Info & i) { i.out << request.item.id; } void item_subject(Info & i) { i.out << HtmlSpecial(request.item.subject); } void item_content(Info & i) { //i.out << HtmlSpecial(request.item.content); i.out << request.item.content; } void item_url_subject(Info & i) // !! zmienic nazwe { i.out << request.item.url; } void item_dir(Info & i) { std::string path; if( data.dir.MakePath(request.item.parent_id, path) ) { i.out << path; } else { i.out << "problem with generating a path"; } } // --------- void old_item_id(Info & i) { i.out << request.session->item.id; } void old_item_subject(Info & i) { i.out << HtmlSpecial(request.session->item.subject); } void old_item_content(Info & i) { //i.out << HtmlSpecial(request.session->item.content); i.out << request.session->item.content; } void old_item_url_subject(Info & i) // zmienic nazwe !! { i.out << request.session->item.url; } void old_item_dir(Info & i) { std::string path; if( data.dir.MakePath(request.session->item.parent_id, path) ) { i.out << path; } else { i.out << "problem with generating a path"; } } // ---- void full_dir(Info & i) { std::vector::size_type a; for(a=0 ; a::size_type item_index, dir_index; void dir_items(Info & i) { if( i.iter >= (int)request.dir_table.size() ) { i.result = false; } else { i.result = true; dir_index = i.iter; } } void dir_subject2(Info & i) { if( dir_index < request.dir_table.size() ) { if( request.dir_table[dir_index].subject.empty() ) i.out << "bez nazwy"; else HtmlSpecial(i.out, request.dir_table[dir_index].subject); } } void dir_url_subject2(Info & i) // zmienic nazwe { if( dir_index < request.dir_table.size() ) { HtmlSpecial(i.out, request.dir_table[dir_index].url); } } void items(Info & i) // zamienic na fitems !! { if( i.iter >= (int)request.item_table.size() ) { i.result = false; } else { i.result = true; item_index = i.iter; } } void item_subject2(Info & i) { if( item_index < request.item_table.size() ) { if( request.item_table[item_index].subject.empty() ) i.out << "bez nazwy"; else HtmlSpecial(i.out, request.item_table[item_index].subject); } } void item_url_subject2(Info & i) // !! zmienic nazwe { if( item_index < request.item_table.size() ) HtmlSpecial(i.out, request.item_table[item_index].url); } void item_content2(Info & i) { if( item_index < request.item_table.size() ) //HtmlSpecial(i.out, request.item_table[item_index].content); i.out << request.item_table[item_index].content; } void item_id2(Info & i) { if( item_index < request.item_table.size() ) i.out << request.item_table[item_index].id; } void incorrect_dir(Info & i) { if( request.session->done_status == Error::incorrect_dir ) i.result = true; else i.result = false; } std::vector::size_type current_dir_index; void fcurrent_dir(Info & i) { if( i.iter < (int)request.cur_dir_table.size() ) { current_dir_index = i.iter; i.result = true; } else i.result = false; } void current_dir_part_link(Info & i) { std::vector::size_type a; i.out << data.base_url; for(a = 0 ; a <= current_dir_index && a < request.cur_dir_table.size() ; ++a) { i.out << request.cur_dir_table[a].url << '/'; } } void current_dir_part_url(Info & i) { if( current_dir_index < request.cur_dir_table.size() ) i.out << request.cur_dir_table[current_dir_index].url; } void edit_item(Info & i) { i.result = request.result == Request::edit_item; } void added_item(Info &i) { i.result = request.session->done == Done::added_item; } void edited_item(Info &i) { i.result = request.session->done == Done::edited_item; } void deleted_item(Info &i) { i.result = request.session->done == Done::deleted_item; } // zostawic tylko jedna funkcje done_with_errors (bedzie uzywana do roznych celow) !! void deleted_item_errors(Info & i) { i.result = request.session->done_status != Error::ok; } void done_with_errors(Info & i) { i.result = request.session->done_status != Error::ok; } void done_status(Info & i) { i.out << static_cast( request.session->done_status ); } void fitems_in_dir(Info & i) { // i.out << "abc: " << variables["fitems_directory"]; } void loggedout(Info & i) { i.result = request.session->done == Done::loggedout; } } // namespace TemplatesFunctions void Templates::CreateFunctions() { using namespace TemplatesFunctions; functions.Clear(); functions.Insert("language", language); functions.Insert("title", title); functions.Insert("charset", charset); functions.Insert("content", content); functions.Insert("version_major", version_major); functions.Insert("version_minor", version_minor); functions.Insert("version_revision", version_revision); functions.Insert("base_url", base_url); functions.Insert("current_url", current_url); functions.Insert("user_logged", user_logged); functions.Insert("user", user); functions.Insert("item_id", item_id); functions.Insert("item_subject", item_subject); functions.Insert("item_content", item_content); functions.Insert("item_url_subject", item_url_subject); functions.Insert("item_dir", item_dir); functions.Insert("old_item_id", old_item_id); functions.Insert("old_item_subject", old_item_subject); functions.Insert("old_item_content", old_item_content); functions.Insert("old_item_url_subject", old_item_url_subject); functions.Insert("old_item_dir", old_item_dir); functions.Insert("dir_items", dir_items); functions.Insert("items", items); functions.Insert("item_subject2", item_subject2); functions.Insert("dir_subject2", dir_subject2); functions.Insert("full_dir", full_dir); functions.Insert("dir_url_subject2", dir_url_subject2); functions.Insert("item_url_subject2", item_url_subject2); functions.Insert("item_content2", item_content2); functions.Insert("item_id2", item_id2); functions.Insert("edit_item", edit_item); functions.Insert("incorrect_dir", incorrect_dir); functions.Insert("fcurrent_dir", fcurrent_dir); functions.Insert("current_dir_part_link", current_dir_part_link); functions.Insert("current_dir_part_url", current_dir_part_url); functions.Insert("added_item", added_item); functions.Insert("edited_item", edited_item); functions.Insert("deleted_item", deleted_item); functions.Insert("loggedout", loggedout); functions.Insert("deleted_item_errors", deleted_item_errors); functions.Insert("done_with_errors", done_with_errors); functions.Insert("done_status", done_status); functions.Insert("fitems_in_dir", fitems_in_dir); } void Templates::Read() { using namespace TemplatesFunctions; pat_index.Directory(data.templates); pat_index.ParseFile(data.default_index); pat_item.Directory(data.templates); pat_item.ParseFile("item.html"); pat_dir.Directory(data.templates); pat_dir.ParseFile("dir.html"); pat_item_add_edit.Directory(data.templates); pat_item_add_edit.ParseFile("item_add_edit.html"); pat_err_404.Directory(data.templates); pat_err_404.ParseFile("err_404.html"); pat_item_del_confirm.Directory(data.templates); pat_item_del_confirm.ParseFile("item_del_confirm.html"); pat_err_internal.Directory(data.templates); pat_err_internal.ParseFile("err_internal.html"); CreateFunctions(); } void Templates::Generate() { using namespace TemplatesFunctions; // clear some variables (indexes for example) item_index = 0; current_dir_index = 0; Generator generator(request.page, pat_index, functions); generator.Generate(); }