Dotclear

source: admin/media_item.php @ 3691:3dbfcef11299

Revision 3691:3dbfcef11299, 32.1 KB checked in by franck <carnet.franck.paul@…>, 8 years ago (diff)

PHP 7.2 compliance (deprecated create_function() replaced by closure)

Line 
1<?php
2# -- BEGIN LICENSE BLOCK ---------------------------------------
3#
4# This file is part of Dotclear 2.
5#
6# Copyright (c) 2003-2013 Olivier Meunier & Association Dotclear
7# Licensed under the GPL version 2.0 license.
8# See LICENSE file or
9# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
10#
11# -- END LICENSE BLOCK -----------------------------------------
12
13require dirname(__FILE__) . '/../inc/admin/prepend.php';
14
15dcPage::check('media,media_admin');
16
17$tab = empty($_REQUEST['tab']) ? '' : $_REQUEST['tab'];
18
19$post_id = !empty($_REQUEST['post_id']) ? (integer) $_REQUEST['post_id'] : null;
20if ($post_id) {
21    $post = $core->blog->getPosts(array('post_id' => $post_id));
22    if ($post->isEmpty()) {
23        $post_id = null;
24    }
25    $post_title = $post->post_title;
26    unset($post);
27}
28
29// Attachement type if any
30$link_type = !empty($_REQUEST['link_type']) ? $_REQUEST['link_type'] : null;
31
32$file                  = null;
33$popup                 = (integer) !empty($_REQUEST['popup']);
34$select                = !empty($_REQUEST['select']) ? (integer) $_REQUEST['select'] : 0; // 0 : none, 1 : single media, >1 : multiple medias
35$plugin_id             = isset($_REQUEST['plugin_id']) ? html::sanitizeURL($_REQUEST['plugin_id']) : '';
36$page_url_params       = array('popup' => $popup, 'select' => $select, 'post_id' => $post_id);
37$media_page_url_params = array('popup' => $popup, 'select' => $select, 'post_id' => $post_id, 'link_type' => $link_type);
38
39if ($plugin_id != '') {
40    $page_url_params['plugin_id']       = $plugin_id;
41    $media_page_url_params['plugin_id'] = $plugin_id;
42}
43
44$id = !empty($_REQUEST['id']) ? (integer) $_REQUEST['id'] : '';
45
46if ($id != '') {
47    $page_url_params['id'] = $id;
48}
49
50if ($popup) {
51    $open_f  = array('dcPage', 'openPopup');
52    $close_f = array('dcPage', 'closePopup');
53} else {
54    $open_f  = array('dcPage', 'open');
55    $close_f = function () {
56        dcPage::helpBlock('core_media');
57        dcPage::close();
58    };
59}
60
61$core_media_writable = false;
62try
63{
64    $core->media = new dcMedia($core);
65
66    if ($id) {
67        $file = $core->media->getFile($id);
68    }
69
70    if ($file === null) {
71        throw new Exception(__('Not a valid file'));
72    }
73
74    $core->media->chdir(dirname($file->relname));
75    $core_media_writable = $core->media->writable();
76
77    # Prepare directories combo box
78    $dirs_combo = array();
79    foreach ($core->media->getDBDirs() as $v) {
80        $dirs_combo['/' . $v] = $v;
81    }
82    # Add parent and direct childs directories if any
83    $core->media->getFSDir();
84    foreach ($core->media->dir['dirs'] as $k => $v) {
85        $dirs_combo['/' . $v->relname] = $v->relname;
86    }
87    ksort($dirs_combo);
88} catch (Exception $e) {
89    $core->error->add($e->getMessage());
90}
91
92# Upload a new file
93if ($file && !empty($_FILES['upfile']) && $file->editable && $core_media_writable) {
94    try {
95        files::uploadStatus($_FILES['upfile']);
96        $core->media->uploadFile($_FILES['upfile']['tmp_name'], $file->basename, null, false, true);
97
98        dcPage::addSuccessNotice(__('File has been successfully updated.'));
99        $core->adminurl->redirect('admin.media.item', $page_url_params);
100    } catch (Exception $e) {
101        $core->error->add($e->getMessage());
102    }
103}
104
105# Update file
106if ($file && !empty($_POST['media_file']) && $file->editable && $core_media_writable) {
107    $newFile = clone $file;
108
109    $newFile->basename = $_POST['media_file'];
110
111    if ($_POST['media_path']) {
112        $newFile->dir     = $_POST['media_path'];
113        $newFile->relname = $_POST['media_path'] . '/' . $newFile->basename;
114    } else {
115        $newFile->dir     = '';
116        $newFile->relname = $newFile->basename;
117    }
118    $newFile->media_title = html::escapeHTML($_POST['media_title']);
119    $newFile->media_dt    = strtotime($_POST['media_dt']);
120    $newFile->media_dtstr = $_POST['media_dt'];
121    $newFile->media_priv  = !empty($_POST['media_private']);
122
123    try {
124        $core->media->updateFile($file, $newFile);
125
126        dcPage::addSuccessNotice(__('File has been successfully updated.'));
127        $page_url_params['tab'] = 'media-details-tab';
128        $core->adminurl->redirect('admin.media.item', $page_url_params);
129    } catch (Exception $e) {
130        $core->error->add($e->getMessage());
131    }
132}
133
134# Update thumbnails
135if (!empty($_POST['thumbs']) && $file->media_type == 'image' && $file->editable && $core_media_writable) {
136    try {
137        $foo = null;
138        $core->media->mediaFireRecreateEvent($file);
139
140        dcPage::addSuccessNotice(__('Thumbnails have been successfully updated.'));
141        $page_url_params['tab'] = 'media-details-tab';
142        $core->adminurl->redirect('admin.media.item', $page_url_params);
143    } catch (Exception $e) {
144        $core->error->add($e->getMessage());
145    }
146}
147
148# Unzip file
149if (!empty($_POST['unzip']) && $file->type == 'application/zip' && $file->editable && $core_media_writable) {
150    try {
151        $unzip_dir = $core->media->inflateZipFile($file, $_POST['inflate_mode'] == 'new');
152
153        dcPage::addSuccessNotice(__('Zip file has been successfully extracted.'));
154        $media_page_url_params['d'] = $unzip_dir;
155        $core->adminurl->redirect('admin.media', $media_page_url_params);
156    } catch (Exception $e) {
157        $core->error->add($e->getMessage());
158    }
159}
160
161# Save media insertion settings for the blog
162if (!empty($_POST['save_blog_prefs'])) {
163    if (!empty($_POST['pref_src'])) {
164        foreach (array_reverse($file->media_thumb) as $s => $v) {
165            if ($v == $_POST['pref_src']) {
166                $core->blog->settings->system->put('media_img_default_size', $s);
167                break;
168            }
169        }
170    }
171    if (!empty($_POST['pref_alignment'])) {
172        $core->blog->settings->system->put('media_img_default_alignment', $_POST['pref_alignment']);
173    }
174    if (!empty($_POST['pref_insertion'])) {
175        $core->blog->settings->system->put('media_img_default_link', ($_POST['pref_insertion'] == 'link'));
176    }
177    if (!empty($_POST['pref_legend'])) {
178        $core->blog->settings->system->put('media_img_default_legend', $_POST['pref_legend']);
179    }
180
181    dcPage::addSuccessNotice(__('Default media insertion settings have been successfully updated.'));
182    $core->adminurl->redirect('admin.media.item', $page_url_params);
183}
184
185# Function to get image title based on meta
186$get_img_title = function ($file, $pattern, $dto_first = false, $no_date_alone = false) {
187    $res     = array();
188    $pattern = preg_split('/\s*;;\s*/', $pattern);
189    $sep     = ', ';
190    $dates   = 0;
191    $items   = 0;
192
193    foreach ($pattern as $v) {
194        if ($v == 'Title') {
195            if ($file->media_title != '') {
196                $res[] = $file->media_title;
197            }
198            $items++;
199        } elseif ($file->media_meta->{$v}) {
200            if ((string) $file->media_meta->{$v} != '') {
201                $res[] = (string) $file->media_meta->{$v};
202            }
203            $items++;
204        } elseif (preg_match('/^Date\((.+?)\)$/u', $v, $m)) {
205            if ($dto_first && ($file->media_meta->DateTimeOriginal != 0)) {
206                $res[] = dt::dt2str($m[1], (string) $file->media_meta->DateTimeOriginal);
207            } else {
208                $res[] = dt::str($m[1], $file->media_dt);
209            }
210            $items++;
211            $dates++;
212        } elseif (preg_match('/^DateTimeOriginal\((.+?)\)$/u', $v, $m) && $file->media_meta->DateTimeOriginal) {
213            $res[] = dt::dt2str($m[1], (string) $file->media_meta->DateTimeOriginal);
214            $items++;
215            $dates++;
216        } elseif (preg_match('/^separator\((.*?)\)$/u', $v, $m)) {
217            $sep = $m[1];
218        }
219    }
220    if ($no_date_alone && $dates == count($res) && $dates < $items) {
221        // On ne laisse pas les dates seules, sauf si ce sont les seuls items du pattern (hors séparateur)
222        return '';
223    }
224    return implode($sep, $res);
225};
226
227/* DISPLAY Main page
228-------------------------------------------------------- */
229$starting_scripts =
230'<script type="text/javascript">' . "\n" .
231dcPage::jsVar('dotclear.msg.confirm_delete_media', __('Are you sure to delete this media?')) . "\n" .
232"</script>" .
233dcPage::jsModal() .
234dcPage::jsLoad('js/_media_item.js');
235if ($popup && !empty($plugin_id)) {
236    $starting_scripts .= $core->callBehavior('adminPopupMedia', $plugin_id);
237}
238$temp_params      = $media_page_url_params;
239$temp_params['d'] = '%s';
240$breadcrumb       = $core->media->breadCrumb($core->adminurl->get('admin.media', $temp_params, '&amp;', true)) .
241    ($file === null ? '' : '<span class="page-title">' . $file->basename . '</span>');
242$temp_params['d'] = '';
243$home_url         = $core->adminurl->get('admin.media', $temp_params);
244call_user_func($open_f, __('Media manager'),
245    $starting_scripts .
246    dcPage::jsDatePicker() .
247    ($popup ? dcPage::jsPageTabs($tab) : ''),
248    dcPage::breadcrumb(
249        array(
250            html::escapeHTML($core->blog->name) => '',
251            __('Media manager')                 => $home_url,
252            $breadcrumb                         => ''
253        ),
254        array(
255            'home_link' => !$popup,
256            'hl'        => false
257        )
258    )
259);
260
261if ($popup) {
262    // Display notices
263    echo dcPage::notices();
264}
265
266if ($file === null) {
267    call_user_func($close_f);
268    exit;
269}
270
271if (!empty($_GET['fupd']) || !empty($_GET['fupl'])) {
272    dcPage::success(__('File has been successfully updated.'));
273}
274if (!empty($_GET['thumbupd'])) {
275    dcPage::success(__('Thumbnails have been successfully updated.'));
276}
277if (!empty($_GET['blogprefupd'])) {
278    dcPage::success(__('Default media insertion settings have been successfully updated.'));
279}
280
281# Get major file type (first part of mime type)
282$file_type = explode('/', $file->type);
283
284# Selection mode
285if ($select) {
286    // Let user choose thumbnail size if image
287    $media_desc = $file->media_title;
288
289    echo
290    '<div id="media-select" class="multi-part" title="' . __('Select media item') . '">' .
291    '<h3>' . __('Select media item') . '</h3>' .
292        '<form id="media-select-form" action="" method="get">';
293
294    $media_img_default_size = $core->blog->settings->system->media_img_default_size;
295    if ($media_img_default_size == '') {
296        $media_img_default_size = 'm';
297    }
298    $media_img_default_alignment = $core->blog->settings->system->media_img_default_alignment;
299    if ($media_img_default_alignment == '') {
300        $media_img_default_alignment = 'none';
301    }
302    $media_img_default_link   = (boolean) $core->blog->settings->system->media_img_default_link;
303    $media_img_default_legend = $core->blog->settings->system->media_img_default_legend;
304    if ($media_img_default_legend == '') {
305        $media_img_default_legend = 'legend';
306    }
307
308    if ($file->media_type == 'image') {
309        $media_type = 'image';
310        $media_desc = $get_img_title($file,
311            $core->blog->settings->system->media_img_title_pattern,
312            $core->blog->settings->system->media_img_use_dto_first,
313            $core->blog->settings->system->media_img_no_date_alone);
314        if ($media_desc == $file->basename) {
315            $media_desc = '';
316        }
317
318        echo
319        '<h3>' . __('Image size:') . '</h3> ';
320
321        $s_checked = false;
322        echo '<p>';
323        foreach (array_reverse($file->media_thumb) as $s => $v) {
324            $s_checked = ($s == $media_img_default_size);
325            echo '<label class="classic">' .
326            form::radio(array('src'), html::escapeHTML($v), $s_checked) . ' ' .
327            $core->media->thumb_sizes[$s][2] . '</label><br /> ';
328        }
329        $s_checked = (!isset($file->media_thumb[$media_img_default_size]));
330        echo '<label class="classic">' .
331        form::radio(array('src'), $file->file_url, $s_checked) . ' ' . __('original') . '</label><br /> ';
332        echo '</p>';
333
334    } elseif ($file_type[0] == 'audio') {
335        $media_type = 'mp3';
336    } elseif ($file_type[0] == 'video') {
337        $media_type = 'flv';
338    } else {
339        $media_type = 'default';
340    }
341
342    echo
343    '<p>' .
344    '<button type="button" id="media-select-ok" class="submit">' . __('Select') . '</button> ' .
345    '<button type="button" id="media-select-cancel">' . __('Cancel') . '</button>' .
346    form::hidden(array('type'), html::escapeHTML($media_type)) .
347    form::hidden(array('title'), html::escapeHTML($file->media_title)) .
348    form::hidden(array('description'), html::escapeHTML($media_desc)) .
349    form::hidden(array('url'), $file->file_url) .
350        '</p>';
351
352    echo '</form>';
353    echo '</div>';
354}
355
356# Insertion popup
357if ($popup && !$select) {
358    $media_desc = $file->media_title;
359
360    echo
361    '<div id="media-insert" class="multi-part" title="' . __('Insert media item') . '">' .
362    '<h3>' . __('Insert media item') . '</h3>' .
363        '<form id="media-insert-form" action="" method="get">';
364
365    $media_img_default_size = $core->blog->settings->system->media_img_default_size;
366    if ($media_img_default_size == '') {
367        $media_img_default_size = 'm';
368    }
369    $media_img_default_alignment = $core->blog->settings->system->media_img_default_alignment;
370    if ($media_img_default_alignment == '') {
371        $media_img_default_alignment = 'none';
372    }
373    $media_img_default_link   = (boolean) $core->blog->settings->system->media_img_default_link;
374    $media_img_default_legend = $core->blog->settings->system->media_img_default_legend;
375    if ($media_img_default_legend == '') {
376        $media_img_default_legend = 'legend';
377    }
378
379    if ($file->media_type == 'image') {
380        $media_type = 'image';
381        $media_desc = $get_img_title($file,
382            $core->blog->settings->system->media_img_title_pattern,
383            $core->blog->settings->system->media_img_use_dto_first,
384            $core->blog->settings->system->media_img_no_date_alone);
385        if ($media_desc == $file->basename) {
386            $media_desc = '';
387        }
388
389        echo
390        '<div class="two-boxes">' .
391        '<h3>' . __('Image size:') . '</h3> ';
392        $s_checked = false;
393        echo '<p>';
394        foreach (array_reverse($file->media_thumb) as $s => $v) {
395            $s_checked = ($s == $media_img_default_size);
396            echo '<label class="classic">' .
397            form::radio(array('src'), html::escapeHTML($v), $s_checked) . ' ' .
398            $core->media->thumb_sizes[$s][2] . '</label><br /> ';
399        }
400        $s_checked = (!isset($file->media_thumb[$media_img_default_size]));
401        echo '<label class="classic">' .
402        form::radio(array('src'), $file->file_url, $s_checked) . ' ' . __('original') . '</label><br /> ';
403        echo '</p>';
404        echo '</div>';
405
406        echo
407        '<div class="two-boxes">' .
408        '<h3>' . __('Image legend and title') . '</h3>' .
409        '<p>' .
410        '<label for="legend1" class="classic">' . form::radio(array('legend', 'legend1'), 'legend',
411            ($media_img_default_legend == 'legend')) .
412        __('Legend and title') . '</label><br />' .
413        '<label for="legend2" class="classic">' . form::radio(array('legend', 'legend2'), 'title',
414            ($media_img_default_legend == 'title')) .
415        __('Title') . '</label><br />' .
416        '<label for="legend3" class="classic">' . form::radio(array('legend', 'legend3'), 'none',
417            ($media_img_default_legend == 'none')) .
418        __('None') . '</label>' .
419            '</p>' .
420            '</div>';
421
422        echo
423        '<div class="two-boxes">' .
424        '<h3>' . __('Image alignment') . '</h3>';
425        $i_align = array(
426            'none'   => array(__('None'), ($media_img_default_alignment == 'none' ? 1 : 0)),
427            'left'   => array(__('Left'), ($media_img_default_alignment == 'left' ? 1 : 0)),
428            'right'  => array(__('Right'), ($media_img_default_alignment == 'right' ? 1 : 0)),
429            'center' => array(__('Center'), ($media_img_default_alignment == 'center' ? 1 : 0))
430        );
431
432        echo '<p>';
433        foreach ($i_align as $k => $v) {
434            echo '<label class="classic">' .
435            form::radio(array('alignment'), $k, $v[1]) . ' ' . $v[0] . '</label><br /> ';
436        }
437        echo '</p>';
438        echo '</div>';
439
440        echo
441        '<div class="two-boxes">' .
442        '<h3>' . __('Image insertion') . '</h3>' .
443        '<p>' .
444        '<label for="insert1" class="classic">' . form::radio(array('insertion', 'insert1'), 'simple', !$media_img_default_link) .
445        __('As a single image') . '</label><br />' .
446        '<label for="insert2" class="classic">' . form::radio(array('insertion', 'insert2'), 'link', $media_img_default_link) .
447        __('As a link to the original image') . '</label>' .
448            '</p>' .
449            '</div>';
450    } elseif ($file_type[0] == 'audio') {
451        $media_type = 'mp3';
452
453        echo
454        '<div class="two-boxes">' .
455        '<h3>' . __('MP3 disposition') . '</h3>';
456        dcPage::message(__("Please note that you cannot insert mp3 files with visual editor."), false);
457
458        $i_align = array(
459            'none'   => array(__('None'), ($media_img_default_alignment == 'none' ? 1 : 0)),
460            'left'   => array(__('Left'), ($media_img_default_alignment == 'left' ? 1 : 0)),
461            'right'  => array(__('Right'), ($media_img_default_alignment == 'right' ? 1 : 0)),
462            'center' => array(__('Center'), ($media_img_default_alignment == 'center' ? 1 : 0))
463        );
464
465        echo '<p>';
466        foreach ($i_align as $k => $v) {
467            echo '<label class="classic">' .
468            form::radio(array('alignment'), $k, $v[1]) . ' ' . $v[0] . '</label><br /> ';
469        }
470
471        $public_player_style = unserialize($core->blog->settings->themes->mp3player_style);
472        $public_player       = dcMedia::audioPlayer($file->type, $file->file_url, $core->blog->getQmarkURL() . 'pf=player_mp3.swf', $public_player_style, $core->blog->settings->system->media_flash_fallback);
473        echo form::hidden('public_player', html::escapeHTML($public_player));
474        echo '</p>';
475        echo '</div>';
476    } elseif ($file_type[0] == 'video') {
477        $media_type = 'flv';
478
479        dcPage::message(__("Please note that you cannot insert video files with visual editor."), false);
480
481        echo
482        '<div class="two-boxes">' .
483        '<h3>' . __('Video size') . '</h3>' .
484        '<p><label for="video_w" class="classic">' . __('Width:') . '</label> ' .
485        form::field('video_w', 3, 4, $core->blog->settings->system->media_video_width) . '  ' .
486        '<label for="video_h" class="classic">' . __('Height:') . '</label> ' .
487        form::field('video_h', 3, 4, $core->blog->settings->system->media_video_height) .
488            '</p>' .
489            '</div>';
490
491        echo
492        '<div class="two-boxes">' .
493        '<h3>' . __('Video disposition') . '</h3>';
494
495        $i_align = array(
496            'none'   => array(__('None'), ($media_img_default_alignment == 'none' ? 1 : 0)),
497            'left'   => array(__('Left'), ($media_img_default_alignment == 'left' ? 1 : 0)),
498            'right'  => array(__('Right'), ($media_img_default_alignment == 'right' ? 1 : 0)),
499            'center' => array(__('Center'), ($media_img_default_alignment == 'center' ? 1 : 0))
500        );
501
502        echo '<p>';
503        foreach ($i_align as $k => $v) {
504            echo '<label class="classic">' .
505            form::radio(array('alignment'), $k, $v[1]) . ' ' . $v[0] . '</label><br /> ';
506        }
507
508        $public_player_style = unserialize($core->blog->settings->themes->flvplayer_style);
509        $public_player       = dcMedia::videoPlayer($file->type, $file->file_url, $core->blog->getQmarkURL() . 'pf=player_flv.swf', $public_player_style, $core->blog->settings->system->media_flash_fallback);
510        echo form::hidden('public_player', html::escapeHTML($public_player));
511        echo '</p>';
512        echo '</div>';
513    } else {
514        $media_type = 'default';
515        echo '<p>' . __('Media item will be inserted as a link.') . '</p>';
516    }
517
518    echo
519    '<p>' .
520    '<button type="button" id="media-insert-ok" class="submit">' . __('Insert') . '</button> ' .
521    '<button type="button" id="media-insert-cancel">' . __('Cancel') . '</button>' .
522    form::hidden(array('type'), html::escapeHTML($media_type)) .
523    form::hidden(array('title'), html::escapeHTML($file->media_title)) .
524    form::hidden(array('description'), html::escapeHTML($media_desc)) .
525    form::hidden(array('url'), $file->file_url) .
526        '</p>';
527
528    echo '</form>';
529
530    if ($media_type != 'default') {
531        echo
532        '<div class="border-top">' .
533        '<form id="save_settings" action="' . $core->adminurl->getBase('admin.media.item') . '" method="post">' .
534        '<p>' . __('Make current settings as default') . ' ' .
535        '<input class="reset" type="submit" name="save_blog_prefs" value="' . __('OK') . '" />' .
536        form::hidden(array('pref_src'), '') .
537        form::hidden(array('pref_alignment'), '') .
538        form::hidden(array('pref_insertion'), '') .
539        form::hidden(array('pref_legend'), '') .
540        $core->adminurl->getHiddenFormFields('admin.media.item', $page_url_params) .
541        $core->formNonce() . '</p>' .
542            '</form>' . '</div>';
543    }
544
545    echo '</div>';
546}
547
548if ($popup || $select) {
549    echo
550    '<div class="multi-part" title="' . __('Media details') . '" id="media-details-tab">';
551} else {
552    echo '<h3 class="out-of-screen-if-js">' . __('Media details') . '</h3>';
553}
554echo
555'<p id="media-icon"><img src="' . $file->media_icon . '?' . time() * rand() . '" alt="" /></p>';
556
557echo
558    '<div id="media-details">' .
559    '<div class="near-icon">';
560
561if ($file->media_image) {
562    $thumb_size = !empty($_GET['size']) ? $_GET['size'] : 's';
563
564    if (!isset($core->media->thumb_sizes[$thumb_size]) && $thumb_size != 'o') {
565        $thumb_size = 's';
566    }
567
568    if (isset($file->media_thumb[$thumb_size])) {
569        echo '<p><a class="modal-image" href="' . $file->file_url . '">' .
570        '<img src="' . $file->media_thumb[$thumb_size] . '?' . time() * rand() . '" alt="" />' .
571            '</a></p>';
572    } elseif ($thumb_size == 'o') {
573        $S     = getimagesize($file->file);
574        $class = ($S[1] > 500) ? ' class="overheight"' : '';
575        unset($S);
576        echo '<p id="media-original-image"' . $class . '><a class="modal-image" href="' . $file->file_url . '">' .
577        '<img src="' . $file->file_url . '?' . time() * rand() . '" alt="" />' .
578            '</a></p>';
579    }
580
581    echo '<p>' . __('Available sizes:') . ' ';
582    foreach (array_reverse($file->media_thumb) as $s => $v) {
583        $strong_link = ($s == $thumb_size) ? '<strong>%s</strong>' : '%s';
584        printf($strong_link, '<a href="' . $core->adminurl->get('admin.media.item', array_merge($page_url_params,
585            array("size" => $s, 'tab' => 'media-details-tab'))) . '">' . $core->media->thumb_sizes[$s][2] . '</a> | ');
586    }
587    echo '<a href="' . $core->adminurl->get('admin.media.item', array_merge($page_url_params, array("size" => "o", "tab" => "media-details-tab"))) . '">' . __('original') . '</a>';
588    echo '</p>';
589
590    if ($thumb_size != 'o' && isset($file->media_thumb[$thumb_size])) {
591        $p          = path::info($file->file);
592        $alpha      = ($p['extension'] == 'png') || ($p['extension'] == 'PNG');
593        $thumb      = sprintf(($alpha ? $core->media->thumb_tp_alpha : $core->media->thumb_tp), $p['dirname'], $p['base'], '%s');
594        $thumb_file = sprintf($thumb, $thumb_size);
595        $T          = getimagesize($thumb_file);
596        $stats      = stat($thumb_file);
597        echo
598        '<h3>' . __('Thumbnail details') . '</h3>' .
599        '<ul>' .
600        '<li><strong>' . __('Image width:') . '</strong> ' . $T[0] . ' px</li>' .
601        '<li><strong>' . __('Image height:') . '</strong> ' . $T[1] . ' px</li>' .
602        '<li><strong>' . __('File size:') . '</strong> ' . files::size($stats[7]) . '</li>' .
603        '<li><strong>' . __('File URL:') . '</strong> <a href="' . $file->media_thumb[$thumb_size] . '">' .
604        $file->media_thumb[$thumb_size] . '</a></li>' .
605            '</ul>';
606    }
607}
608
609// Show player if relevant
610if ($file_type[0] == 'audio') {
611    echo dcMedia::audioPlayer($file->type, $file->file_url, $core->adminurl->get("admin.home", array('pf' => 'player_mp3.swf')),
612        null, $core->blog->settings->system->media_flash_fallback);
613}
614if ($file_type[0] == 'video') {
615    echo dcMedia::videoPlayer($file->type, $file->file_url, $core->adminurl->get("admin.home", array('pf' => 'player_flv.swf')),
616        null, $core->blog->settings->system->media_flash_fallback);
617}
618
619echo
620'<h3>' . __('Media details') . '</h3>' .
621'<ul>' .
622'<li><strong>' . __('File owner:') . '</strong> ' . $file->media_user . '</li>' .
623'<li><strong>' . __('File type:') . '</strong> ' . $file->type . '</li>';
624if ($file->media_image) {
625    $S = getimagesize($file->file);
626    echo
627    '<li><strong>' . __('Image width:') . '</strong> ' . $S[0] . ' px</li>' .
628    '<li><strong>' . __('Image height:') . '</strong> ' . $S[1] . ' px</li>';
629    unset($S);
630}
631echo
632'<li><strong>' . __('File size:') . '</strong> ' . files::size($file->size) . '</li>' .
633'<li><strong>' . __('File URL:') . '</strong> <a href="' . $file->file_url . '">' . $file->file_url . '</a></li>' .
634    '</ul>';
635
636if (empty($_GET['find_posts'])) {
637    echo
638    '<p><a class="button" href="' . $core->adminurl->get('admin.media.item', array_merge($page_url_params, array("find_posts" => 1, "tab" => "media-details-tab"))) . '">' .
639    __('Show entries containing this media') . '</a></p>';
640} else {
641    echo '<h3>' . __('Entries containing this media') . '</h3>';
642    $params = array(
643        'post_type' => '',
644        'from'      => 'LEFT OUTER JOIN ' . $core->prefix . 'post_media PM ON P.post_id = PM.post_id ',
645        'sql'       => 'AND (' .
646        'PM.media_id = ' . (integer) $id . ' ' .
647        "OR post_content_xhtml LIKE '%" . $core->con->escape($file->relname) . "%' " .
648        "OR post_excerpt_xhtml LIKE '%" . $core->con->escape($file->relname) . "%' "
649    );
650
651    if ($file->media_image) {
652        # We look for thumbnails too
653        if (preg_match('#^http(s)?://#', $core->blog->settings->system->public_url)) {
654            $media_root = $core->blog->settings->system->public_url;
655        } else {
656            $media_root = $core->blog->host . path::clean($core->blog->settings->system->public_url) . '/';
657        }
658        foreach ($file->media_thumb as $v) {
659            $v = preg_replace('/^' . preg_quote($media_root, '/') . '/', '', $v);
660            $params['sql'] .= "OR post_content_xhtml LIKE '%" . $core->con->escape($v) . "%' ";
661            $params['sql'] .= "OR post_excerpt_xhtml LIKE '%" . $core->con->escape($v) . "%' ";
662        }
663    }
664
665    $params['sql'] .= ') ';
666
667    $rs = $core->blog->getPosts($params);
668
669    if ($rs->isEmpty()) {
670        echo '<p>' . __('No entry seems contain this media.') . '</p>';
671    } else {
672        echo '<ul>';
673        while ($rs->fetch()) {
674            $img = '<img alt="%1$s" title="%1$s" src="images/%2$s" />';
675            switch ($rs->post_status) {
676                case 1:
677                    $img_status = sprintf($img, __('published'), 'check-on.png');
678                    break;
679                case 0:
680                    $img_status = sprintf($img, __('unpublished'), 'check-off.png');
681                    break;
682                case -1:
683                    $img_status = sprintf($img, __('scheduled'), 'scheduled.png');
684                    break;
685                case -2:
686                    $img_status = sprintf($img, __('pending'), 'check-wrn.png');
687                    break;
688            }
689            echo '<li>' . $img_status . ' ' . '<a href="' . $core->getPostAdminURL($rs->post_type, $rs->post_id) . '">' .
690            $rs->post_title . '</a>' .
691            ($rs->post_type != 'post' ? ' (' . html::escapeHTML($rs->post_type) . ')' : '') .
692            ' - ' . dt::dt2str(__('%Y-%m-%d %H:%M'), $rs->post_dt) . '</li>';
693        }
694        echo '</ul>';
695    }
696}
697
698if ($file->type == 'image/jpeg') {
699    echo '<h3>' . __('Image details') . '</h3>';
700
701    $details = '';
702    if (count($file->media_meta) > 0) {
703        foreach ($file->media_meta as $k => $v) {
704            if ((string) $v) {
705                $details .= '<li><strong>' . $k . ':</strong> ' . html::escapeHTML($v) . '</li>';
706            }
707        }
708    }
709    if ($details) {
710        echo '<ul>' . $details . '</ul>';
711    } else {
712        echo '<p>' . __('No detail') . '</p>';
713    }
714}
715
716echo '</div>';
717
718echo '<h3>' . __('Updates and modifications') . '</h3>';
719
720if ($file->editable && $core_media_writable) {
721    if ($file->media_type == 'image') {
722        echo
723        '<form class="clear fieldset" action="' . $core->adminurl->get("admin.media.item") . '" method="post">' .
724        '<h4>' . __('Update thumbnails') . '</h4>' .
725        '<p class="more-info">' . __('This will create or update thumbnails for this image.') . '</p>' .
726        '<p><input type="submit" name="thumbs" value="' . __('Update thumbnails') . '" />' .
727        $core->adminurl->getHiddenFormFields('admin.media', $page_url_params) .
728        $core->formNonce() . '</p>' .
729            '</form>';
730    }
731
732    if ($file->type == 'application/zip') {
733        $inflate_combo = array(
734            __('Extract in a new directory')   => 'new',
735            __('Extract in current directory') => 'current'
736        );
737
738        echo
739        '<form class="clear fieldset" id="file-unzip" action="' . $core->adminurl->get("admin.media.item") . '" method="post">' .
740        '<h4>' . __('Extract archive') . '</h4>' .
741        '<ul>' .
742        '<li><strong>' . __('Extract in a new directory') . '</strong> : ' .
743        __('This will extract archive in a new directory that should not exist yet.') . '</li>' .
744        '<li><strong>' . __('Extract in current directory') . '</strong> : ' .
745        __('This will extract archive in current directory and will overwrite existing files or directory.') . '</li>' .
746        '</ul>' .
747        '<p><label for="inflate_mode" class="classic">' . __('Extract mode:') . '</label> ' .
748        form::combo('inflate_mode', $inflate_combo, 'new') .
749        '<input type="submit" name="unzip" value="' . __('Extract') . '" />' .
750        $core->adminurl->getHiddenFormFields('admin.media', $page_url_params) .
751        $core->formNonce() . '</p>' .
752            '</form>';
753    }
754
755    echo
756    '<form class="clear fieldset" action="' . $core->adminurl->get("admin.media.item") . '" method="post">' .
757    '<h4>' . __('Change media properties') . '</h4>' .
758    '<p><label for="media_file">' . __('File name:') . '</label>' .
759    form::field('media_file', 30, 255, html::escapeHTML($file->basename)) . '</p>' .
760    '<p><label for="media_title">' . __('File title:') . '</label>' .
761    form::field('media_title', 30, 255, html::escapeHTML($file->media_title)) . '</p>' .
762    '<p><label for="media_dt">' . __('File date:') . '</label>' .
763    form::field('media_dt', 16, 16, html::escapeHTML($file->media_dtstr)) . '</p>' .
764    '<p><label for="media_private" class="classic">' . form::checkbox('media_private', 1, $file->media_priv) . ' ' .
765    __('Private') . '</label></p>' .
766    '<p><label for="media_path">' . __('New directory:') . '</label>' .
767    form::combo('media_path', $dirs_combo, dirname($file->relname)) . '</p>' .
768    '<p><input type="submit" accesskey="s" value="' . __('Save') . '" />' .
769    $core->adminurl->getHiddenFormFields('admin.media.item', $page_url_params) .
770    $core->formNonce() . '</p>' .
771        '</form>';
772
773    echo
774    '<form class="clear fieldset" action="' . $core->adminurl->get("admin.media.item") . '" method="post" enctype="multipart/form-data">' .
775    '<h4>' . __('Change file') . '</h4>' .
776    '<div>' . form::hidden(array('MAX_FILE_SIZE'), DC_MAX_UPLOAD_SIZE) . '</div>' .
777    '<p><label for="upfile">' . __('Choose a file:') .
778    ' (' . sprintf(__('Maximum size %s'), files::size(DC_MAX_UPLOAD_SIZE)) . ') ' .
779    '<input type="file" id="upfile" name="upfile" size="35" />' .
780    '</label></p>' .
781    '<p><input type="submit" value="' . __('Send') . '" />' .
782    $core->adminurl->getHiddenFormFields('admin.media', $page_url_params) .
783    $core->formNonce() . '</p>' .
784        '</form>';
785
786    if ($file->del) {
787        echo
788        '<form id="delete-form" method="post" action="' . $core->adminurl->getBase("admin.media") . '">' .
789        '<p><input name="delete" type="submit" class="delete" value="' . __('Delete this media') . '" />' .
790        form::hidden('remove', rawurlencode($file->basename)) .
791        form::hidden('rmyes', 1) .
792        $core->adminurl->getHiddenFormFields('admin.media', $media_page_url_params) .
793        $core->formNonce() . '</p>' .
794            '</form>';
795    }
796
797    # --BEHAVIOR-- adminMediaItemForm
798    $core->callBehavior('adminMediaItemForm', $file);
799}
800
801echo
802    '</div>';
803if ($popup || $select) {
804    echo
805        '</div>';
806}
807
808call_user_func($close_f);
Note: See TracBrowser for help on using the repository browser.

Sites map