/* * 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 Ezc::Info; 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() ) HtmlEscape(i.out, conf_item.select[value].name); } } } void ticket_is(Info & i) { i.res = ticket_info.is_ticket; } void ticket_item_subject(Info & i) { HtmlEscape(i.out, ticket_info.item.subject); } void ticket_item_content(Info & i) { HtmlEscape(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 ) HtmlEscape(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 ) HtmlEscape(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() ) HtmlEscape(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 == 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() ) { HtmlEscape(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; Ezc::Functions * fun = reinterpret_cast(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