/* * This file is a part of Winix * and is not publicly distributed * * Copyright (c) 2008-2010, Tomasz Sowa * All rights reserved. * */ #include "content.h" #include "../core/request.h" #include "../core/error.h" #include "../core/db.h" #include "../core/mount.h" #include "../core/data.h" bool Content::FunCreateTicketCheckAccess() { if( !request.CanCreateTicket() ) { request.status = WINIX_ERR_PERMISSION_DENIED; return false; } return true; } bool Content::FunCreateTicketCheckAbuse() { if( !CheckRebus() ) { request.status = WINIX_ERR_INCORRECT_REBUS; return false; } CheckGetPostTimes(); if( request.session->spam_score > 0 ) { request.status = WINIX_ERR_SPAM; log << log1 << "Content: ignoring due to suspected spamming" << logend; return false; } return true; } void Content::ReadTicketType(Ticket & ticket) { static std::string temp; request.PostVar("type", temp); ticket.type = atoi(temp.c_str()); if( ticket.type >= data.mounts.pmount->param[Mount::par_ticket_type].arg.size() ) ticket.type = data.mounts.pmount->param[Mount::par_ticket_type].arg.size(); } void Content::ReadTicketStatus(Ticket & ticket) { static std::string temp; request.PostVar("status", temp); ticket.status = atoi(temp.c_str()); if( ticket.status >= data.mounts.pmount->param[Mount::par_ticket_status].arg.size() ) ticket.status = data.mounts.pmount->param[Mount::par_ticket_status].arg.size(); } void Content::ReadTicketPriority(Ticket & ticket) { static std::string temp; request.PostVar("priority", temp); ticket.priority = atoi(temp.c_str()); if( ticket.priority >= data.mounts.pmount->param[Mount::par_ticket_priority].arg.size() ) ticket.priority = data.mounts.pmount->param[Mount::par_ticket_priority].arg.size(); } void Content::ReadTicketCategory(Ticket & ticket) { static std::string temp; request.PostVar("category", temp); ticket.category = atoi(temp.c_str()); if( ticket.category >= data.mounts.pmount->param[Mount::par_ticket_category].arg.size() ) ticket.category = data.mounts.pmount->param[Mount::par_ticket_category].arg.size(); } void Content::ReadTicketExpected(Ticket & ticket) { static std::string temp; request.PostVar("expected", temp); ticket.expected = atoi(temp.c_str()); if( ticket.expected >= data.mounts.pmount->param[Mount::par_ticket_expected].arg.size() ) ticket.expected = data.mounts.pmount->param[Mount::par_ticket_expected].arg.size(); } void Content::ReadTicketProgress(Ticket & ticket) { static std::string temp; request.PostVar("progress", temp); int p = atoi(temp.c_str()); if( p < 0 ) p = 0; if( p > 100 ) p = 100; ticket.progress = p; } void Content::ReadTicket(Ticket & ticket) { ticket.parent_id = request.dir_table.back()->id; ReadTicketType(ticket); ReadTicketStatus(ticket); ReadTicketPriority(ticket); ReadTicketCategory(ticket); ReadTicketExpected(ticket); ReadTicketProgress(ticket); } void Content::AddTicket() { static std::string temp; request.ticket.dir_id = request.dir_table.back()->id; // a new directory created by Mkdir() request.ticket.item_id = request.item.id; // this id is set by PostFunEmacsAdd() request.status = db.AddTicket(request.ticket); } void Content::PostFunCreateTicketLogAndRedirect() { if( request.status == WINIX_ERR_OK ) { log << log2 << "Content: added a new ticket" << logend; RedirectToLastDir(); } else { log << log1 << "Content: problem with adding a new ticket, error code: " << request.status << logend; } } void Content::PostFunCreateTicket() { if( !FunCreateTicketCheckAccess() ) return; ReadItem(request.item, Item::dir); ReadTicket(request.ticket); request.item.privileges = 0777; // !! tymczasowo 777 aby wszyscy mogli wysylac posty if( !FunCreateTicketCheckAbuse() ) { ReadItemContentWithType(request.item); // for correctly displaying the form return; } Mkdir(request.item, true); if( request.status == WINIX_ERR_OK ) { ReadItemContentWithType(request.item); request.item.type = Item::file; request.item.privileges = 0644; // !! tymczasowo request.item.parent_id = request.dir_table.back()->id; PostFunEmacsAdd(); if( request.status == WINIX_ERR_OK ) AddTicket(); } PostFunCreateTicketLogAndRedirect(); } void Content::FunCreateTicket() { FunCreateTicketCheckAccess(); }