You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

216 lines
7.4 KiB

<?php
if(!defined('IN_INDEX')) exit;
$media_dir = 'media';
$file_dir = 'files';
$template->assign('media_dir', $media_dir);
$template->assign('file_dir', $file_dir);
$directory = isset($_REQUEST['directory']) && $_REQUEST['directory']==$file_dir ? $file_dir : $media_dir;
$template->assign('directory', $directory);
$path = BASE_PATH.'static/'.$directory.'/';
if(isset($_SESSION[$settings['session_prefix'].'user_id']))
{
// delete:
if(isset($_REQUEST['delete']))
{
if(isset($_REQUEST['confirmed']))
{
@chmod($path.$_REQUEST['delete'], 0777);
if(!@unlink($path.$_REQUEST['delete'])) $errors[] = Localization::$lang['delete_file_error'];
header('Location: '.BASE_URL.ADMIN_DIR.'index.php?mode=filemanager&directory='.$directory);
exit;
}
else
{
$template->assign('file', htmlspecialchars($_REQUEST['delete']));
$action = 'delete';
}
}
if(isset($_POST['upload_file_submit']))
{
$file_name = isset($_POST['file_name']) ? trim($_POST['file_name']) : '';
$upload_mode = isset($_POST['upload_mode']) && $_POST['upload_mode']==2 ? 2 : 1;
$compression = isset($_POST['compression']) ? intval($_POST['compression']) : $settings['compression'];
$resize_xy = isset($_POST['resize_xy']) && $_POST['resize_xy']=='x' ? 'x' : 'y';
$resize = isset($_POST['resize']) ? intval($_POST['resize']) : $settings['resize'];
$thumbnail_compression = isset($_POST['thumbnail_compression']) ? intval($_POST['thumbnail_compression']) : $settings['thumbnail_compression'];
$thumbnail_resize_xy = isset($_POST['thumbnail_resize_xy']) && $_POST['thumbnail_resize_xy']=='x' ? 'x' : 'y';
$thumbnail_resize = isset($_POST['thumbnail_resize']) ? intval($_POST['thumbnail_resize']) : $settings['thumbnail_resize'];
#if(empty($_FILES['probe']) || $_FILES['probe']['size'] == 0 || $_FILES['probe']['error']) $errors[] = Localization::$lang['error_no_file'];
if($compression < 1 || $compression > 100 || $thumbnail_compression < 1 || $thumbnail_compression > 100) $errors[] = 'invalid_compression_value';
if(empty($errors))
{
// filename already exists?
if($file_name=='') $file_name = basename($_FILES['file']['name']);
if(file_exists($path.$file_name) && empty($_POST['overwrite_file']))
{
#$file_name = '';
$errors[] = 'upload_file_exists';
}
}
if(empty($errors))
{
$upload = new FileUpload($_FILES['file'], $path);
if($upload_mode==2 && $upload->isImage)
{
// its an image and it should be manipulated
//$upload = new FileUpload($_FILES['file'], BASE_PATH.$directory.'/');
if($resize_xy=='x')
{
$x = $resize;
$y = intval($upload->imageHeight*$x/$upload->imageWidth);
}
else
{
$y = $resize;
$x = intval($upload->imageWidth*$y/$upload->imageHeight);
}
if(!$upload->saveModifiedImage($x, $y, $compression, $file_name))
{
$errors[] = 'upload_error';
}
}
else
{
#move_uploaded_file($_FILES['file']['tmp_name'], BASE_PATH.$directory.'/'.$file_name); // or $errors[] = 'upload_error';
$upload->saveFile($file_name);
}
// create thumbnail:
if(isset($_POST['create_thumbnail']) && $upload->isImage)
{
if($thumbnail_resize_xy=='x')
{
$thumbnail_x = $thumbnail_resize;
$thumbnail_y = intval($upload->imageHeight*$thumbnail_x/$upload->imageWidth);
}
else
{
$thumbnail_y = $thumbnail_resize;
$thumbnail_x = intval($upload->imageWidth*$thumbnail_y/$upload->imageHeight);
}
// set thumbnail name:
if($settings['thumbnail_prefix'])
{
$thumbnail_filename = $settings['thumbnail_prefix'].$file_name;
}
elseif($settings['thumbnail_postfix'])
{
$ext_pos = strrpos($file_name, '.');
$name = substr($file_name, 0, $ext_pos);
$ext = substr($file_name, $ext_pos);
$thumbnail_filename = $name.$settings['thumbnail_postfix'].$ext;
}
if(!$upload->saveModifiedImage($thumbnail_x, $thumbnail_y, $thumbnail_compression, $thumbnail_filename))
{
// error...
}
}
}
if(empty($errors))
{
@chmod($path.$file_name, 0644);
// save upload defaults:
Database::$content->beginTransaction();
$dbr = Database::$content->prepare("UPDATE ".Database::$db_settings['settings_table']." SET value=:value WHERE name=:name");
$dbr->bindValue(':name', 'resize', PDO::PARAM_STR);
$dbr->bindParam(':value', $resize, PDO::PARAM_STR);
$dbr->execute();
$dbr->bindValue(':name', 'resize_xy', PDO::PARAM_STR);
$dbr->bindParam(':value', $resize_xy, PDO::PARAM_STR);
$dbr->execute();
$dbr->bindValue(':name', 'compression', PDO::PARAM_STR);
$dbr->bindParam(':value', $compression, PDO::PARAM_STR);
$dbr->execute();
$dbr->bindValue(':name', 'thumbnail_resize', PDO::PARAM_STR);
$dbr->bindParam(':value', $thumbnail_resize, PDO::PARAM_STR);
$dbr->execute();
$dbr->bindValue(':name', 'thumbnail_resize_xy', PDO::PARAM_STR);
$dbr->bindParam(':value', $thumbnail_resize_xy, PDO::PARAM_STR);
$dbr->execute();
$dbr->bindValue(':name', 'thumbnail_compression', PDO::PARAM_STR);
$dbr->bindParam(':value', $thumbnail_compression, PDO::PARAM_STR);
$dbr->execute();
Database::$content->commit();
header('Location: '.BASE_URL.ADMIN_DIR.'index.php?mode=filemanager&directory='.$directory.'&uploaded=true');
exit();
}
else
{
$template->assign('errors', $errors);
$action='upload';
}
}
if(isset($_REQUEST['action'])) $action = $_REQUEST['action'];
if(empty($action)) $action = 'main';
switch($action)
{
case 'main':
$fp=opendir($path);
while($file = readdir($fp))
{
#if($file!='.' && $file!='..')
if(is_file($path.$file))
{
$file_array[] = $file;
}
}
closedir($fp);
if(isset($file_array))
{
natcasesort($file_array);
if(function_exists('mime_content_type'))
{
$mime_content_type=true;
$template->assign('mime_content_type', $mime_content_type);
}
$i=0;
foreach($file_array as $file)
{
$files[$i]['filename'] = htmlspecialchars($file);
$files[$i]['size'] = number_format(filesize($path.$file)/1000,1,",",".");
$files[$i]['last_modified'] = strftime(Localization::$lang['time_format'], filectime($path.$file));
if(isset($mime_content_type))
{
$files[$i]['mime_content_type'] = mime_content_type($path.$file);
}
++$i;
}
if(isset($files))
{
$template->assign('files', $files);
}
}
if(isset($_GET['uploaded'])) $template->assign('uploaded', true);
$template->assign('subtitle', Localization::$lang['filemanager']);
$template->assign('subtemplate', 'filemanager.inc.tpl');
break;
case 'upload';
$template->assign('subtitle', Localization::$lang['upload_file']);
$template->assign('subtemplate', 'filemanager_upload.inc.tpl');
break;
case 'delete':
$template->assign('subtitle', Localization::$lang['delete_file']);
$template->assign('subtemplate', 'filemanager_delete.inc.tpl');
break;
}
}