133 lines
2.8 KiB
C++
Executable File
133 lines
2.8 KiB
C++
Executable File
/*
|
|
* 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::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;
|
|
}
|
|
}
|
|
|
|
|
|
|