<?php
define ( 'FOLDERS_PHP', 1 );
require_once 'includes/commons.inc.php';
$tpl_folders = new Template ( TPL_DIR . '/tpl_folders.php' );
$tpl_error = new Template ( TPL_DIR . '/tpl_error.php' );
// User directory and URL
$user_root = $UPL['SETTINGS']['userfiles_dir'] . $UPL['USER']['id'] . '/';
$user_url = $UPL['SETTINGS']['userfiles_url'] . $UPL['USER']['id'] . '/';
// Check user's folder
if ( !is_dir ( $user_root ) )
{
$tpl_message->set ( 'message', parse ( $lang_folders['folder_no_exists'], '{username}', $UPL['USER']['name'] ) );
$tpl_uploader->setr ( 'content', $tpl_message );
exit ( $tpl_uploader->display ( ) );
}
// get user folders
$user_contents = get_contents ( $user_root );
$user_files =& $user_contents['files'];
$user_folders =& $user_contents['dirs'];
$user_folders_count = count ( $user_folders );
for ( $i = 0; $i < $user_folders_count; $i++ )
{
$user_folders[$i]['description'] = is_file ( $user_root . $user_folders[$i]['path'] . '/.description' ) ? implode ( '', file ( $user_root . $user_folders[$i]['path'] . '/.description' ) ) : '';
$user_folders[$i]['is_public'] = is_file ( $user_root . $user_folders[$i]['path'] . '/.public' );
//$user_folders[$i]['is_gallery'] = is_file ( $user_root . $user_folders[$i]['path'] . '/.gallery' );
$user_folders[$i]['is_selected'] = false;
$user_folders[$i]['folder_url'] = 'myfiles.php?folder=' . path_encode ( $user_folders[$i]['path'] );
$user_folders[$i]['edit_url'] = 'folders.php?action=edit&folder=' . path_encode ( $user_folders[$i]['path'] );
$user_folders[$i]['path'] = path_encode ( $user_folders[$i]['path'] );
$user_folders[$i]['size'] = get_size ( $user_folders[$i]['size'], 'B', 1 );
}
// main folder stats
$mf_size = 0;
$mf_files =& $user_contents['files']['<MAIN_FOLDER>'];
for ( $i = 0; $i < count ( $mf_files ); $i++ ) $mf_size += $mf_files[$i]['size'];
$main_folder = array
(
'folder_url' => 'myfiles.php',
'edit_url' => 'folders.php?action=edit',
'files' => count ( $user_contents['files']['<MAIN_FOLDER>'] ),
'size' => get_size ( $mf_size, 'B', 1 )
);
// to template
$tpl_folders->set ( 'action', $action );
$tpl_folders->set ( 'user_folders', $user_folders );
// wut doing?
switch ( $action )
{
case 'setpublic':
{
$public = gpc ( 'public', 'G', '' );
for ( $i = 0; $i < $user_folders_count; $i++ )
{
if ( $public == 'yes' )
{
@fclose ( fopen ( $user_root . path_decode ( $user_folders[$i]['path'] ) . '/.public', 'w' ) );
}
elseif ( $public == 'no' )
{
@unlink ( $user_root . path_decode ( $user_folders[$i]['path'] ) . '/.public' );
}
}
clear_contents_cache ( $user_root );
go_to ( 'folders.php' );
}
break;
case 'edit':
{
if ( $task == 'edit' )
{
// get folder info
$folder_path = path_decode ( gpc ( 'folder_path', 'P', '' ) );
$folder_name = gpc ( 'folder_name', 'P', '' );
$folder_delete = (bool)gpc ( 'folder_delete', 'P', 0 );
$folder_public = (bool)gpc ( 'folder_public', 'P', 0 );
$folder_description = trim ( gpc ( 'folder_description', 'P', '' ) );
// check it
if ( strstr ( $folder_path, '../' ) || strstr ( $folder_path, './' ) || !is_dir ( $user_root . '/' . $folder_path ) )
{
exit ( SECURITY_ERROR );
}
// delete folder
if ( $folder_delete )
{
// delete folder
if ( $folder_path != '' && is_dir ( $user_root . '/' . $folder_path ) )
{
delete_dir ( $user_root . '/' . $folder_path );
clear_contents_cache ( $user_root );
}
return go_to ( 'folders.php' );
}
// check for folder change
if ( !$folder_delete && $folder_path != '' && basename ( $folder_path ) != $folder_name )
{
// change name
$new_folder_path = dir_name ( $folder_path ) . '/' . $folder_name;
// check for errors
if ( $folder_name == '' ) $error = $lang_folders['folder_no_name'];
elseif ( strlen ( $folder_name ) > $UPL['CONFIGS']['FOLDER_MAX_LEN'] ) $error = parse ( $lang_folders['folder_long_name'], '{length}', $UPL['CONFIGS']['FOLDER_MAX_LEN'] );
elseif ( strlen ( $folder_name ) < $UPL['CONFIGS']['FOLDER_MIN_LEN'] ) $error = parse ( $lang_folders['folder_short_name'], '{length}', $UPL['CONFIGS']['FOLDER_MIN_LEN'] );
elseif ( count ( $UPL['CONFIGS']['RESERVED_FOLDERNAMES'] ) && in_array ( strtolower ( $folder_name ), $UPL['CONFIGS']['RESERVED_FOLDERNAMES'] ) ) $error = parse ( $lang_folders['folder_name_reserved'], '{folder}', $folder_name );
elseif ( preg_match ( '#[^a-z0-9_\s]#i', $folder_name ) ) $error = $lang_folders['folder_bad_char'];
elseif ( file_exists ( $user_root . '/' . $new_folder_path ) ) $error = $lang_folders['folder_exists'];
elseif ( !@rename ( $user_root . '/' . $folder_path, $user_root . '/' . $new_folder_path ) ) $error = 'Internal error, rename() failed.';
else $error = 'none';
if ( $error != 'none' )
{
// show error messages
$tpl_error->set ( 'error', $error );
$tpl_folders->set ( 'error', $tpl_error );
$tpl_folders->set ( 'folder_path', rawurlencode ( $folder_path ) );
$tpl_folders->set ( 'folder_name', htmlentities ( $folder_name ) );
$tpl_folders->set ( 'folder_public', is_file ( $user_root . $folder_path . '/.public' ) );
$tpl_folders->set ( 'folder_description', is_file ( $user_root . $folder_path . '/.description' ) ? htmlentities ( implode ( '', file ( $user_root . $folder_path . '/.description' ) ) ) : '' );
$tpl_uploader->setr ( 'content', $tpl_folders );
exit ( $tpl_uploader->display ( ) );
}
$folder_path = $new_folder_path;
}
// set folder permission: public/private
if ( $folder_public && !is_file ( $user_root . $folder_path . '/.public' ) )
{
// set
fclose ( fopen ( $user_root . $folder_path . '/.public', 'w' ) );
}
elseif ( !$folder_public && is_file ( $user_root . $folder_path . '/.public' ) )
{
// unset
unlink ( $user_root . $folder_path . '/.public' );
}
// set folder description
$folder_description = substr ( $folder_description, 0, 200 );
//exit ( $folder_description );
if ( $folder_description == '' )
{
@unlink ( $user_root . $folder_path . '/.description' );
}
else
{
$fp = fopen ( $user_root . $folder_path . '/.description', 'w' );
if ( $fp )
{
fwrite ( $fp, $folder_description );
fclose ( $fp );
}
}
clear_contents_cache ( $user_root );
// go back
go_to ( 'folders.php' );
}
else
{
// get folder name from the URL
$folder = trim ( gpc ( 'folder', 'G', '' ) );
// check it
if ( $folder == '' || strstr ( $folder, '../' ) || strstr ( $folder, './' ) || !is_dir ( $user_root . '/' . $folder ) )
{
$tpl_message->set ( 'message', parse ( $lang_folders['folder_invalid'], '{folder}', $folder ) );
$tpl_uploader->setr ( 'content', $tpl_message );
exit ( $tpl_uploader->display ( ) );
}
$tpl_folders->set ( 'folder_path', rawurlencode ( $folder ) );
$tpl_folders->set ( 'folder_name', htmlentities ( basename ( $folder ) ) );
$tpl_folders->set ( 'folder_public', is_file ( $user_root . $folder . '/.public' ) );
$tpl_folders->set ( 'folder_description', is_file ( $user_root . $folder . '/.description' ) ? htmlentities ( implode ( '', file ( $user_root . $folder . '/.description' ) ) ) : '' );
$tpl_uploader->setr ( 'content', $tpl_folders );
$tpl_uploader->display ( );
//print_r ( $public_folders );
//print path_encode ( $folder );
}
}
break;
case 'create':
{
// init
$user_folders =& $user_contents['dirs'];
$folder_name = trim ( gpc ( 'new_folder_name', 'P', '' ) );
$folder_public = (bool)gpc ( 'folder_public', 'P', 0 );
$folder_description = trim ( gpc ( 'folder_description', 'P', '' ) );
// permission to create?
$create_perm = $UPL['USER']['fl_create_folder'];
$create_max = $UPL['USER']['fl_max_folders'];
if ( !$create_perm || ( ( $create_max > 0 ) && count ( $user_folders ) > $create_max ) )
{
if ( !$create_perm ) $tpl_message->set ( 'message', $lang_folders['folder_no_perm_create'] );
else $tpl_message->set ( 'message', $lang_folders['folder_limit'] );
$tpl_message->set ( 'back_url', 'folders.php' );
$tpl_uploader->setr ( 'content', $tpl_message );
return exit ( $tpl_uploader->display ( ) );
}
// do create
if ( $task == 'create' )
{
$create_in = path_decode ( gpc ( 'create_in', 'P', '' ) );
if ( strstr ( $create_in, '../' ) ) exit ( SECURITY_ERROR );
// select the folder
for ( $i = 0; $i < $user_folders_count; $i++ )
{
$user_folders[$i]['is_selected'] = ( path_decode ( $user_folders[$i]['path'] ) == $create_in );
}
// create check
if ( $folder_name == '' ) $error = $lang_folders['folder_no_name'];
elseif ( preg_match ( '#[^a-z0-9_\s]|\s{2,}#i', $folder_name ) ) $error = $lang_folders['folder_bad_char'];
elseif ( strlen ( $folder_name ) > $UPL['CONFIGS']['FOLDER_MAX_LEN'] ) $error = parse ( $lang_folders['folder_long_name'], '{length}', $UPL['CONFIGS']['FOLDER_MAX_LEN'] );
elseif ( strlen ( $folder_name ) < $UPL['CONFIGS']['FOLDER_MIN_LEN'] ) $error = parse ( $lang_folders['folder_short_name'], '{length}', $UPL['CONFIGS']['FOLDER_MIN_LEN'] );
elseif ( count ( $UPL['CONFIGS']['RESERVED_FOLDERNAMES'] ) && in_array ( strtolower ( $folder_name ), $UPL['CONFIGS']['RESERVED_FOLDERNAMES'] ) ) $error = parse ( $lang_folders['folder_name_reserved'], '{folder}', $folder_name );
elseif ( file_exists ( $user_root . $create_in . '/' . $folder_name ) ) $error = $lang_folders['folder_exists'];
else $error = 'none';
// create
if ( $error == 'none' )
{
if ( !make_dir ( $user_root . $create_in . '/' . $folder_name, $UPL['CONFIGS']['CHMOD_TO'] ) ) exit ( 'Unable to create folder. Userfiles folder probably not chmodded correctly.' );
// set folder as private/public
if ( $folder_public )
{
fclose ( fopen ( $user_root . $create_in . '/' . $folder_name . '/.public', 'w' ) );
}
// save description
if ( $folder_description != '' )
{
$folder_description = substr ( $folder_description, 0, 200 );
$fp = fopen ( $user_root . $create_in . '/' . $folder_name . '/.description', 'w' );
if ( $fp )
{
fwrite ( $fp, $folder_description );
fclose ( $fp );
}
}
clear_contents_cache ( $user_root );
header ( 'Location: folders.php' );
}
else
{
$tpl_folders->set ( 'user_folders', $user_folders );
$tpl_folders->set ( 'folder_name', htmlentities ( $folder_name ) );
$tpl_error->set ( 'error', $error );
$tpl_folders->set ( 'error', $tpl_error );
$tpl_uploader->setr ( 'content', $tpl_folders );
$tpl_uploader->display ( );
}
}
else
{
$tpl_folders->set ( 'folder_name', '' );
$tpl_uploader->setr ( 'content', $tpl_folders );
$tpl_uploader->display ( );
}
}
break;
case 'cgallery':
{
if ( $task == 'cgallery' )
{
$create_in = path_decode ( gpc ( 'create_in', 'P', '' ) );
$error = 'none';
if ( $create_in == '' )
{
$error = 'You did not select a folder.';
}
elseif ( !isset ( $user_files[$create_in] ) )
{
$error = 'Invalid folder';
}
else
{
$files = $user_files[$create_in];
if ( !count ( $files ) )
{
$error = 'The folder "' . basename ( $create_in ) . '" you have chosen is empty. Upload or copy images into this folder first.';
}
}
if ( $error == 'none' )
{
// create
}
else
{
// show error
$tpl_error->set ( 'error', $error );
$tpl_folders->set ( 'error', $tpl_error );
$tpl_uploader->setr ( 'content', $tpl_folders );
$tpl_uploader->display ( );
}
}
else
{
$tpl_uploader->setr ( 'content', $tpl_folders );
$tpl_uploader->display ( );
}
}
break;
default:
{
$tpl_folders->set ( 'main_folder', $main_folder );
$tpl_uploader->setr ( 'content', $tpl_folders );
$tpl_uploader->set ( 'page_title', $lang_titles['mf_fld_title2'] );
$tpl_uploader->display ( );
}
}
?>