PluginProbe
Document Gallery / 1.2
Document Gallery v1.2
trunk 0.8 0.8.5 1.0 1.0.1 1.0.2 1.0.3 1.0.4 1.1 1.2 1.2.1 1.3 1.3.1 1.4 1.4.1 1.4.2 1.4.3 2.0 2.0.1 2.0.10 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 All 94 releases
← All changes | document-gallery.php +291 -112 0.81.2 View file →
@@ -1,141 +1,320 @@
1 1 <?php
2 2 /*
3 3 Plugin Name: Document Gallery
4 -Description: Display non-images in gallery format on page.
5 -Version: 0.8
4 +Description: Display non-images (and images) in gallery format on a page or post with the [dg] shortcode.
5 +Version: 1.2
6 6 Author: Dan Rossiter
7 7 Author URI: http://danrossiter.org/
8 8 License: GPL2
9 9 */
10 10
11 -/* much credit to: tgrayimages.com/automate-file-attachments-on-your-wordpress-posts/ */
12 -add_action( 'wp_print_styles', 'add_header_css');
11 +define( 'DG_URL', plugin_dir_url( __FILE__ ) );
13 12
14 -function add_header_css() {
15 - wp_enqueue_style('document-gallery-css', plugins_url('style.css', __FILE__));
16 -}
17 -
18 -function get_attachment_icons($atts){
19 - extract(shortcode_atts(array(
13 +// CREATE GALLERY STRING //
14 +function dg_get_attachment_icons($atts) {
15 + extract( shortcode_atts( array(
20 16 'descriptions' => FALSE,
21 - 'echo' => FALSE,
22 17 'orderby' => 'menu_order',
23 - 'order' => 'ASC'
24 - ), $atts));
25 -
26 - if($descriptions){
27 - $sAttachmentString = "<table id='documentIconsWrapper'> \n";
28 - } else{
29 - $sAttachmentString = "<div id='documentIconsWrapper'> \n";
18 + 'order' => 'ASC',
19 + 'attachment_pg' => FALSE, // default: link directly to file (true to link to attachment pg)
20 + 'images' => FALSE, // if enabled, all images attached to current page will be included also
21 + 'ids' => FALSE // comma-separated list of attachment ids
22 + ), $atts) );
23 +
24 + // INIT
25 + $attachments = array();
26 + $errs = array();
27 +
28 +
29 + // ATTRIBUTE VALIDATION
30 + if( strtolower($descriptions) == "false" ){ $descriptions = FALSE; }
31 +
32 + $order = strtoupper( $order );
33 + if($order != 'ASC' && $order != 'DEC')
34 + $errs[] = "The order attribute must be either ASC or DEC. You entered $order.";
35 +
36 + if( strtolower($attachment_pg) == "false" ){ $attachment_pg = FALSE; }
37 +
38 + if( strtolower($images) == "false" ){ $images = FALSE; }
39 +
40 + if( strtolower($ids) ){ $ids = FALSE; }
41 +
42 + // http://www.youtube.com/watch?v=ClnSMCdw6E8
43 + if( $errs ) return implode(' ', $errs);
44 + // END VALIDATION (WE MADE IT!)
45 +
46 +
47 + // LET'S GET SOME DOCUMENTS!
48 + if( $ids && ( $ids = explode( ',', $ids ) ) ){
49 + $attachments = dg_get_attachments_by_ids( $ids );
30 50 }
31 - $args = array(
51 +
52 + // if 'ids' was used, skip
53 + if( !$attachments ){
54 + $args = array(
32 55 'numberposts' => -1,
33 - 'orderby' => $orderby,
34 - 'order' => $order,
35 - 'post_type' => 'attachment',
36 - 'post_mime_type' => 'application',
56 + 'orderby' => $orderby,
57 + 'order' => $order,
58 + 'post_type' => 'attachment',
59 + 'post_mime_type' => 'application,video,text,audio',
37 60 'post_parent' => get_the_ID() );
61 + if( $images ) $args['post_mime_type'] .= ',image';
62 +
63 + $attachments = get_posts($args);
64 + }
38 65
39 - if ( $attachments = get_posts($args) ){
66 + if ( $attachments ) { // DOCUMENT LOOP
67 + $attachment_str = array( PHP_EOL.'<!-- Generated using Document Gallery. Get yours here: '.
68 + 'http://wordpress.org/extend/plugins/document-gallery -->'.PHP_EOL );
69 +
40 70 $count = 0;
41 - foreach( $attachments as $attachment ){ //setup array for more than one file attachment
42 - $attachment_url = wp_get_attachment_url($attachment->ID);
43 - $attachment_name_array = explode("/",$attachment_url);
44 - $attachment_title = wp_get_attachment_link($attachment->ID);
45 -
46 - if($descriptions){
47 - $sAttachmentString .= "<tr><td class='documentIcons'><a href='$attachment_url'>";
48 - } else{
49 - $sAttachmentString .= "<div class='documentIcons'><a href='$attachment_url'>";
50 - }
71 + foreach( $attachments as $attachment ) { //setup array for more than one file attachment
72 + $url = $attachment->guid;
73 + $filename = basename( $url );
74 +
75 + if( $attachment_pg ) // link to attachment page
76 + $url = get_attachment_link( $attachment->ID );
77 +
78 + $title = get_the_title( $attachment->ID );
79 + $icon = dg_get_attachment_image( $attachment->ID, $title, $filename );
51 80
52 - switch(get_post_mime_type( $attachment->ID )){
53 - case 'application/pdf': // pdf files
54 - $sAttachmentString .= "<img src='".plugins_url('images/pdf.png', __FILE__)."'/>";
55 - break;
56 - case 'application/msword': // word files
57 - $sAttachmentString .= "<img src='".plugins_url('images/word.png' , __FILE__)."'/>";
58 - break;
59 - case 'application/vnd.ms-powerpoint': // powerpoint files
60 - $sAttachmentString .= "<img src='".plugins_url('images/PowerPoint.png' , __FILE__)."'/>";
61 - break;
62 - case 'application/vnd.ms-excel': // excel files
63 - $sAttachmentString .= "<img src='".plugins_url( 'images/XLS8.png' , __FILE__)."'/>";
64 - break;
65 - case 'application/zip': // zip files
66 - $sAttachmentString .= "<img src='".plugins_url( 'images/zip.png' , __FILE__)."'/>";
67 - break;
68 - default:
69 - continue;
81 + if($descriptions) { // start wrapper
82 + $attachment_str[] = '<div class="document-icon-wrapper descriptions">'.PHP_EOL.
83 + ' <div class="document-icon">'.PHP_EOL;
84 + } else { // no description
85 + if( $count % 4 == 0 ) { // start wrapper
86 + $attachment_str[] = '<div id="document-icon-wrapper">'.PHP_EOL;
87 + }
88 + $attachment_str[] = ' <div class="document-icon">'.PHP_EOL;
70 89 }
71 -
72 - $sAttachmentString .= "</a><br><a href='$attachment_url'>$attachment_title</a>";
73 - if($descriptions){
74 - $sAttachmentString .= "</td><td valign='top'><p>$attachment->post_content</p></td></tr>";
75 - }else{
76 - $sAttachmentString .= "</div>";
77 - if(++$count % 4 == 0)
78 - $sAttachmentString .= "<hr>";
90 +
91 + $attachment_str[] = " <a href=\"$url\">$icon<br>$title</a>".PHP_EOL;
92 +
93 + if($descriptions) { // end icon & add description
94 + $attachment_str[] = ' </div>'.PHP_EOL.
95 + " <p>$attachment->post_content</p>".
96 + PHP_EOL.'</div>'.PHP_EOL;
97 + } else { // end icon
98 + $attachment_str[] = ' </div>'.PHP_EOL;
99 + if( ++$count % 4 == 0 ) { // end wrapper
100 + $attachment_str[] = '</div>'.PHP_EOL;
101 + }
79 102 }
103 + } // end looping attachments
104 +
105 + // for galleries w/ number of docs != mult of 4
106 + if( $count % 4 != 0 && !$descriptions ){ // end wrapper
107 + $attachment_str[] = '</div>'.PHP_EOL;
80 108 }
109 +
110 + // join array & return
111 + return implode( '', $attachment_str );
112 + } // END DOCUMENT LOOP
113 +
114 + return PHP_EOL.'<!-- Document Gallery: No attachments to display. -->'.PHP_EOL;
115 +}
116 +add_shortcode('dg', 'dg_get_attachment_icons');
117 +// Depreciated as of v1.0. left for backward compatibility
118 +add_shortcode('document gallery', 'dg_get_attachment_icons');
119 +
120 +
121 +
122 +// HELPERS //
123 +function dg_get_attachments_by_ids( $ids ){
124 + $attachments = array();
125 + foreach( $ids as $id ){
126 + $attachment = get_post( $id );
127 + if( $attachment->post_type == 'attachment' )
128 + $attachments[] = $attachment;
129 + // else: not an attachment so skip
81 130 }
131 + return $attachments;
132 +}
82 133
83 - //Audio Files
84 - /*$mp3s = get_children(array( //do only if there are attachments of these qualifications
85 - 'post_parent' => get_the_ID(),
86 - 'post_type' => 'attachment',
87 - 'numberposts' => -1,
88 - 'post_mime_type' => 'audio', //MIME Type condition
89 - ) );
134 +// pass in $title & $url to avoid mult function calls
135 +function dg_get_attachment_image( $id, $title, $filename ) {
136 + $filetype = wp_check_filetype( $filename );
90 137
91 - if (!empty($mp3s)) :
92 - $sAttachmentString .= "<ul class='audiofiles'>";
93 - foreach($mp3s as $mp3) :
94 - $sAttachmentString .= "<li>";
95 - if(!empty($mp3->post_title)) : //checking to make sure the post title isn't empty
96 - $sAttachmentString .= "<h4 class='title'>".$mp3->post_title."</h4>";
97 - endif;
138 + // identify extension
139 + switch( $filetype['ext'] ) {
140 + // Most Common First
141 + case 'pdf':
142 + $icon = 'pdf.png';
143 + break;
144 + // MS Office
145 + case 'doc':
146 + case 'docx':
147 + case 'docm':
148 + case 'dotx':
149 + case 'dotm':
150 + $icon = 'msdoc.png';
151 + break;
152 + case 'ppt':
153 + case 'pot':
154 + case 'pps':
155 + case 'pptx':
156 + case 'pptm':
157 + case 'ppsx':
158 + case 'ppsm':
159 + case 'potx':
160 + case 'potm':
161 + case 'ppam':
162 + case 'sldx':
163 + case 'sldm':
164 + $icon = 'msppt.png';
165 + break;
166 + case 'xla':
167 + case 'xls':
168 + case 'xlt':
169 + case 'xlw':
170 + case 'xlsx':
171 + case 'xlsm':
172 + case 'xlsb':
173 + case 'xltx':
174 + case 'xltm':
175 + case 'xlam':
176 + $icon = 'msxls.png';
177 + break;
178 + case 'mdb':
179 + $icon = 'msaccess.png';
180 + break;
181 + // Video formats
182 + case 'avi':
183 + $icon = 'avi.png';
184 + break;
185 + case 'divx':
186 + $icon = 'divx.png';
187 + break;
188 + case 'flv':
189 + $icon = 'flv.png';
190 + break;
191 + case 'qt':
192 + case 'mov':
193 + $icon = 'mov.png';
194 + break;
195 + case 'asf':
196 + case 'asx':
197 + case 'wax':
198 + case 'wmv':
199 + case 'wmx':
200 + $icon = 'wmv.png';
201 + break;
202 + case 'mkv':
203 + $icon = 'mkv.png';
204 + break;
205 + // Audio formats
206 + case 'mp3':
207 + $icon = 'mp3.png';
208 + break;
209 + case 'wav':
210 + $icon = 'wav.png';
211 + break;
212 + case 'ogg':
213 + case 'oga':
214 + $icon = 'ogg.png';
215 + break;
216 + case 'midi':
217 + case 'mid':
218 + $icon = 'midi.png';
219 + break;
220 + case 'wma':
221 + $icon = 'wma.png';
222 + break;
223 + // Text formats
224 + case 'rtx':
225 + $icon = 'rtx.png';
226 + break;
227 + case 'ics':
228 + $icon = 'ics.png';
229 + break;
230 + case 'csv':
231 + $icon = 'csv.png';
232 + break;
233 + // Msc application formats
234 + case 'html':
235 + case 'htm': // death to all who use this!
236 + $icon = 'html.png';
237 + break;
238 + case 'css':
239 + $icon = 'css.png';
240 + break;
241 + case 'js':
242 + $icon = 'javascript.png';
243 + break;
244 + case 'class':
245 + $icon = 'java.png';
246 + break;
247 + case 'zip':
248 + $icon = 'zip.png';
249 + break;
250 + case 'tar':
251 + case 'gzip':
252 + case 'gz':
253 + case 'bz2': // not yet WP-supported
254 + case 'tgz': // not yet WP-supported
255 + $icon = 'compressed.png';
256 + break;
257 + case 'rar': // RAWR!!!
258 + $icon = 'rar.png';
259 + break;
260 + case '7z':
261 + $icon = '7zip.png';
262 + break;
263 + case 'exec':
264 + $icon = 'exec.png';
265 + break;
266 + case 'rtf':
267 + $icon = 'rtf.png';
268 + break;
269 + case 'swf':
270 + $icon = 'shockwave.png';
271 + break;
272 + // OpenOffice formats
273 + case 'odt':
274 + $icon = 'opendocument-text.png';
275 + break;
276 + case 'odp':
277 + $icon = 'opendocument-presentation.png';
278 + break;
279 + case 'ods':
280 + $icon = 'opendocument-spreadsheet.png';
281 + break;
282 + case 'odg':
283 + $icon = 'opendocument-graphics.png';
284 + break;
285 + case 'odb':
286 + $icon = 'opendocument-database.png';
287 + break;
288 + case 'odf':
289 + $icon = 'opendocument-formula.png';
290 + break;
291 + // fallback to default icons if not recognized
292 + default:
293 + // handle images
294 + if( preg_match( '/^image/', $filetype['type'] ) &&
295 + ( $icon = wp_get_attachment_image( $id, 'thumbnail', false ) ) )
296 + return $icon;
98 297
99 - if(!empty($mp3->post_content)) : //checking to make sure something exists in post_content (description)
100 - $sAttachmentString .= "<p class='description'>".$mp3->post_content."</p>";
101 - endif;
298 + // fallback to wp defaults - get_attachment_icon is DEPRECIATED! (replaced in dg v1.1)
299 + if( $icon = wp_get_attachment_image( $id, null, true ) )
300 + return $icon;
102 301
103 - $sAttachmentString .= "<object width='470' height='24' id='single".$mp3->ID."' name='single".$mp3->ID."'>";
104 - $sAttachmentString .= "<param name='movie' value='player.swf'>";
105 - $sAttachmentString .= "<param name='allowfullscreen' value='true'>";
106 - $sAttachmentString .= "<param name='allowscriptaccess' value='always'>";
107 - $sAttachmentString .= "<param name='wmode' value='transparent'>";
108 - $sAttachmentString .= "<param name='flashvars' value='file=".$mp3->guid."'>";
109 - $sAttachmentString .= "<embed ";
110 - $sAttachmentString .= "id='single".$mp3->ID."' ";
111 - $sAttachmentString .= "name='single".$mp3->ID."' ";
112 - $sAttachmentString .= "src='".get_bloginfo('template_directory')."/jw/player.swf' ";
113 - $sAttachmentString .= "width='470' ";
114 - $sAttachmentString .= "height='24' ";
115 - $sAttachmentString .= "bgcolor='#ffffff' ";
116 - $sAttachmentString .= "allowscriptaccess='always' ";
117 - $sAttachmentString .= "allowfullscreen='true' ";
118 - $sAttachmentString .= "flashvars='file=".$mp3->guid."' ";
302 + return "<!-- Failed to retrive icon for attachment #$id -->"; // everything failed. This is bad...
303 + }
119 304
120 - $sAttachmentString .= "/>";
121 - $sAttachmentString .= "</object>";
122 - $sAttachmentString .= "<a href='".$mp3->guid."'>Download</a>";
123 - $sAttachmentString .= "</li>";
124 - endforeach;
125 - $sAttachmentString .= "</ul>";
126 - endif;*/
305 + return '<img src="'.DG_URL."icons/$icon\" title=\"$title\" alt=\"$title\" />";
306 +}
127 307
128 - if($descriptions){
129 - $sAttachmentString .= "</table>";
130 - }else{
131 - $sAttachmentString .= "</div>";
132 - }
133 - /*$finalString = implode('', $sAttachmentString);*/
134 - if($echo){
135 - /*echo $finalString;*/
136 - echo $sAttachmentString;
137 - }
138 - return $sAttachmentString; /*$finalString;*/
308 +// Filtering attachment_icon was considered, then dismissed in v1.0.3 because it would mean almost
309 +// doubling the amount of processing for each icon. The native WP function would create the icon,
310 +// then 99% of the time this function would replace it. Better to just call the native WP function
311 +// at the end when needed. Filter would look like this:
312 +// add_filter( 'attachment_icon', 'dg_get_attachment_icon', 10, 2 );v
313 +
314 +// ADD SOME STYLING //
315 +function dg_add_header_css() {
316 + wp_enqueue_style( 'document-gallery-css', plugins_url('style.css', __FILE__) );
139 317 }
140 -add_shortcode('document gallery', 'get_attachment_icons');
318 +add_action( 'wp_print_styles', 'dg_add_header_css');
319 +
141 320 ?>