/* * 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" bool Content::FunRmCheckAccess() { if( !request.is_item ) { if( !request.CanRemove(*request.dir_table.back()) ) { request.status = WINIX_ERR_PERMISSION_DENIED; return false; } } else if( !request.CanRemove(request.item) ) { request.status = WINIX_ERR_PERMISSION_DENIED; return false; } return true; } void Content::FunRmDirRecursive() { // 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 = WINIX_ERR_OK; request.session->done_timer = 2; // redirect to the last valid directory RedirectTo(**(--request.dir_table.end())); } void Content::FunRmDir() { if( request.param_table.empty() ) request.status = WINIX_ERR_PERMISSION_DENIED; else if( request.IsParam("confirm") ) return; else if( request.IsParam("r") ) FunRmDirRecursive(); else request.status = WINIX_ERR_UNKNOWN_PARAM; } void Content::FunRm() { if( !FunRmCheckAccess() ) return; if( !request.is_item ) return FunRmDir(); if( request.param_table.empty() ) { if( db.DelItem( request.item ) ) { request.session->done_status = WINIX_ERR_OK; log << log2 << "Content: deleted item: subject: " << request.item.subject << ", id: " << request.item.id << logend; TemplatesFunctions::pattern_cacher.DeletePattern(request.item); if( data.mounts.pmount->type == Mount::thread ) db.EditThreadRemoveItem(request.item.parent_id); else if( data.mounts.pmount->type == Mount::ticket ) db.EditTicketRemoveItem(request.item.id); } else { request.session->done_status = WINIX_ERR_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 = WINIX_ERR_UNKNOWN_PARAM; } }