/* * 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" void Content::FunRmDirRecursive() { data.dirs.MakePath(request.dir_table.back()->id, request.session->dir_old); // this method deletes recursively all directories data.dirs.DeleteDir(request.dir_table.back()->id); request.dir_table.erase(--request.dir_table.end()); if( request.dir_table.empty() ) { // we have deleted the root directory data.dirs.CheckRootDir(); Item * proot = data.dirs.GetRootDir(); if( proot ) request.dir_table.push_back(proot); else // there is no a root dir // CheckRootDir() didn't add the root dir (probably problem with the database) // make sure that Content::Make() will check that the dir_table is empty and returns return; } request.session->done = Done::deleted_dir; request.session->done_status = Error::ok; request.session->done_timer = 2; // redirect to the last valid directory RedirectTo(**(--request.dir_table.end())); } void Content::FunRmDir() { if( request.dir_table.size() == 1 ) { // rm for the root dir // only the superuser can do it if( !request.session->puser || !request.session->puser->super_user ) { request.status = Error::permision_denied; return; } } else { Item * last_but_one_dir = *(--(--request.dir_table.end())); if( !request.HasWriteAccess(*last_but_one_dir) ) { request.status = Error::permision_denied; return; } } if( request.param_table.empty() ) request.status = Error::permision_denied; else if( request.IsParam("confirm") ) return; else if( request.IsParam("r") ) FunRmDirRecursive(); else request.status = Error::unknown_param; } void Content::FunRm() { if( !request.is_item ) { FunRmDir(); return; } if( !request.HasWriteAccess(*request.dir_table.back()) ) { request.status = Error::permision_denied; return; } if( request.param_table.empty() ) { // we'll put some information about the deleted item (on the next page) request.session->item = request.item; // !! zmienic interfejs dla db.DelItem if( db.DelItem( request.item ) ) { request.session->done_status = Error::ok; log << log2 << "Content: deleted item: subject: " << request.item.subject << ", id: " << request.item.id << logend; TemplatesFunctions::pattern_cacher.DeletePattern(request.item); } else { request.session->done_status = Error::db_no_item; } request.session->done = Done::deleted_item; RedirectTo(*request.dir_table.back()); request.session->done_timer = 2; } else { if( !request.IsParam("confirm") ) //request.result = Request::err404; request.status = Error::unknown_param; } }