/* * 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/request.h" #include "../core/data.h" #include "../core/db.h" #include "../core/log.h" #include "../core/misc.h" namespace TemplatesFunctions { void dir(Info & i) { for(size_t a=0 ; aurl); i.out << '/'; } } void dir_can_read_exec(Info & i) { bool result = true; for(size_t a=0 ; a dir_childs_table; static size_t dir_childs_index; // request.id is never 0 and we can start dir_childs_reqid from 0 static size_t dir_childs_reqid = 0; void dir_childs_tab(Info & i) { if( dir_childs_reqid != request.id ) { dir_childs_reqid = request.id; dir_childs_table.clear(); if( !request.dir_table.empty() ) data.dirs.GetDirChilds(request.dir_table.back()->id, dir_childs_table); } dir_childs_index = i.iter; i.result = dir_childs_index < dir_childs_table.size(); } void dir_childs_tab_url(Info & i) { if( dir_childs_index < dir_childs_table.size() ) HtmlEscape(i.out, dir_childs_table[dir_childs_index]->url); } static size_t dir_index; void dir_tab(Info & i) { dir_index = i.iter; i.result = dir_index < request.dir_table.size(); } void dir_tab_url(Info & i) { if( dir_index < request.dir_table.size() ) HtmlEscape(i.out, request.dir_table[dir_index]->url); } void dir_tab_link(Info & i) { i.out << data.base_url; for(size_t a = 0 ; a <= dir_index && a < request.dir_table.size() ; ++a) { HtmlEscape(i.out, request.dir_table[a]->url); i.out << '/'; } } static Item dir_last_default_item; static size_t dir_last_default_item_reqid = 0; void dir_last_default_item_init() { if( dir_last_default_item_reqid == request.id ) return; dir_last_default_item_reqid = request.id; dir_last_default_item.Clear(); log << "inicjalizacja dir_last_default_item" << logend; if( request.dir_table.empty() ) return; long default_item = request.dir_table.back()->default_item; if( default_item == -1 ) return; std::vector item_table; // !! tymczasowo, nie bedzie tego po zmianie interfejsu dla Db db.GetItem(item_table, default_item); if( item_table.empty() ) return; dir_last_default_item = item_table[0]; } void dir_last_default_item_dir(Info & i) { dir_last_default_item_init(); std::string path; if( dir_last_default_item.parent_id != -1 ) if( data.dirs.MakePath(dir_last_default_item.parent_id, path) ) HtmlEscape(i.out, path); } void dir_last_default_item_url(Info & i) { dir_last_default_item_init(); HtmlEscape(i.out, dir_last_default_item.url); } void dir_old(Info & i) { HtmlEscape(i.out, request.session->dir_old); } } // namespace TemplatesFunctions