Dotclear

source: plugins/attachments/_public.php @ 3167:9b0e5988c0eb

Revision 3167:9b0e5988c0eb, 7.6 KB checked in by franck <carnet.franck.paul@…>, 10 years ago (diff)

Cope with sort of "un-attached" media → allows new features as "featured media" plugin. Video and Audio HTML5 element are now used (if possible) rather than Flash object for attachments.

RevLine 
[407]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
[407]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 -----------------------------------------
12if (!defined('DC_RC_PATH')) { return; }
13
14# Attachments
15$core->tpl->addBlock('Attachments',array('attachmentTpl','Attachments'));
16$core->tpl->addBlock('AttachmentsHeader',array('attachmentTpl','AttachmentsHeader'));
17$core->tpl->addBlock('AttachmentsFooter',array('attachmentTpl','AttachmentsFooter'));
18$core->tpl->addValue('AttachmentMimeType',array('attachmentTpl','AttachmentMimeType'));
19$core->tpl->addValue('AttachmentType',array('attachmentTpl','AttachmentType'));
20$core->tpl->addValue('AttachmentFileName',array('attachmentTpl','AttachmentFileName'));
21$core->tpl->addValue('AttachmentSize',array('attachmentTpl','AttachmentSize'));
22$core->tpl->addValue('AttachmentTitle',array('attachmentTpl','AttachmentTitle'));
23$core->tpl->addValue('AttachmentThumbnailURL',array('attachmentTpl','AttachmentThumbnailURL'));
24$core->tpl->addValue('AttachmentURL',array('attachmentTpl','AttachmentURL'));
25$core->tpl->addValue('MediaURL',array('attachmentTpl','MediaURL'));
26$core->tpl->addBlock('AttachmentIf',array('attachmentTpl','AttachmentIf'));
27
28$core->tpl->addValue('EntryAttachmentCount',array('attachmentTpl','EntryAttachmentCount'));
29
30$core->addBehavior('tplIfConditions',array('attachmentBehavior','tplIfConditions'));
31
32class attachmentTpl {
[2566]33
[407]34     /*dtd
35     <!ELEMENT tpl:Attachments - - -- Post Attachments loop -->
36     */
37     public static function Attachments($attr,$content)
38     {
[1280]39          $res =
40          "<?php\n".
41          'if ($_ctx->posts !== null && $core->media) {'."\n".
[3167]42               '$_ctx->attachments = new ArrayObject($core->media->getPostMedia($_ctx->posts->post_id,null,"attachment"));'."\n".
[407]43          "?>\n".
[2566]44
[1280]45          '<?php foreach ($_ctx->attachments as $attach_i => $attach_f) : '.
46          '$GLOBALS[\'attach_i\'] = $attach_i; $GLOBALS[\'attach_f\'] = $attach_f;'.
47          '$_ctx->file_url = $attach_f->file_url; ?>'.
[1221]48          $content.
[1280]49          '<?php endforeach; $_ctx->attachments = null; unset($attach_i,$attach_f,$_ctx->file_url); ?>'.
[2566]50
[407]51          "<?php } ?>\n";
[2566]52
[407]53          return $res;
54     }
[2566]55
[407]56     /*dtd
57     <!ELEMENT tpl:AttachmentsHeader - - -- First attachments result container -->
58     */
59     public static function AttachmentsHeader($attr,$content)
60     {
61          return
[1280]62          "<?php if (\$attach_i == 0) : ?>".
[407]63          $content.
64          "<?php endif; ?>";
65     }
[2566]66
[407]67     /*dtd
68     <!ELEMENT tpl:AttachmentsFooter - - -- Last attachments result container -->
69     */
70     public static function AttachmentsFooter($attr,$content)
71     {
72          return
[1280]73          "<?php if (\$attach_i+1 == count(\$_ctx->attachments)) : ?>".
[407]74          $content.
75          "<?php endif; ?>";
76     }
[2566]77
[407]78     /*dtd
79     <!ELEMENT tpl:AttachmentsIf - - -- Test on attachment fields -->
80     <!ATTLIST tpl:AttachmentIf
81     is_image  (0|1)     #IMPLIED  -- test if attachment is an image (value : 1) or not (value : 0)
82     has_thumb (0|1)     #IMPLIED  -- test if attachment has a square thumnail (value : 1) or not (value : 0)
83     is_mp3    (0|1)     #IMPLIED  -- test if attachment is a mp3 file (value : 1) or not (value : 0)
84     is_flv    (0|1)     #IMPLIED  -- test if attachment is a flv file (value : 1) or not (value : 0)
[3167]85     is_audio  (0|1)     #IMPLIED  -- test if attachment is an audio file (value : 1) or not (value : 0)
86     is_video  (0|1)     #IMPLIED  -- test if attachment is a video file (value : 1) or not (value : 0)
[407]87     >
88     */
89     public static function AttachmentIf($attr,$content)
90     {
91          $if = array();
[2566]92
[944]93          $operator = isset($attr['operator']) ? dcTemplate::getOperator($attr['operator']) : '&&';
[2566]94
[407]95          if (isset($attr['is_image'])) {
96               $sign = (boolean) $attr['is_image'] ? '' : '!';
[1280]97               $if[] = $sign.'$attach_f->media_image';
[407]98          }
[2566]99
[407]100          if (isset($attr['has_thumb'])) {
101               $sign = (boolean) $attr['has_thumb'] ? '' : '!';
[1280]102               $if[] = $sign.'isset($attach_f->media_thumb[\'sq\'])';
[407]103          }
[2566]104
[407]105          if (isset($attr['is_mp3'])) {
106               $sign = (boolean) $attr['is_mp3'] ? '==' : '!=';
[1280]107               $if[] = '$attach_f->type '.$sign.' "audio/mpeg3"';
[407]108          }
[2566]109
[407]110          if (isset($attr['is_flv'])) {
[3167]111               $sign = (boolean) $attr['is_flv'] ? '==' : '!=';
112               $if[] = '$attach_f->type '.$sign.' "video/x-flv"';
113          }
114
115          if (isset($attr['is_audio'])) {
116               $sign = (boolean) $attr['is_audio'] ? '==' : '!=';
117               $if[] = '$attach_f->type_prefix '.$sign.' "audio"';
118          }
119
120          if (isset($attr['is_video'])) {
121               $sign = (boolean) $attr['is_video'] ? '==' : '!=';
122               $if[] = '$attach_f->type_prefix '.$sign.' "video"';
[407]123          }
[2566]124
[415]125          if (count($if) != 0) {
[414]126               return '<?php if('.implode(' '.$operator.' ', (array) $if).') : ?>'.$content.'<?php endif; ?>';
[407]127          } else {
128               return $content;
129          }
130     }
[2566]131
[407]132     /*dtd
133     <!ELEMENT tpl:AttachmentMimeType - O -- Attachment MIME Type -->
134     */
135     public static function AttachmentMimeType($attr)
136     {
137          $f = $GLOBALS['core']->tpl->getFilters($attr);
[1280]138          return '<?php echo '.sprintf($f,'$attach_f->type').'; ?>';
[407]139     }
[2566]140
[407]141     /*dtd
142     <!ELEMENT tpl:AttachmentType - O -- Attachment type -->
143     */
144     public static function AttachmentType($attr)
145     {
146          $f = $GLOBALS['core']->tpl->getFilters($attr);
[1280]147          return '<?php echo '.sprintf($f,'$attach_f->media_type').'; ?>';
[407]148     }
[2566]149
[407]150     /*dtd
151     <!ELEMENT tpl:AttachmentFileName - O -- Attachment file name -->
152     */
153     public static function AttachmentFileName($attr)
154     {
155          $f = $GLOBALS['core']->tpl->getFilters($attr);
[1280]156          return '<?php echo '.sprintf($f,'$attach_f->basename').'; ?>';
[407]157     }
[2566]158
[407]159     /*dtd
160     <!ELEMENT tpl:AttachmentSize - O -- Attachment size -->
161     <!ATTLIST tpl:AttachmentSize
162     full CDATA     #IMPLIED  -- if set, size is rounded to a human-readable value (in KB, MB, GB, TB)
163     >
164     */
165     public static function AttachmentSize($attr)
166     {
167          $f = $GLOBALS['core']->tpl->getFilters($attr);
168          if (!empty($attr['full'])) {
[1280]169               return '<?php echo '.sprintf($f,'$attach_f->size').'; ?>';
[407]170          }
[1280]171          return '<?php echo '.sprintf($f,'files::size($attach_f->size)').'; ?>';
[407]172     }
[2566]173
[407]174     /*dtd
175     <!ELEMENT tpl:AttachmentTitle - O -- Attachment title -->
176     */
177     public static function AttachmentTitle($attr)
178     {
179          $f = $GLOBALS['core']->tpl->getFilters($attr);
[1280]180          return '<?php echo '.sprintf($f,'$attach_f->media_title').'; ?>';
[407]181     }
[2566]182
[407]183     /*dtd
184     <!ELEMENT tpl:AttachmentThumbnailURL - O -- Attachment square thumbnail URL -->
185     */
186     public static function AttachmentThumbnailURL($attr)
187     {
188          $f = $GLOBALS['core']->tpl->getFilters($attr);
189          return
190          '<?php '.
[1280]191          'if (isset($attach_f->media_thumb[\'sq\'])) {'.
192               'echo '.sprintf($f,'$attach_f->media_thumb[\'sq\']').';'.
[407]193          '}'.
194          '?>';
195     }
[2566]196
[407]197     /*dtd
198     <!ELEMENT tpl:AttachmentURL - O -- Attachment URL -->
199     */
200     public static function AttachmentURL($attr)
201     {
202          $f = $GLOBALS['core']->tpl->getFilters($attr);
[1280]203          return '<?php echo '.sprintf($f,'$attach_f->file_url').'; ?>';
[407]204     }
[2566]205
[464]206     public static function MediaURL($attr)
[407]207     {
208          $f = $GLOBALS['core']->tpl->getFilters($attr);
209          return '<?php echo '.sprintf($f,'$_ctx->file_url').'; ?>';
210     }
[2566]211
[407]212     /*dtd
213     <!ELEMENT tpl:EntryAttachmentCount - O -- Number of attachments for entry -->
214     <!ATTLIST tpl:EntryAttachmentCount
[2832]215     none CDATA     #IMPLIED  -- text to display for "no attachments" (default: no attachments)
[407]216     one  CDATA     #IMPLIED  -- text to display for "one attachment" (default: one attachment)
217     more CDATA     #IMPLIED  -- text to display for "more attachment" (default: %s attachment, %s is replaced by the number of attachments)
218     >
219     */
[464]220     public static function EntryAttachmentCount($attr)
[407]221     {
[2646]222          global $core;
223          return $core->tpl->displayCounter(
[3167]224               '$_ctx->posts->countMedia(\'attachment\')',
[2646]225               array(
[2832]226                    'none' => 'no attachments',
[2646]227                    'one'  => 'one attachment',
228                    'more' => '%d attachments'
229               ),
230               $attr,
231               false
232          );
[407]233     }
234}
235
236class attachmentBehavior
237{
238     public static function tplIfConditions($tag,$attr,$content,$if)
239     {
240          if ($tag == "EntryIf" && isset($attr['has_attachment'])) {
241               $sign = (boolean) $attr['has_attachment'] ? '' : '!';
[3167]242               $if[] = $sign.'$_ctx->posts->countMedia(\'attachment\')';
[407]243          }
244     }
245}
Note: See TracBrowser for help on using the repository browser.

Sites map