';
}
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 =
'