Dotclear

source: admin/media_item.php @ 3446:fee8f21c2bef

Revision 3446:fee8f21c2bef, 27.8 KB checked in by franck <carnet.franck.paul@…>, 9 years ago (diff)

Add legend and title insertion option for image insertion in entry, closes #2227

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

Sites map