125 lines
2.7 KiB
C++
Executable File
125 lines
2.7 KiB
C++
Executable File
/*
|
|
* 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.CanRemove(*request.dir_table.back()) )
|
|
{
|
|
request.status = Error::permission_denied;
|
|
return;
|
|
}
|
|
|
|
if( request.param_table.empty() )
|
|
request.status = Error::permission_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.CanRemove(request.item) )
|
|
{
|
|
request.status = Error::permission_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);
|
|
|
|
if( data.mounts.CurrentMountType() == Mount::thread )
|
|
db.EditThreadRemoveItem(request.item.parent_id);
|
|
}
|
|
else
|
|
{
|
|
request.session->done_status = Error::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;
|
|
}
|
|
}
|
|
|
|
|
|
|