/* * 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 "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 = Error::permission_denied; return false; } } else // editing an existing item if( !request.CanUseEmacs(request.item) ) { request.status = Error::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 == Error::ok ) { log << log2 << "Content: added a new item" << logend; request.notify_code |= CMSLU_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 == Error::ok ) { TemplatesFunctions::pattern_cacher.UpdatePattern(request.item); log << log2 << "Content: modified an item" << logend; request.notify_code |= CMSLU_NOTIFY_ITEM_EDIT; } } bool Content::PostEmacsCheckAbuse(bool adding) { if( !CheckRebus() ) { request.status = Error::incorrect_rebus; request.session->done = (adding)? Done::added_item : Done::edited_item; request.session->done_status = Error::incorrect_rebus; return false; } // !! is tested in createthread once CheckGetPostTimes(); if( request.session->spam_score > 0 ) { request.status = Error::spam; request.session->done = (adding)? Done::added_item : Done::edited_item; request.session->done_status = Error::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 = Error::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 == Error::ok ) { PostFunEmacsModifyMountPoint(adding); CheckSpecialFile(); } else { log << log1 << "Content: PostFunEmacs: Error: " << request.session->done_status << logend; } } void Content::FunEmacs() { FunEmacsCheckAccess(); }