/* * This file is a part of Winix * and is not publicly distributed * * Copyright (c) 2008-2010, 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; } // 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 ) ) { 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.status = WINIX_ERR_NO_ITEM; } RedirectTo(*request.dir_table.back()); } else { if( !request.IsParam("confirm") ) request.status = WINIX_ERR_UNKNOWN_PARAM; } }