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 +113 -51 1.0.11.2 View file →
@@ -1,26 +1,58 @@
1 1 <?php
2 2 /*
3 3 Plugin Name: Document Gallery
4 -Description: Display non-images in gallery format on page.
5 -Version: 1.0.1
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 -define( 'DG_URL', plugin_dir_url().'document-gallery/' );
11 +define( 'DG_URL', plugin_dir_url( __FILE__ ) );
12 12
13 13 // CREATE GALLERY STRING //
14 14 function dg_get_attachment_icons($atts) {
15 15 extract( shortcode_atts( array(
16 16 'descriptions' => FALSE,
17 - 'echo' => FALSE,
18 17 'orderby' => 'menu_order',
19 - 'order' => 'ASC'
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
20 22 ), $atts) );
21 -
22 - $args = array(
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 );
50 + }
51 +
52 + // if 'ids' was used, skip
53 + if( !$attachments ){
54 + $args = array(
23 55 'numberposts' => -1,
24 56 'orderby' => $orderby,
25 57 'order' => $order,
26 58 'post_type' => 'attachment',
@@ -25,74 +57,83 @@
25 57 'order' => $order,
26 58 'post_type' => 'attachment',
27 59 'post_mime_type' => 'application,video,text,audio',
28 60 'post_parent' => get_the_ID() );
61 + if( $images ) $args['post_mime_type'] .= ',image';
62 +
63 + $attachments = get_posts($args);
64 + }
29 65
30 - if ( $attachments = get_posts($args) ) {
31 - $attachment_str = array( '<!-- GENERATED USING DOCUMENT GALLERY'.PHP_EOL.
32 - ' http://wordpress.org/extend/plugins/document-gallery -->'.PHP_EOL );
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 );
33 69
34 - if($descriptions) {
35 - $attachment_str[] = '<table id="document-icon-wrapper">';
36 - }
37 -
38 70 $count = 0;
39 71 foreach( $attachments as $attachment ) { //setup array for more than one file attachment
40 - $url = wp_get_attachment_url( $attachment->ID );
41 - $title = wp_get_attachment_link( $attachment->ID );
42 - $icon = dg_get_attachment_icon( $attachment->ID, $tile, $url );
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 );
43 80
44 - if($descriptions) {
45 - $attachment_str[] = '<tr><td class="document-icon">';
46 - } else {
47 - if( $count % 4 == 0 ) {
48 - $attachment_str[] = '<div id="document-icon-wrapper">';
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;
49 87 }
50 - $attachment_str[] = '<div class="document-icon">';
88 + $attachment_str[] = ' <div class="document-icon">'.PHP_EOL;
51 89 }
52 90
53 - $attachment_str[] = "<a href=\"$url\">$icon</a><br><a href=\"$url\">$title</a>";
91 + $attachment_str[] = " <a href=\"$url\">$icon<br>$title</a>".PHP_EOL;
54 92
55 - if($descriptions) {
56 - $attachment_str[] = "</td><td valign=\"top\"><p>$attachment->post_content</p></td></tr>";
57 - } else {
58 - $attachment_str[] = '</div>';
59 - if( ++$count % 4 == 0 ) {
60 - $attachment_str[] = '</div>';
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;
61 101 }
62 102 }
63 103 } // end looping attachments
64 104
65 - // close #document-icon-wrapper
66 - if($descriptions) {
67 - $attachment_str[] = '</table>';
68 - } else {
69 - $attachment_str[] = '</div>';
105 + // for galleries w/ number of docs != mult of 4
106 + if( $count % 4 != 0 && !$descriptions ){ // end wrapper
107 + $attachment_str[] = '</div>'.PHP_EOL;
70 108 }
71 109
72 110 // join array & return
73 - $attachment_str = implode( '', $attachment_str );
74 - return $attachment_str;
75 - } // end if attachments
111 + return implode( '', $attachment_str );
112 + } // END DOCUMENT LOOP
76 113
77 - return '<!-- Document Gallery: No attachments to display. -->'.PHP_EOL;
114 + return PHP_EOL.'<!-- Document Gallery: No attachments to display. -->'.PHP_EOL;
78 115 }
79 -add_shortcode('document gallery', 'dg_get_attachment_icons');
80 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');
81 119
82 120
83 -// ADD SOME STYLING //
84 -function dg_add_header_css() {
85 - wp_enqueue_style( 'document-gallery-css', plugins_url('style.css', __FILE__) );
86 -}
87 -add_action( 'wp_print_styles', 'dg_add_header_css');
88 121
89 -
90 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
130 + }
131 + return $attachments;
132 +}
91 133
92 134 // pass in $title & $url to avoid mult function calls
93 -function dg_get_attachment_icon( $id, $title, $url ) {
94 - $filename = basename( $url );
135 +function dg_get_attachment_image( $id, $title, $filename ) {
95 136 $filetype = wp_check_filetype( $filename );
96 137
97 138 // identify extension
98 139 switch( $filetype['ext'] ) {
@@ -248,11 +289,32 @@
248 289 $icon = 'opendocument-formula.png';
249 290 break;
250 291 // fallback to default icons if not recognized
251 292 default:
252 - return get_attachment_icon( $id );
293 + // handle images
294 + if( preg_match( '/^image/', $filetype['type'] ) &&
295 + ( $icon = wp_get_attachment_image( $id, 'thumbnail', false ) ) )
296 + return $icon;
297 +
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;
301 +
302 + return "<!-- Failed to retrive icon for attachment #$id -->"; // everything failed. This is bad...
253 303 }
254 304
255 - $icon = '<img src="'.DG_URL.'icons/'.$icon."\" title=\"$title\" alt=\"$title\"/>";
256 - return $icon;
305 + return '<img src="'.DG_URL."icons/$icon\" title=\"$title\" alt=\"$title\" />";
257 306 }
307 +
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__) );
317 +}
318 +add_action( 'wp_print_styles', 'dg_add_header_css');
319 +
258 320 ?>