winix/plugins/ticket/templates.cpp

461 lines
11 KiB
C++
Executable File

/*
* This file is a part of Winix
* and is not publicly distributed
*
* Copyright (c) 2008-2010, Tomasz Sowa
* All rights reserved.
*
*/
#include "ezc.h"
#include "ticketinfo.h"
#include "editticket.h"
#include "createticket.h"
#include "core/request.h"
#include "core/misc.h"
#include "core/plugin.h"
#include "functions/functions.h"
#include "templates/templates.h"
namespace Ticket
{
using namespace TemplatesFunctions;
using TemplatesFunctions::system;
extern TicketInfo ticket_info;
extern CreateTicket fun_create_ticket;
extern EditTicket fun_edit_ticket;
int ticket_calc_progress_image_number(int percent)
{
percent = int( double(percent) / 10.0 + 0.5 ) * 10;
if( percent < 0 )
percent = 0;
if( percent > 100 )
percent = 100;
return percent;
}
void find_ticket_value(const TicketConf::TicketItem & conf_item, const Ticket & ticket, bool * has_value, int * value)
{
*has_value = false;
*value = 0;
for(size_t a=0 ; a < ticket.par_tab.size() ; a++)
{
int par = ticket.par_tab[a].param;
int val = ticket.par_tab[a].value;
if( par == conf_item.id )
{
*has_value = true;
*value = val;
}
}
}
void ticket_print_value(Info & i, size_t conf_index, int value)
{
if( conf_index < ticket_info.cur_conf->tab.size() )
{
const TicketConf::TicketItem & conf_item = ticket_info.cur_conf->tab[conf_index];
if( conf_item.type == TicketConf::TicketItem::TypeInteger )
i.out << value;
else
if( conf_item.type == TicketConf::TicketItem::TypeSelect )
{
if( value < (int)conf_item.select.size() )
i.out << conf_item.select[value].name;
}
}
}
void ticket_is(Info & i)
{
i.res = ticket_info.is_ticket;
}
void ticket_item_subject(Info & i)
{
i.out << ticket_info.item.subject;
}
void ticket_item_content(Info & i)
{
i.out << ticket_info.item.content;
}
void ticket_item_content_type_is(Info & i)
{
item_content_type_is(ticket_info.item, i);
}
void ticket_item_print_content(Info & i)
{
item_print_content(i.out, ticket_info.item.content, ticket_info.item.content_type);
}
void ticket_can_create(Info & i)
{
i.res = fun_create_ticket.HasAccess(true);
}
void ticket_can_edit(Info & i)
{
i.res = fun_edit_ticket.HasAccess();
}
namespace ns_tickets_tab
{
static size_t tickets_tab_index;
static size_t conf_tab_index;
static bool has_value;
static int value;
void tickets_tab(Info & i)
{
tickets_tab_index = i.iter;
i.res = tickets_tab_index < ticket_info.ticket_tab.size();
}
Item * tickets_tab_find_index_dir()
{
Item * dir = 0;
if( tickets_tab_index < ticket_info.ticket_tab.size() )
{
long dir_id = ticket_info.ticket_tab[tickets_tab_index].dir_id;
dir = system->dirs.GetDir(dir_id);
}
return dir;
}
void tickets_tab_url(Info & i)
{
Item * dir = tickets_tab_find_index_dir();
if( dir )
i.out << dir->url;
}
void tickets_tab_subject_empty(Info & i)
{
Item * dir = tickets_tab_find_index_dir();
if( dir )
i.res = dir->subject.empty();
}
void tickets_tab_subject(Info & i)
{
Item * dir = tickets_tab_find_index_dir();
if( dir )
i.out << dir->subject;
}
void tickets_tab_conf_tab(Info & i)
{
if( tickets_tab_index < ticket_info.ticket_tab.size() )
{
conf_tab_index = i.iter;
i.res = conf_tab_index < ticket_info.cur_conf->tab.size();
if( i.res )
{
const TicketConf::TicketItem & conf_item = ticket_info.cur_conf->tab[conf_tab_index];
const Ticket & ticket = ticket_info.ticket_tab[tickets_tab_index];
find_ticket_value(conf_item, ticket, &has_value, &value);
}
}
}
void tickets_tab_conf_tab_value(Info & i)
{
if( has_value )
ticket_print_value(i, conf_tab_index, value);
}
void tickets_tab_conf_tab_is_progress(Info & i)
{
if( has_value &&
conf_tab_index < ticket_info.cur_conf->tab.size() )
{
const TicketConf::TicketItem & conf_item = ticket_info.cur_conf->tab[conf_tab_index];
i.res = IsSubString(ticket_info.progress_prefix, conf_item.name);
}
}
void tickets_tab_conf_tab_progress_image_number(Info & i)
{
if( has_value )
i.out << ticket_calc_progress_image_number(value);
}
} // namespace ns_tickets_tab
namespace ns_ticket_tab
{
static size_t conf_index;
static size_t select_index;
static bool has_value;
static int value;
void ticket_tab(Info & i)
{
conf_index = i.iter;
i.res = conf_index < ticket_info.cur_conf->tab.size();
if( i.res )
{
const TicketConf::TicketItem & conf_item = ticket_info.cur_conf->tab[conf_index];
find_ticket_value(conf_item, ticket_info.ticket, &has_value, &value);
}
}
void ticket_tab_param(Info & i)
{
if( conf_index < ticket_info.cur_conf->tab.size() )
i.out << ticket_info.cur_conf->tab[conf_index].name;
}
void ticket_tab_value(Info & i)
{
if( has_value )
ticket_print_value(i, conf_index, value);
}
void ticket_tab_param_index(Info & i)
{
if( conf_index < ticket_info.cur_conf->tab.size() )
i.out << ticket_info.cur_conf->tab[conf_index].id;
}
void ticket_tab_value_index(Info & i)
{
if( has_value )
i.out << value;
}
void ticket_tab_is_select(Info & i)
{
if( conf_index < ticket_info.cur_conf->tab.size() )
i.res = ticket_info.cur_conf->tab[conf_index].type == TicketConf::TicketItem::TypeSelect;
}
void ticket_tab_is_integer(Info & i)
{
if( conf_index < ticket_info.cur_conf->tab.size() )
i.res = ticket_info.cur_conf->tab[conf_index].type == TicketConf::TicketItem::TypeInteger;
}
void ticket_tab_select_tab(Info & i)
{
if( conf_index < ticket_info.cur_conf->tab.size() )
{
select_index = i.iter;
i.res = select_index < ticket_info.cur_conf->tab[conf_index].select.size();
}
}
void ticket_tab_select_tab_is_default(Info & i)
{
if( has_value )
{
i.res = select_index == (size_t)value;
}
else
{
if( conf_index < ticket_info.cur_conf->tab.size() &&
select_index < ticket_info.cur_conf->tab[conf_index].select.size() )
{
i.res = select_index == ticket_info.cur_conf->tab[conf_index].select_default;
}
}
}
void ticket_tab_select_tab_name(Info & i)
{
if( conf_index < ticket_info.cur_conf->tab.size() &&
select_index < ticket_info.cur_conf->tab[conf_index].select.size() )
{
i.out << ticket_info.cur_conf->tab[conf_index].select[select_index].name;
}
}
void ticket_tab_select_tab_id(Info & i)
{
if( conf_index < ticket_info.cur_conf->tab.size() &&
select_index < ticket_info.cur_conf->tab[conf_index].select.size() )
{
i.out << ticket_info.cur_conf->tab[conf_index].select[select_index].id;
}
}
} // namespace ns_ticket_tab
void AddEzcFunctions(PluginInfo & info)
{
using namespace ns_tickets_tab;
using namespace ns_ticket_tab;
using TemplatesFunctions::EzcFun;
EzcFun * fun = reinterpret_cast<EzcFun*>(info.p1);
fun->Insert("ticket_is", ticket_is);
fun->Insert("ticket_item_subject", ticket_item_subject);
fun->Insert("ticket_item_content", ticket_item_content);
fun->Insert("ticket_item_content_type_is", ticket_item_content_type_is);
fun->Insert("ticket_item_print_content", ticket_item_print_content);
fun->Insert("ticket_can_create", ticket_can_create);
fun->Insert("ticket_can_edit", ticket_can_edit);
fun->Insert("tickets_tab", tickets_tab);
fun->Insert("tickets_tab_url", tickets_tab_url);
fun->Insert("tickets_tab_subject_empty", tickets_tab_subject_empty);
fun->Insert("tickets_tab_subject", tickets_tab_subject);
fun->Insert("tickets_tab_url", tickets_tab_url);
fun->Insert("tickets_tab_conf_tab", tickets_tab_conf_tab);
fun->Insert("tickets_tab_conf_tab_value", tickets_tab_conf_tab_value);
fun->Insert("tickets_tab_conf_tab_is_progress", tickets_tab_conf_tab_is_progress);
fun->Insert("tickets_tab_conf_tab_progress_image_number", tickets_tab_conf_tab_progress_image_number);
fun->Insert("ticket_tab", ticket_tab);
fun->Insert("ticket_tab_param", ticket_tab_param);
fun->Insert("ticket_tab_value", ticket_tab_value);
fun->Insert("ticket_tab_param_index", ticket_tab_param_index);
fun->Insert("ticket_tab_value_index", ticket_tab_value_index);
fun->Insert("ticket_tab_is_select", ticket_tab_is_select);
fun->Insert("ticket_tab_is_integer", ticket_tab_is_integer);
fun->Insert("ticket_tab_select_tab", ticket_tab_select_tab);
fun->Insert("ticket_tab_select_tab_is_default", ticket_tab_select_tab_is_default);
fun->Insert("ticket_tab_select_tab_id", ticket_tab_select_tab_id);
fun->Insert("ticket_tab_select_tab_name", ticket_tab_select_tab_name);
/*
fun->Insert("ticket_type", ticket_type);
fun->Insert("ticket_status", ticket_status);
fun->Insert("ticket_priority", ticket_priority);
fun->Insert("ticket_category", ticket_category);
fun->Insert("ticket_expected", ticket_expected);
fun->Insert("ticket_progress", ticket_progress);
fun->Insert("ticket_progress_image_number", ticket_progress_image_number);
fun->Insert("ticket_tab", ticket_tab);
fun->Insert("ticket_tab_url", ticket_tab_url);
fun->Insert("ticket_tab_subject", ticket_tab_subject);
fun->Insert("ticket_tab_subject_empty", ticket_tab_subject_empty);
fun->Insert("ticket_tab_author", ticket_tab_author);
fun->Insert("ticket_tab_type", ticket_tab_type);
fun->Insert("ticket_tab_status", ticket_tab_status);
fun->Insert("ticket_tab_priority", ticket_tab_priority);
fun->Insert("ticket_tab_category", ticket_tab_category);
fun->Insert("ticket_tab_expected", ticket_tab_expected);
fun->Insert("ticket_tab_progress", ticket_tab_progress);
fun->Insert("ticket_tab_progress_image_number",ticket_tab_progress_image_number);
fun->Insert("ticket_type_tab", ticket_type_tab);
fun->Insert("ticket_type_tab_defined", ticket_type_tab_defined);
fun->Insert("ticket_type_tab_isdefault", ticket_type_tab_isdefault);
fun->Insert("ticket_type_tab_index", ticket_type_tab_index);
fun->Insert("ticket_type_tab_name", ticket_type_tab_name);
fun->Insert("ticket_status_tab", ticket_status_tab);
fun->Insert("ticket_status_tab_defined", ticket_status_tab_defined);
fun->Insert("ticket_status_tab_isdefault", ticket_status_tab_isdefault);
fun->Insert("ticket_status_tab_index", ticket_status_tab_index);
fun->Insert("ticket_status_tab_name", ticket_status_tab_name);
fun->Insert("ticket_priority_tab", ticket_priority_tab);
fun->Insert("ticket_priority_tab_defined", ticket_priority_tab_defined);
fun->Insert("ticket_priority_tab_isdefault", ticket_priority_tab_isdefault);
fun->Insert("ticket_priority_tab_index", ticket_priority_tab_index);
fun->Insert("ticket_priority_tab_name", ticket_priority_tab_name);
fun->Insert("ticket_category_tab", ticket_category_tab);
fun->Insert("ticket_category_tab_defined", ticket_category_tab_defined);
fun->Insert("ticket_category_tab_isdefault", ticket_category_tab_isdefault);
fun->Insert("ticket_category_tab_index", ticket_category_tab_index);
fun->Insert("ticket_category_tab_name", ticket_category_tab_name);
fun->Insert("ticket_expected_tab", ticket_expected_tab);
fun->Insert("ticket_expected_tab_defined", ticket_expected_tab_defined);
fun->Insert("ticket_expected_tab_isdefault", ticket_expected_tab_isdefault);
fun->Insert("ticket_expected_tab_index", ticket_expected_tab_index);
fun->Insert("ticket_expected_tab_name", ticket_expected_tab_name);
*/
}
} // namespace Ticket