/* * This file is a part of CMSLU -- Content Management System like Unix * and is not publicly distributed * * Copyright (c) 2008, Tomasz Sowa * All rights reserved. * */ #include "content.h" void Content::PrepareUrl(Item & item) { CorrectUrl(item); if( data.functions.GetFunction(item.url) ) { // the name provided by an user is the same as a name of a function // we add one underscore character at the beginning // names of functions should not begin with an underscore '_' // and we can simply add one '_' at the beginning // and the name will be unique item.url.insert(item.url.begin(), '_'); } } void Content::PostFunEmacsAdd() { request.session->done = Done::added_item; request.is_item = true; request.item.user_id = request.session->puser ? request.session->puser->id : -1; 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; if( !request.HasWriteAccess(*request.dir_table.back() ) ) throw Error(Error::permision_denied); request.session->done_status = db.AddItem(request.item); } void Content::PostFunEmacsEdit(bool with_url) { request.session->done = Done::edited_item; if( !request.HasWriteAccess(request.item) ) throw Error(Error::permision_denied); request.session->done_status = db.EditItemById(request.item, with_url); } void Content::PostFunEmacs() { try { // these old values are ignored (if exists) request.item.url = request.PostVar("url"); request.item.subject = request.PostVar("subject"); request.item.content = request.PostVar("content"); bool with_url = false; if( !request.is_item || request.PostVar("old_url") != request.item.url ) with_url = true; PrepareUrl(request.item); if( request.is_item ) PostFunEmacsEdit(with_url); else PostFunEmacsAdd(); } catch(const Error & e) { request.session->done_status = e; } if( request.session->done_status == Error::ok ) { 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.HasReadWriteAccess(*request.dir_table.back()) ) request.status = Error::permision_denied; return; } // editing an existing item if( !request.HasReadWriteAccess(request.item) ) { request.status = Error::permision_denied; return; } }