blog->getPosts(['post_id' => $post_id]); if ($post->isEmpty()) { $post_id = null; } $post_title = $post->post_title; unset($post); } // Attachement type if any $link_type = !empty($_REQUEST['link_type']) ? $_REQUEST['link_type'] : null; $file = null; $popup = (integer) !empty($_REQUEST['popup']); $select = !empty($_REQUEST['select']) ? (integer) $_REQUEST['select'] : 0; // 0 : none, 1 : single media, >1 : multiple medias $plugin_id = isset($_REQUEST['plugin_id']) ? html::sanitizeURL($_REQUEST['plugin_id']) : ''; $page_url_params = ['popup' => $popup, 'select' => $select, 'post_id' => $post_id]; $media_page_url_params = ['popup' => $popup, 'select' => $select, 'post_id' => $post_id, 'link_type' => $link_type]; if ($plugin_id != '') { $page_url_params['plugin_id'] = $plugin_id; $media_page_url_params['plugin_id'] = $plugin_id; } $id = !empty($_REQUEST['id']) ? (integer) $_REQUEST['id'] : ''; if ($id != '') { $page_url_params['id'] = $id; } if ($popup) { $open_f = ['dcPage', 'openPopup']; $close_f = ['dcPage', 'closePopup']; } else { $open_f = ['dcPage', 'open']; $close_f = function () { dcPage::helpBlock('core_media'); dcPage::close(); }; } $core_media_writable = false; try { $core->media = new dcMedia($core); if ($id) { $file = $core->media->getFile($id); } if ($file === null) { throw new Exception(__('Not a valid file')); } $core->media->chdir(dirname($file->relname)); $core_media_writable = $core->media->writable(); # Prepare directories combo box $dirs_combo = []; foreach ($core->media->getDBDirs() as $v) { $dirs_combo['/' . $v] = $v; } # Add parent and direct childs directories if any $core->media->getFSDir(); foreach ($core->media->dir['dirs'] as $k => $v) { $dirs_combo['/' . $v->relname] = $v->relname; } ksort($dirs_combo); } catch (Exception $e) { $core->error->add($e->getMessage()); } # Upload a new file if ($file && !empty($_FILES['upfile']) && $file->editable && $core_media_writable) { try { files::uploadStatus($_FILES['upfile']); $core->media->uploadFile($_FILES['upfile']['tmp_name'], $file->basename, null, false, true); dcPage::addSuccessNotice(__('File has been successfully updated.')); $core->adminurl->redirect('admin.media.item', $page_url_params); } catch (Exception $e) { $core->error->add($e->getMessage()); } } # Update file if ($file && !empty($_POST['media_file']) && $file->editable && $core_media_writable) { $newFile = clone $file; $newFile->basename = $_POST['media_file']; if ($_POST['media_path']) { $newFile->dir = $_POST['media_path']; $newFile->relname = $_POST['media_path'] . '/' . $newFile->basename; } else { $newFile->dir = ''; $newFile->relname = $newFile->basename; } $newFile->media_title = html::escapeHTML($_POST['media_title']); $newFile->media_dt = strtotime($_POST['media_dt']); $newFile->media_dtstr = $_POST['media_dt']; $newFile->media_priv = !empty($_POST['media_private']); try { $core->media->updateFile($file, $newFile); dcPage::addSuccessNotice(__('File has been successfully updated.')); $page_url_params['tab'] = 'media-details-tab'; $core->adminurl->redirect('admin.media.item', $page_url_params); } catch (Exception $e) { $core->error->add($e->getMessage()); } } # Update thumbnails if (!empty($_POST['thumbs']) && $file->media_type == 'image' && $file->editable && $core_media_writable) { try { $foo = null; $core->media->mediaFireRecreateEvent($file); dcPage::addSuccessNotice(__('Thumbnails have been successfully updated.')); $page_url_params['tab'] = 'media-details-tab'; $core->adminurl->redirect('admin.media.item', $page_url_params); } catch (Exception $e) { $core->error->add($e->getMessage()); } } # Unzip file if (!empty($_POST['unzip']) && $file->type == 'application/zip' && $file->editable && $core_media_writable) { try { $unzip_dir = $core->media->inflateZipFile($file, $_POST['inflate_mode'] == 'new'); dcPage::addSuccessNotice(__('Zip file has been successfully extracted.')); $media_page_url_params['d'] = $unzip_dir; $core->adminurl->redirect('admin.media', $media_page_url_params); } catch (Exception $e) { $core->error->add($e->getMessage()); } } # Save media insertion settings for the blog if (!empty($_POST['save_blog_prefs'])) { if (!empty($_POST['pref_src'])) { foreach (array_reverse($file->media_thumb) as $s => $v) { if ($v == $_POST['pref_src']) { $core->blog->settings->system->put('media_img_default_size', $s); break; } } } if (!empty($_POST['pref_alignment'])) { $core->blog->settings->system->put('media_img_default_alignment', $_POST['pref_alignment']); } if (!empty($_POST['pref_insertion'])) { $core->blog->settings->system->put('media_img_default_link', ($_POST['pref_insertion'] == 'link')); } if (!empty($_POST['pref_legend'])) { $core->blog->settings->system->put('media_img_default_legend', $_POST['pref_legend']); } dcPage::addSuccessNotice(__('Default media insertion settings have been successfully updated.')); $core->adminurl->redirect('admin.media.item', $page_url_params); } # Function to get image title based on meta $get_img_title = function ($file, $pattern, $dto_first = false, $no_date_alone = false) { $res = []; $pattern = preg_split('/\s*;;\s*/', $pattern); $sep = ', '; $dates = 0; $items = 0; foreach ($pattern as $v) { if ($v == 'Title') { if ($file->media_title != '') { $res[] = $file->media_title; } $items++; } elseif ($file->media_meta->{$v}) { if ((string) $file->media_meta->{$v} != '') { $res[] = (string) $file->media_meta->{$v}; } $items++; } elseif (preg_match('/^Date\((.+?)\)$/u', $v, $m)) { if ($dto_first && ($file->media_meta->DateTimeOriginal != 0)) { $res[] = dt::dt2str($m[1], (string) $file->media_meta->DateTimeOriginal); } else { $res[] = dt::str($m[1], $file->media_dt); } $items++; $dates++; } elseif (preg_match('/^DateTimeOriginal\((.+?)\)$/u', $v, $m) && $file->media_meta->DateTimeOriginal) { $res[] = dt::dt2str($m[1], (string) $file->media_meta->DateTimeOriginal); $items++; $dates++; } elseif (preg_match('/^separator\((.*?)\)$/u', $v, $m)) { $sep = $m[1]; } } if ($no_date_alone && $dates == count($res) && $dates < $items) { // On ne laisse pas les dates seules, sauf si ce sont les seuls items du pattern (hors séparateur) return ''; } return implode($sep, $res); }; /* DISPLAY Main page -------------------------------------------------------- */ $starting_scripts = '" . dcPage::jsModal() . dcPage::jsLoad('js/_media_item.js'); if ($popup && !empty($plugin_id)) { $starting_scripts .= $core->callBehavior('adminPopupMedia', $plugin_id); } $temp_params = $media_page_url_params; $temp_params['d'] = '%s'; $breadcrumb = $core->media->breadCrumb($core->adminurl->get('admin.media', $temp_params, '&', true)) . ($file === null ? '' : '' . $file->basename . ''); $temp_params['d'] = ''; $home_url = $core->adminurl->get('admin.media', $temp_params); call_user_func($open_f, __('Media manager'), $starting_scripts . dcPage::jsDatePicker() . ($popup ? dcPage::jsPageTabs($tab) : ''), dcPage::breadcrumb( [ html::escapeHTML($core->blog->name) => '', __('Media manager') => $home_url, $breadcrumb => '' ], [ 'home_link' => !$popup, 'hl' => false ] ) ); if ($popup) { // Display notices echo dcPage::notices(); } if ($file === null) { call_user_func($close_f); exit; } if (!empty($_GET['fupd']) || !empty($_GET['fupl'])) { dcPage::success(__('File has been successfully updated.')); } if (!empty($_GET['thumbupd'])) { dcPage::success(__('Thumbnails have been successfully updated.')); } if (!empty($_GET['blogprefupd'])) { dcPage::success(__('Default media insertion settings have been successfully updated.')); } # Get major file type (first part of mime type) $file_type = explode('/', $file->type); # Selection mode if ($select) { // Let user choose thumbnail size if image $media_desc = $file->media_title; echo '