';
}
return $res;
};
// Actions
# Zip download
if (!empty($_GET['zipdl']) && $core->auth->check('media_admin',$core->blog->id))
{
try
{
if (strpos(realpath($core->media->root.'/'.$d),realpath($core->media->root)) === 0) {
// Media folder or one of it's sub-folder(s)
@set_time_limit(300);
$fp = fopen('php://output','wb');
$zip = new fileZip($fp);
$zip->addExclusion('#(^|/).(.*?)_(m|s|sq|t).jpg$#');
$zip->addDirectory($core->media->root.'/'.$d,'',true);
header('Content-Disposition: attachment;filename='.date('Y-m-d').'-'.$core->blog->id.'-'.($d ?: 'media').'.zip');
header('Content-Type: application/x-zip');
$zip->write();
unset($zip);
exit;
} else {
$d = null;
$core->media->chdir($d);
throw new Exception(__('Not a valid directory'));
}
}
catch (Exception $e)
{
$core->error->add($e->getMessage());
}
}
# Cope with fav/unfav dir
$fav_dirs = null;
if (!empty($_GET['fav'])) {
if (!$q) { // Ignore search results
$fav_dir = rtrim($d,'/');
$core->auth->user_prefs->addWorkspace('interface');
$nb_last_dirs = (integer)($core->auth->user_prefs->interface->media_nb_last_dirs);
if ($nb_last_dirs > 0) {
$fav_dirs = $core->auth->user_prefs->interface->media_fav_dirs;
if (!is_array($fav_dirs)) {
$fav_dirs = array();
}
if (!in_array($fav_dir,$fav_dirs) && $_GET['fav'] == 'y') {
// Add directory in favorites
array_unshift($fav_dirs,$fav_dir);
} elseif (in_array($fav_dir,$fav_dirs) && $_GET['fav'] == 'n') {
// Remove directory from favorites
unset($fav_dirs[array_search($fav_dir,$fav_dirs)]);
}
// Store new list
$core->auth->user_prefs->interface->put('media_fav_dirs',$fav_dirs,'array');
$core->adminurl->redirect('admin.media',$page_url_params);
}
}
}
# Recent media dirs
$last_dirs = null;
if (!$q) { // Ignore search results
$recent_dir = rtrim($d,'/');
$core->auth->user_prefs->addWorkspace('interface');
$nb_last_dirs = (integer)($core->auth->user_prefs->interface->media_nb_last_dirs);
if ($nb_last_dirs > 0) {
$last_dirs = $core->auth->user_prefs->interface->media_last_dirs;
if (!is_array($last_dirs)) {
$last_dirs = array();
}
if (!in_array($recent_dir,$last_dirs)) {
// Add new dir at the top of the list
array_unshift($last_dirs,$recent_dir);
// Remove oldest dir(s)
while (count($last_dirs) > $nb_last_dirs) {
array_pop($last_dirs);
}
} else {
// Move current dir at the top of list
unset($last_dirs[array_search($recent_dir,$last_dirs)]);
array_unshift($last_dirs,$recent_dir);
}
// Store new list
$core->auth->user_prefs->interface->put('media_last_dirs',$last_dirs,'array');
}
}
# New directory
if ($dir && !empty($_POST['newdir']))
{
try {
$core->media->makeDir($_POST['newdir']);
dcPage::addSuccessNotice(sprintf(
__('Directory "%s" has been successfully created.'),
html::escapeHTML($_POST['newdir']))
);
$core->adminurl->redirect('admin.media',$page_url_params);
} catch (Exception $e) {
$core->error->add($e->getMessage());
}
}
# Adding a file
if ($dir && !empty($_FILES['upfile'])) {
// only one file per request : @see option singleFileUploads in admin/js/jsUpload/jquery.fileupload
$upfile = array('name' => $_FILES['upfile']['name'][0],
'type' => $_FILES['upfile']['type'][0],
'tmp_name' => $_FILES['upfile']['tmp_name'][0],
'error' => $_FILES['upfile']['error'][0],
'size' => $_FILES['upfile']['size'][0],
'title' => html::escapeHTML($_FILES['upfile']['name'][0])
);
if (!empty($_SERVER['HTTP_X_REQUESTED_WITH'])) {
header('Content-type: application/json');
$message = array();
try {
files::uploadStatus($upfile);
$new_file_id = $core->media->uploadFile($upfile['tmp_name'],$upfile['name'],$upfile['title']);
$message['files'][] = array(
'name' => $upfile['name'],
'size' => $upfile['size'],
'html' => $mediaItemLine($core->media->getFile($new_file_id),1,$query)
);
} catch (Exception $e) {
$message['files'][] = array('name' => $upfile['name'],
'size' => $upfile['size'],
'error' => $e->getMessage()
);
}
echo json_encode($message);
exit();
} else {
try {
files::uploadStatus($upfile);
$f_title = (isset($_POST['upfiletitle']) ? html::escapeHTML($_POST['upfiletitle']) : '');
$f_private = (isset($_POST['upfilepriv']) ? $_POST['upfilepriv'] : false);
$core->media->uploadFile($upfile['tmp_name'],$upfile['name'],$f_title,$f_private);
dcPage::addSuccessNotice(__('Files have been successfully uploaded.'));
$core->adminurl->redirect('admin.media',$page_url_params);
} catch (Exception $e) {
$core->error->add($e->getMessage());
}
}
}
# Removing items
if ($dir && !empty($_POST['medias']) && !empty($_POST['delete_medias'])) {
try {
foreach ($_POST['medias'] as $media) {
$core->media->removeItem(rawurldecode($media));
}
dcPage::addSuccessNotice(
sprintf(__('Successfully delete one media.',
'Successfully delete %d medias.',
count($_POST['medias'])
),
count($_POST['medias'])
)
);
$core->adminurl->redirect('admin.media',$page_url_params);
} catch (Exception $e) {
$core->error->add($e->getMessage());
}
}
# Removing item from popup only
if ($dir && !empty($_POST['rmyes']) && !empty($_POST['remove']))
{
$_POST['remove'] = rawurldecode($_POST['remove']);
try {
if (is_dir(path::real($core->media->getPwd().'/'.path::clean($_POST['remove'])))) {
$msg = __('Directory has been successfully removed.');
} else {
$msg = __('File has been successfully removed.');
}
$core->media->removeItem($_POST['remove']);
dcPage::addSuccessNotice($msg);
$core->adminurl->redirect('admin.media',$page_url_params);
} catch (Exception $e) {
$core->error->add($e->getMessage());
}
}
# Rebuild directory
if ($dir && $core->auth->isSuperAdmin() && !empty($_POST['rebuild']))
{
try {
$core->media->rebuild($d);
dcPage::success(sprintf(
__('Directory "%s" has been successfully rebuilt.'),
html::escapeHTML($d))
);
$core->adminurl->redirect('admin.media',$page_url_params);
} catch (Exception $e) {
$core->error->add($e->getMessage());
}
}
# DISPLAY confirm page for rmdir & rmfile
if ($dir && !empty($_GET['remove']) && empty($_GET['noconfirm']))
{
call_user_func($open_f,__('Media manager'),'',
dcPage::breadcrumb(
array(
html::escapeHTML($core->blog->name) => '',
__('Media manager') => '',
__('confirm removal') => ''
),
array('home_link' => !$popup)
)
);
echo
'';
call_user_func($close_f);
exit;
}
/* DISPLAY Main page
-------------------------------------------------------- */
$core->auth->user_prefs->addWorkspace('interface');
$user_ui_enhanceduploader = $core->auth->user_prefs->interface->enhanceduploader;
if (!isset($core->media)) {
$breadcrumb = dcPage::breadcrumb(
array(
html::escapeHTML($core->blog->name) => '',
__('Media manager') => ''
),
array('home_link' => !$popup)
);
} else {
$home_params = $page_url_params;
$home_params['d']='';
$home_params['q']='';
if ($query || (!$query && $q)) {
$count = $query ? count($dir['files']) : 0;
$breadcrumb = dcPage::breadcrumb(
array(
html::escapeHTML($core->blog->name) => '',
__('Media manager') => $core->adminurl->get('admin.media',$home_params),
__('Search:').' '.$q.' ('.sprintf(__('%s file found','%s files found',$count),$count).')' => ''
),
array('home_link' => !$popup)
);
} else {
$temp_params = $page_url_params;
$temp_params['d']='%s';
$bc_template = $core->adminurl->get('admin.media',$temp_params,'&',true);
$breadcrumb_media = $core->media->breadCrumb($bc_template,'%s');
if ($breadcrumb_media == '') {
$breadcrumb = dcPage::breadcrumb(
array(
html::escapeHTML($core->blog->name) => '',
__('Media manager') => $core->adminurl->get('admin.media',$home_params)
),
array('home_link' => !$popup)
);
} else {
$home_params = $page_url_params;
$home_params['d']='';
$breadcrumb = dcPage::breadcrumb(
array(
html::escapeHTML($core->blog->name) => '',
__('Media manager') => $core->adminurl->get('admin.media',$home_params),
$breadcrumb_media => ''
),
array(
'home_link' => !$popup,
'hl' => false
)
);
}
}
}
// Recent media folders
$last_folders = '';
$last_folders_item = '';
$fav_url = '';
$fav_img = '';
$fav_alt = '';
$nb_last_dirs = (integer)($core->auth->user_prefs->interface->media_nb_last_dirs);
if ($nb_last_dirs > 0) {
// Favorites directories
$fav_dirs = $core->auth->user_prefs->interface->media_fav_dirs;
if (!is_array($fav_dirs)) {
$fav_dirs = array();
}
foreach ($fav_dirs as $ld) {
// Add favorites dirs on top of combo
$ld_params = $page_url_params;
$ld_params['d'] = $ld;
$ld_params['q'] = ''; // Reset search
$last_folders_item .=
''."\n";
if ($ld == rtrim($d,'/')) {
// Current directory is a favorite → button will un-fav
$ld_params['fav'] = 'n';
$fav_url = urldecode($core->adminurl->get('admin.media',$ld_params));
unset($ld_params['fav']);
$fav_img = 'images/fav-on.png';
$fav_alt = __('Remove this folder from your favorites');
}
}
if ($last_folders_item != '') {
// add a separator between favorite dirs and recent dirs
$last_folders_item .= '';
}
// Recent directories
if (!is_array($last_dirs)) {
$last_dirs = $core->auth->user_prefs->interface->media_last_dirs;
}
if (is_array($last_dirs)) {
foreach ($last_dirs as $ld) {
if (!in_array($ld,$fav_dirs)) {
$ld_params = $page_url_params;
$ld_params['d'] = $ld;
$ld_params['q'] = ''; // Reset search
$last_folders_item .=
''."\n";
if ($ld == rtrim($d,'/')) {
// Current directory is not a favorite → button will fav
$ld_params['fav'] = 'y';
$fav_url = urldecode($core->adminurl->get('admin.media',$ld_params));
unset($ld_params['fav']);
$fav_img = 'images/fav-off.png';
$fav_alt = __('Add this folder to your favorites');
}
}
}
}
if ($last_folders_item != '') {
$last_folders =
'
'.
' '.
''.
''.
' '.
'
';
}
}
call_user_func($open_f,__('Media manager'),
dcPage::jsModal().
dcPage::jsLoad('js/_media.js').
($core_media_writable ? dcPage::jsUpload(array('d='.$d)) : ''),
$breadcrumb
);
if ($popup) {
// Display notices
echo dcPage::notices();
}
if (!$core_media_writable) {
dcPage::warning(__('You do not have sufficient permissions to write to this folder.'));
}
if (!empty($_GET['mkdok'])) {
dcPage::success(__('Directory has been successfully created.'));
}
if (!empty($_GET['upok'])) {
dcPage::success(__('Files have been successfully uploaded.'));
}
if (!empty($_GET['rmfok'])) {
dcPage::success(__('File has been successfully removed.'));
}
if (!empty($_GET['rmdok'])) {
dcPage::success(__('Directory has been successfully removed.'));
}
if (!empty($_GET['rebuildok'])) {
dcPage::success(__('Directory has been successfully rebuilt.'));
}
if (!empty($_GET['unzipok'])) {
dcPage::success(__('Zip file has been successfully extracted.'));
}
if (!$dir) {
call_user_func($close_f);
exit;
}
if ($select) {
// Select mode (popup or not)
echo '
';
if ($select == 1) {
echo sprintf(__('Select a file by clicking on %s'),'');
} else {
echo sprintf(__('Select files and click on %s button'),__('Choose selected medias'));
}
if ($core_media_writable) {
echo ' '.__('or').' '.sprintf('%s',__('upload a new file'));
}
echo '
';
} else {
if ($post_id) {
echo '
'.sprintf(__('Choose a file to attach to entry %s by clicking on %s'),
''.html::escapeHTML($post_title).'',
'');
if ($core_media_writable) {
echo ' '.__('or').' '.sprintf('%s',__('upload a new file'));
}
echo '
';
}
if ($popup) {
echo '
'.sprintf(__('Choose a file to insert into entry by clicking on %s'),
'');
if ($core_media_writable) {
echo ' '.__('or').' '.sprintf('%s',__('upload a new file'));
}
echo '
';
}
}
// Remove hidden directories (unless DC_SHOW_HIDDEN_DIRS is set to true)
if (!defined('DC_SHOW_HIDDEN_DIRS') || (DC_SHOW_HIDDEN_DIRS == false)) {
for ($i = count($dir['dirs']) - 1; $i >= 0; $i--) {
if ($dir['dirs'][$i]->d) {
if (strpos($dir['dirs'][$i]->relname,'.') !== false) {
unset($dir['dirs'][$i]);
}
}
}
}
$items = array_values(array_merge($dir['dirs'],$dir['files']));
$fmt_form_media = '';
echo '
';
echo $last_folders;
echo // Search form
'';
if (count($items) == 0)
{
echo
'
'.__('No file.').'
'.
sprintf($fmt_form_media,'',' hide'); // need for jsUpload to append new media
}
else
{
$pager = new dcPager($page,count($items),$nb_per_page,10);
$nbItems = count($items) - ($d ? 1 : 0);
$nbFolders = count(array_filter($items,function($i) {return ($i->d);})) - ($d ? 1 : 0);
$nbFiles = $nbItems - $nbFolders;
echo
''.
$pager->getLinks();
if ($file_mode == 'list') {
$table =
'