winix/templates/thread.cpp

174 lines
2.9 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"
namespace TemplatesFunctions
{
void thread_is(Info & i)
{
i.result = request.is_thread;
}
static size_t thread_tab_index;
void thread_tab(Info & i)
{
thread_tab_index = i.iter;
i.result = thread_tab_index < request.thread_tab.size();
}
void thread_tab_url(Info & i)
{
if( thread_tab_index < request.thread_tab.size() )
{
Item * dir = data.dirs.GetDir( request.thread_tab[thread_tab_index].dir_id );
if( dir )
{
HtmlEscape(i.out, dir->url);
}
else
{
i.out << "<!-- unknown directory -->";
}
}
}
void thread_tab_subject(Info & i)
{
if( thread_tab_index < request.thread_tab.size() )
{
Item * dir = data.dirs.GetDir( request.thread_tab[thread_tab_index].dir_id );
if( dir )
{
if( !dir->subject.empty() )
HtmlEscape(i.out, dir->subject);
else
HtmlEscape(i.out, dir->url);
}
else
{
i.out << "<!-- unknown subject -->";
}
}
}
void thread_tab_answers(Info & i)
{
if( thread_tab_index < request.thread_tab.size() )
{
long a = request.thread_tab[thread_tab_index].items;
// the first is created by the author
// we count only the rest
if( a > 0 )
--a;
i.out << a;
}
}
void thread_tab_author(Info & i)
{
bool unknown = true;
if( thread_tab_index < request.thread_tab.size() )
{
Item * dir = data.dirs.GetDir( request.thread_tab[thread_tab_index].dir_id );
if( dir )
{
User * puser = data.users.GetUser(dir->user_id);
unknown = false;
if( puser )
HtmlEscape(i.out, puser->name);
else
{
i.out << "~";
if( !dir->guest_name.empty() )
HtmlEscape(i.out, dir->guest_name);
else
i.out << "guest"; // !! dodac do konfiga
}
}
}
if( unknown )
{
i.out << "<!-- unknown user -->";
}
}
void thread_tab_last_item_date_modification(Info & i)
{
if( thread_tab_index < request.thread_tab.size() )
if( request.thread_tab[thread_tab_index].last_item.id != -1 )
i.out << DateToStr( &request.thread_tab[thread_tab_index].last_item.date_modification );
}
void thread_tab_last_item_user(Info & i)
{
if( thread_tab_index < request.thread_tab.size() )
{
if( request.thread_tab[thread_tab_index].last_item.id != -1 )
{
User * puser = data.users.GetUser( request.thread_tab[thread_tab_index].last_item.user_id );
if( puser )
HtmlEscape(i.out, puser->name);
else
{
i.out << "~";
if( !request.thread_tab[thread_tab_index].last_item.guest_name.empty() )
HtmlEscape(i.out, request.thread_tab[thread_tab_index].last_item.guest_name);
else
i.out << "guest"; // !! dodac do konfiga
}
}
}
}
void thread_can_create(Info & i)
{
i.result = request.CanCreateThread(true);
}
} // namespace TemplatesFunctions