/* * 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" void Content::CheckSpecialFile() { static std::string fstab = "fstab"; Item * etc = data.dirs.GetEtcDir(); if( !etc ) return; if( request.item.parent_id != etc->id ) return; if( request.item.url == fstab ) { log << log3 << "Content: reloading mount points" << logend; data.mounts.ReadMounts(request.item.content); } } void Content::PostFunEmacsAdd() { request.session->done = Done::added_item; request.is_item = true; SetUser(request.item); request.item.group_id = -1; request.item.privileges = 0644; // !! tymczasowo, bedzie uzyte umask request.item.parent_id = request.dir_table.back()->id; request.item.type = Item::file; request.item.content_type = 1;// !! tymczasowo formatted text // dates (creation and modification) is set by request.item.Clear() at the beginning if( !request.CanUseEmacs(*request.dir_table.back() ) ) throw Error(Error::permision_denied); request.session->done_status = db.AddItem(request.item); if( request.session->done_status == Error::ok ) { request.notify_code |= CMSLU_NOTIFY_ITEM_ADD; } } void Content::PostFunEmacsEdit(bool with_url) { request.session->done = Done::edited_item; if( !request.CanUseEmacs(request.item) ) throw Error(Error::permision_denied); time_t t = std::time(0); request.item.date_modification = *std::localtime( &t ); request.session->done_status = db.EditItemById(request.item, with_url); if( request.session->done_status == Error::ok ) { TemplatesFunctions::pattern_cacher.UpdatePattern(request.item); request.notify_code |= CMSLU_NOTIFY_ITEM_EDIT; } } void Content::PostFunEmacs() { bool adding = true; if( request.is_item ) adding = false; try { // these old values are ignored (if exists) request.PostVar("url", request.item.url); request.PostVar("subject", request.item.subject); if( request.item.subject.empty() ) request.item.subject = request.dir_table.back()->subject; // !! dodac skladanie tytuly z ostatniego katalogu i liczby okreslajacej ile jest elementow w srodku // !! nie bedzie obciazany modul wyszukujacy bardzo //////// request.PostVar("content", request.item.content); bool with_url = false; std::string * old_url = request.PostVar("old_url"); if( !request.is_item || (old_url && *old_url!=request.item.url) ) with_url = true; PrepareUrl(request.item); if( !CheckRebus() ) { request.status = Error::rebus_bad_answer; SetUser(request.item); return; } if( adding ) PostFunEmacsAdd(); else PostFunEmacsEdit(with_url); CheckSpecialFile(); } catch(const Error & e) { request.session->done_status = e; } if( request.session->done_status == Error::ok ) { request.session->item = request.item; if( data.mounts.CurrentMountType() == Mount::thread ) { if( adding ) db.EditThreadAddItem(request.dir_table.back()->id, request.item.id); // request.session->item = request.item; // request.session->done_timer = 2; RedirectTo(*request.dir_table.back()); } else { request.session->item = request.item; request.session->done_timer = 2; RedirectTo(request.item); } } else { log << log1 << "Content: PostFunEmacs: Error: " << request.session->done_status << logend; } } void Content::FunEmacs() { if( !request.is_item ) { // adding a new item if( !request.CanUseEmacs(*request.dir_table.back()) ) request.status = Error::permision_denied; return; } // editing an existing item if( !request.CanUseEmacs(request.item) ) { request.status = Error::permision_denied; return; } }