Skip to content

Instantly share code, notes, and snippets.

@Daudzis
Created September 9, 2015 10:48
Show Gist options
  • Save Daudzis/99c3b5d442af05a77af8 to your computer and use it in GitHub Desktop.
Save Daudzis/99c3b5d442af05a77af8 to your computer and use it in GitHub Desktop.
<?php
/**
* @package Mambo
* @subpackage Media Manager
* @author Mambo Foundation Inc see README.php
* @copyright Mambo Foundation Inc.
* See COPYRIGHT.php for copyright notices and details.
* @license GNU/GPL Version 2, see LICENSE.php
* Mambo is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; version 2 of the License.
*/
/** ensure this file is being included by a parent file */
defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );
// ensure user has access to this function
if (!($acl->acl_check( 'administration', 'edit', 'users', $my->usertype, 'components', 'all' )
| $acl->acl_check( 'administration', 'edit', 'users', $my->usertype, 'components', 'com_media' ))) {
mosRedirect( 'index2.php', T_('You are not authorized to view this resource.') );
}
require_once( $mainframe->getPath( 'admin_html' ) );
//require_once( $mainframe->getPath( 'class' ) );
$cid = mosGetParam( $_POST, 'cid', array(0) );
$foldername = mosGetParam($_POST, 'foldername', '');
$listdir = mosGetParam($_REQUEST, 'listdir', '');
$dirPath = mosGetParam($_POST, 'dirPath', '');
$task = mosGetParam($_REQUEST, 'task', '');
$delFile = mosGetParam($_REQUEST, 'delFile', '');
$delFolder = mosGetParam($_REQUEST, 'delFolder', '');
if (!is_array( $cid )) {
$cid = array(0);
}
if (is_int(strpos ($listdir, "..")) && $listdir<>'') {
mosRedirect( "index2.php?option=com_media&listdir=".$_POST['dirPath'], T_("NO HACKING PLEASE") );
}
switch ($task) {
case "upload":
upload();
showMedia($dirPath);
break;
case "newdir":
if (ini_get('safe_mode')=="On") {
mosRedirect( "index2.php?option=com_media&listdir=".$_POST['dirPath'], T_("Directory creation not allowed while running in SAFE MODE as this can cause problems.") );
}
else {
create_folder($foldername,$dirPath);
}
showMedia($dirPath);
break;
case "delete":
delete_file($delFile,$listdir);
showMedia($listdir);
break;
case "deletefolder":
delete_folder($delFolder,$listdir);
showMedia($listdir);
break;
case "list":
listImages($listdir);
break;
default:
showMedia($listdir);
break;
}
function delete_file($delfile, $listdir)
{
global $mosConfig_absolute_path;
$del_image = $mosConfig_absolute_path."/images/stories".$listdir."/".$delfile;
unlink($del_image);
}
function create_folder($folder_name,$dirPath)
{
global $mosConfig_absolute_path;
if(strlen($folder_name) >0)
{
if (eregi("[^0-9a-zA-Z_]", $folder_name)) {
mosRedirect( "index2.php?option=com_media&listdir=".$_POST['dirPath'], T_("Directory name must only contain alphanumeric characters and no spaces please.") );
}
$folder = $mosConfig_absolute_path."/images/stories".$dirPath."/".$folder_name;
if(!is_dir($folder) && !is_file($folder))
{
mosMakePath($folder);
$fp = fopen($folder."/index.html", "w" );
fwrite( $fp, "<html>\n<body bgcolor=\"#FFFFFF\">\n</body>\n</html>" );
fclose( $fp );
mosChmod($folder."/index.html");
$refresh_dirs = true;
}
}
}
function delete_folder($delFolder,$listdir)
{
global $mosConfig_absolute_path;
$del_html = $mosConfig_absolute_path.'/images/stories'.$listdir.$delFolder.'/index.html';
$del_folder = $mosConfig_absolute_path.'/images/stories'.$listdir.$delFolder;
$entry_count = 0;
$dir = opendir( $del_folder );
while ( false !== ($entry = readdir( $dir )))
{
if( $entry != "." & $entry != ".." & strtolower($entry) != "index.html" )
$entry_count++;
}
closedir( $dir );
if( $entry_count < 1 )
{
@unlink($del_html);
rmdir($del_folder);
} else {
echo '<font color="red">'.T_('Unable to delete: not empty!').'</font>';
}
}
function upload(){
global $mosConfig_absolute_path;
if(isset($_FILES['upload']) && is_array($_FILES['upload']) && isset($_POST['dirPath']))
{
$dirPathPost = $_POST['dirPath'];
if(strlen($dirPathPost) > 0)
{
if(substr($dirPathPost,0,1)=='/')
$IMG_ROOT .= $dirPathPost;
else
$IMG_ROOT = $dirPathPost;
}
if(strrpos($IMG_ROOT, '/')!= strlen($IMG_ROOT)-1)
$IMG_ROOT .= '/';
do_upload( $_FILES['upload'], $mosConfig_absolute_path.'/images/stories/'.$dirPathPost.'/');
}
}
function do_upload($file, $dest_dir)
{
global $clearUploads;
if (file_exists($dest_dir.$file['name'])) {
mosRedirect( "index2.php?option=com_media&listdir=".$_POST['dirPath'], T_("Upload FAILED. File already exists") );
}
if (!eregi( ".html$|.bmp$|.gif$|.jpg$|.JPG$|.png$|.ppt$|.doc$|.xls$|.swf$|.pdf$", $file['name'] )){
mosRedirect( "index2.php?option=com_media&listdir=".$_POST['dirPath'], T_("Only files of type gif, png, jpg, JPG, bmp, pdf, swf, doc, xls or ppt can be uploaded") );
}
if (!move_uploaded_file($file['tmp_name'], $dest_dir.strtolower($file['name']))){
mosRedirect( "index2.php?option=com_media&listdir=".$_POST['dirPath'], T_("Upload FAILED") );
}
else {
mosChmod($dest_dir.strtolower($file['name']));
mosRedirect( "index2.php?option=com_media&listdir=".$_POST['dirPath'], T_("Upload complete") );
}
$clearUploads = true;
}
function recursive_listdir($base) {
static $filelist = array();
static $dirlist = array();
if(is_dir($base)) {
$dh = opendir($base);
while (false !== ($dir = readdir($dh))) {
if (is_dir($base ."/". $dir) && $dir !== '.' && $dir !== '..' && strtolower($dir) !== 'cvs') {
$subbase = $base ."/". $dir;
$dirlist[] = $subbase;
$subdirlist = recursive_listdir($subbase);
}
}
closedir($dh);
}
return $dirlist;
}
/**
* Show media manager
* @param string The image directory to display
*/
function showMedia($listdir) {
global $mosConfig_absolute_path, $mosConfig_live_site;
// get list of directories
$imgFiles = recursive_listdir( $mosConfig_absolute_path."/images/stories" );
$images = array();
$folders = array();
$folders[] = mosHTML::makeOption( "/" );
foreach ($imgFiles as $file) {
$folders[] = mosHTML::makeOption( substr($file,strlen($mosConfig_absolute_path."/images/stories")) );
}
if (is_array($folders)) {
sort( $folders );
}
// create folder selectlist
$dirPath = mosHTML::selectList( $folders, 'dirPath', "class=\"inputbox\" size=\"1\" "
."onchange=\"goUpDir()\" ",
'value', 'text', $listdir );
HTML_Media::showMedia($dirPath,$listdir);
}
/**
* Build imagelist
* @param string The image directory to display
*/
function listImages($listdir) {
global $mosConfig_absolute_path, $mosConfig_live_site;
// get list of images
$d = @dir($mosConfig_absolute_path."/images/stories/".$listdir);
if($d)
{
//var_dump($d);
$images = array();
$folders = array();
$docs = array();
while (false !== ($entry = $d->read()))
{
$img_file = $entry;
if(is_file($mosConfig_absolute_path."/images/stories".$listdir.'/'.$img_file) && substr($entry,0,1) != '.' && strtolower($entry) !== 'index.html')
{
if (eregi( ".bmp$|.gif$|.jpg$|.png$", $img_file )) {
$image_info = @getimagesize($mosConfig_absolute_path."/images/stories/".$listdir.'/'.$img_file);
$file_details['file'] = $mosConfig_absolute_path."/images/stories".$listdir."/".$img_file;
$file_details['img_info'] = $image_info;
$file_details['size'] = filesize($mosConfig_absolute_path."/images/stories".$listdir."/".$img_file);
$images[$entry] = $file_details;
}
else {
// file is document
$docs[$entry] = $img_file;
}
}
else if(is_dir($mosConfig_absolute_path."/images/stories/".$listdir.'/'.$img_file) && substr($entry,0,1) != '.' && strtolower($entry) !== 'cvs')
{
$folders[$entry] = $img_file;
}
}
$d->close();
HTML_Media::imageStyle($listdir);
if(count($images) > 0 || count($folders) > 0 || count($docs) > 0)
{
//now sort the folders and images by name.
ksort($images);
ksort($folders);
ksort($docs);
HTML_Media::draw_table_header();
for($i=0; $i<count($folders); $i++)
{
$folder_name = key($folders);
HTML_Media::show_dir('/'.$folders[$folder_name], $folder_name,$listdir);
next($folders);
}
for($i=0; $i<count($docs); $i++)
{
$doc_name = key($docs);
$iconfile= $mosConfig_absolute_path."/administrator/components/com_media/images/".substr($doc_name,-3)."_16.png";
if (file_exists($iconfile)) {
$icon = "components/com_media/images/".(substr($doc_name,-3))."_16.png" ; }
else {
$icon = "components/com_media/images/con_info.png";
}
HTML_Media::show_doc($docs[$doc_name], $listdir, $icon);
next($docs);
}
for($i=0; $i<count($images); $i++)
{
$image_name = key($images);
HTML_Media::show_image($images[$image_name]['file'], $image_name, $images[$image_name]['img_info'], $images[$image_name]['size'],$listdir);
next($images);
}
HTML_Media::draw_table_footer();
}
else
{
HTML_Media::draw_no_results();
}
}
else
{
HTML_Media::draw_no_dir();
}
function rm_all_dir($dir)
{
//$dir = dir_name($dir);
//echo "OPEN:".$dir.'<Br>';
if(is_dir($dir))
{
$d = @dir($dir);
while (false !== ($entry = $d->read()))
{
//echo "#".$entry.'<br>';
if($entry != '.' && $entry != '..')
{
$node = $dir.'/'.$entry;
//echo "NODE:".$node;
if(is_file($node)) {
//echo " - is file<br>";
unlink($node);
}
else if(is_dir($node)) {
//echo " - is Dir<br>";
rm_all_dir($node);
}
}
}
$d->close();
rmdir($dir);
}
//echo "RM: $dir <br>";
}
}
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment