@ -26,72 +26,99 @@ return true;
void Content : : AddItem ( )
{
if ( ! request . session - > is_logged )
return ;
try
{
request . session - > done = Done : : added_item ;
// request.item_table.resize(1);
// Item & item = request.item_table[0];
request . item . subject = request . PostVar ( " subject " ) ;
request . item . content = request . PostVar ( " content " ) ;
request . item . parent_id = data . dir . GetDirId ( request . PostVar ( " directory " ) ) ;
request . item . type = Item : : file ;
if ( ! request . session - > puser | | ! request . session - > puser - > super_user )
// !! chwilowo tylko super user moze
throw Error ( Error : : permision_denied ) ;
request . item . user_id = data . users . GetUserId ( request . PostVar ( " user " ) ) ;
request . item . group_id = data . groups . GetGroupId ( request . PostVar ( " group " ) ) ;
request . item . privileges = strtol ( request . PostVar ( " privileges " ) . c_str ( ) , 0 , 8 ) ;
request . item . subject = request . PostVar ( " subject " ) ;
request . item . content = request . PostVar ( " content " ) ;
request . item . parent_id = data . dirs . GetDirId ( request . PostVar ( " directory " ) ) ;
request . item . type = Item : : file ;
PrepareUrlSubject ( request . item ) ;
request . session - > done_status = db . AddItem ( request . item ) ;
request . session - > done_timer = 1 ;
request . session - > done_timer = 2 ;
request . session - > item = request . item ;
// if( request.session->done_status != Request::added_item )
//request.item_table.resize(1);
//request.item_table[0] = request.item;
RedirectTo ( request . item ) ;
}
catch ( const Error & e )
{
log < < log1 < < " Content: AddItem: Error: " < < e < < logend ;
request . session - > done_status = e ;
request . session - > done_timer = 1 ;
}
}
void Content : : EditItem( )
void Content : : AssertPrivileges( Item & old_item , Item & new_item )
{
if ( ! request . session - > is_logged )
return ;
if ( ! request . CanChangeUser ( old_item , new_item . user_id ) )
throw Error ( Error : : cant_change_user ) ;
if ( ! request . CanChangeGroup ( old_item , new_item . group_id ) )
throw Error ( Error : : cant_change_group ) ;
if ( ! request . CanChangePrivileges ( old_item , new_item . privileges ) )
throw Error ( Error : : cant_change_privileges ) ;
}
void Content : : EditItem ( )
{
try
{
request . session - > done = Done : : edited_item ;
// request.item_table.resize(1);
// Item & item = request.item_table[0];
request . item . subject = request . PostVar ( " subject " ) ;
request . item . content = request . PostVar ( " content " ) ;
request . item . id = atol ( request . PostVar ( " id " ) . c_str ( ) ) ;
request . item . id = atol ( request . PostVar ( " id " ) . c_str ( ) ) ;
request . item . user_id = data . users . GetUserId ( request . PostVar ( " user " ) ) ;
request . item . group_id = data . groups . GetGroupId ( request . PostVar ( " group " ) ) ;
request . item . privileges = strtol ( request . PostVar ( " privileges " ) . c_str ( ) , 0 , 8 ) ;
request . item . subject = request . PostVar ( " subject " ) ;
request . item . content = request . PostVar ( " content " ) ;
bool with_subject = false ;
if ( request . PostVar ( " old_subject " ) ! = request . item . subject )
with_subject = true ;
request . item . parent_id = data . dir . GetDirId ( request . PostVar ( " directory " ) ) ;
request . item . parent_id = data . dir s . GetDirId ( request . PostVar ( " directory " ) ) ; // !! moze nie byc takiego, zglosic komunikat
request . item . type = Item : : file ;
PrepareUrlSubject ( request . item ) ;
request . session - > done_status = db . EditItem ( request . item , with_subject ) ;
request . session - > done_timer = 1 ;
Item old_item ;
db . GetPriv ( old_item , request . item . id ) ;
AssertPrivileges ( old_item , request . item ) ;
if ( ! request . HasWriteAccess ( old_item ) )
throw Error ( Error : : permision_denied ) ;
request . session - > done_status = db . EditItemById ( request . item , with_subject ) ;
}
catch ( const Error & e )
{
log < < log1 < < " Content: EditItem: Error: " < < e < < logend ;
request . session - > done_status = e ;
}
request . session - > item = request . item ;
request . session - > done_timer = 2 ;
RedirectTo ( request . item ) ;
}
void Content : : LogUser ( )
{
try
@ -102,9 +129,17 @@ void Content::LogUser()
if ( db . CheckUser ( login , pass , user_id ) )
{
request . session - > puser = data . users . GetUser ( user_id ) ;
if ( ! request . session - > puser )
{
log < < log1 < < " Content: user: " < < login < < " is in the database but is not in data.users " < < logend ;
return ;
}
request . session - > is_logged = true ;
request . session - > user_id = user_id ;
request . session - > user = login ;
log < < log2 < < " User " < < login < < " (id: " < < user_id < < " ) logged " < < logend ;
}
@ -125,7 +160,7 @@ void Content::MakeDirectoryStructure()
{
Item * pdir ;
if ( ! data . dir . GetDir ( request . get_table [ get_index ] , parent , & pdir ) )
if ( ! data . dir s . GetDir ( request . get_table [ get_index ] , parent , & pdir ) )
break ;
parent = pdir - > id ;
@ -134,7 +169,7 @@ void Content::MakeDirectoryStructure()
// parent - last directory (or -1 if none)
request . dir = parent ;
data . dir . GetDirChilds ( parent , request . dir_table ) ;
data . dir s . GetDirChilds ( parent , request . dir_table ) ;
}
@ -190,6 +225,16 @@ bool Content::MakeGetCheckDir()
if ( get_index = = request . get_table . size ( ) )
{
// request was for a directory
////
if ( ! request . cur_dir_table . empty ( ) & & ! request . HasReadAccess ( request . cur_dir_table . back ( ) ) )
{
request . result = Request : : err_per_denied ;
return true ;
}
////
db . GetItems ( request . item_table , item ) ;
@ -198,7 +243,7 @@ bool Content::MakeGetCheckDir()
long default_id = - 1 ;
if ( request . cur_dir_table . empty ( ) )
{
default_id = data . dir . root . default_item ;
default_id = data . dir s . root . default_item ;
}
else
{
@ -277,9 +322,15 @@ void Content::MakeGet()
// err404 at the end
return ;
////
if ( request . HasReadAccess ( request . item_table [ 0 ] ) ) // !! tymczasowo dla 0 tylko
request . result = Request : : show_item ;
else
request . result = Request : : err_per_denied ;
////
if ( get_index = = request . get_table . size ( ) )
{
request . result = Request : : show_item ;
return ;
}
@ -288,6 +339,21 @@ void Content::MakeGet()
}
void Content : : MakeAddItem ( )
{
if ( ! request . session - > puser )
{
// not logged
request . item . Clear ( ) ;
}
else
{
request . item . user_id = request . session - > puser - > id ;
}
}
void Content : : MakeEditItem ( )
{
if ( ! request . item_table . empty ( ) )
@ -328,10 +394,7 @@ void Content::MakeShowItemById()
request . result = Request : : err404 ;
else
{
request . result = Request : : redirect ;
std : : string path ;
data . dir . MakePath ( request . item_table [ 0 ] . parent_id , path ) ;
request . str = data . base_url + path + request . item_table [ 0 ] . url ;
RedirectTo ( request . item_table [ 0 ] ) ;
}
}
}
@ -340,15 +403,24 @@ void Content::MakeShowItemById()
void Content : : MakeDelItem ( )
{
if ( ! request . session - > is_logged )
return ;
if ( request . item_table . empty ( ) )
{
request . result = Request : : err404 ;
return ;
}
if ( ! request . session - > puser | | ! request . session - > puser - > super_user )
// !! chwilowo tylko super user moze
{
request . result = Request : : err_per_denied ;
request . CopyFirstItem ( ) ;
return ;
}
if ( get_index = = request . get_table . size ( ) )
{
@ -389,16 +461,16 @@ void Content::MakeLogout()
{
if ( request . session - > is_logged )
{
log < < log2 < < " User " < < request . session - > user < < " ( id: " < < request . session - > user_id < < " ) logged out" < < logend ;
log < < log2 < < " User id: " < < request . session - > user_id < < " logged out" < < logend ;
request . session - > is_logged = false ;
request . session - > user . clear ( ) ;
request . session - > user_id = 0 ;
request . session - > puser = 0 ;
}
request . result = Request : : redirect ;
std : : string path ;
data . dir . MakePath ( request . dir , path ) ;
data . dir s . MakePath ( request . dir , path ) ;
request . str = data . base_url + path ;
if ( ! request . item_table . empty ( ) )
@ -412,6 +484,11 @@ void Content::MakeLogout()
void Content : : MakeStandardFunction ( )
{
if ( request . result = = Request : : add_item )
{
MakeAddItem ( ) ;
}
else
if ( request . result = = Request : : edit_item )
{
MakeEditItem ( ) ;
@ -455,6 +532,10 @@ void Content::MakePost()
void Content : : Make ( )
{
MakePost ( ) ;
if ( request . result = = Request : : redirect )
return ;
MakeGet ( ) ;
MakeStandardFunction ( ) ;
@ -467,6 +548,14 @@ void Content::Make()
void Content : : RedirectTo ( const Item & item )
{
std : : string path ;
request . result = Request : : redirect ;
data . dirs . MakePath ( item . parent_id , path ) ;
request . str = data . base_url + path + item . url ;
}