/* * This file is a part of Winix * and is not publicly distributed * * Copyright (c) 2008-2009, Tomasz Sowa * All rights reserved. * */ #include "content.h" #include "../core/request.h" #include "../core/error.h" #include "../core/db.h" #include "../core/data.h" #include "../core/notify.h" #include "../core/misc.h" bool Content::FunEmacsCheckAccess() { if( !request.is_item ) { // adding a new item if( !request.CanUseEmacs(*request.dir_table.back()) ) { request.status = WINIX_ERR_PERMISSION_DENIED; return false; } } else // editing an existing item if( !request.CanUseEmacs(request.item) ) { request.status = WINIX_ERR_PERMISSION_DENIED; return false; } return true; } void Content::PostFunEmacsAdd() { request.session->done = Done::added_item; request.session->done_status = db.AddItem(request.item); if( request.session->done_status == WINIX_ERR_OK ) { log << log2 << "Content: added a new item" << logend; request.notify_code |= WINIX_NOTIFY_ITEM_ADD; } } void Content::PostFunEmacsEdit(bool with_url) { request.item.SetDateModifyToNow(); request.session->done = Done::edited_item; request.session->done_status = db.EditItemById(request.item, with_url); if( request.session->done_status == WINIX_ERR_OK ) { TemplatesFunctions::pattern_cacher.UpdatePattern(request.item); log << log2 << "Content: modified an item" << logend; request.notify_code |= WINIX_NOTIFY_ITEM_EDIT; } } bool Content::PostEmacsCheckAbuse(bool adding) { if( !CheckRebus() ) { request.status = WINIX_ERR_INCORRECT_REBUS; request.session->done = (adding)? Done::added_item : Done::edited_item; request.session->done_status = WINIX_ERR_INCORRECT_REBUS; return false; } // !! is tested in createthread once CheckGetPostTimes(); if( request.session->spam_score > 0 ) { request.status = WINIX_ERR_SPAM; request.session->done = (adding)? Done::added_item : Done::edited_item; request.session->done_status = WINIX_ERR_SPAM; log << log1 << "Content: ignoring due to suspected spamming" << logend; return false; } return true; } void Content::PostFunEmacsModifyMountPoint(bool adding) { if( data.mounts.pmount->type == Mount::thread ) { if( adding ) db.EditThreadAddItem(request.dir_table.back()->id, request.item.id); RedirectToLastDir(); } else if( data.mounts.pmount->type == Mount::ticket ) { RedirectToLastDir(); } else { // Mount::cms RedirectTo(request.item); } } void Content::PostFunEmacs() { if( !FunEmacsCheckAccess() ) return; bool adding = !request.is_item; bool edit_with_url = ReadItem(request.item, Item::file); request.session->done_status = WINIX_ERR_OK; if( !PostEmacsCheckAbuse(adding) ) return; if( adding ) { request.is_item = true; request.item.privileges = 0644; // !! tymczasowo, bedzie uzyte umask PostFunEmacsAdd(); } else { PostFunEmacsEdit(edit_with_url); } if( request.session->done_status == WINIX_ERR_OK ) { PostFunEmacsModifyMountPoint(adding); CheckSpecialFile(); } else { log << log1 << "Content: PostFunEmacs: Error: " << request.session->done_status << logend; } } void Content::FunEmacs() { FunEmacsCheckAccess(); }