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 +292 -122 2.01.2 View file →
@@ -1,150 +1,320 @@
1 1 <?php
2 -defined('WPINC') OR exit;
2 +/*
3 +Plugin Name: Document Gallery
4 +Description: Display non-images (and images) in gallery format on a page or post with the [dg] shortcode.
5 +Version: 1.2
6 +Author: Dan Rossiter
7 +Author URI: http://danrossiter.org/
8 +License: GPL2
9 +*/
3 10
4 -/*
5 - Plugin Name: Document Gallery
6 - Description: Display non-images (and images) in gallery format on a page or post with the [dg] shortcode.
7 - Version: 2.0
8 - Author: Dan Rossiter
9 - Author URI: http://danrossiter.org/
10 - License: GPLv2
11 - Text Domain: document-gallery
12 - */
11 +define( 'DG_URL', plugin_dir_url( __FILE__ ) );
13 12
14 -// define helper paths & URLs
15 -define('DG_URL', plugin_dir_url(__FILE__));
16 -define('DG_PATH', plugin_dir_path(__FILE__));
17 -if(!defined('WP_INCLUDE_DIR')) {
18 - define('WP_INCLUDE_DIR', preg_replace('/wp-content$/', 'wp-includes', WP_CONTENT_DIR));
19 -}
20 -if(!defined('WP_ADMIN_DIR')) {
21 - define('WP_ADMIN_DIR', preg_replace('/wp-content$/', 'wp-admin', WP_CONTENT_DIR));
22 -}
13 +// CREATE GALLERY STRING //
14 +function dg_get_attachment_icons($atts) {
15 + extract( shortcode_atts( array(
16 + 'descriptions' => FALSE,
17 + 'orderby' => 'menu_order',
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 23
24 -// init DG options for use throughout plugin
25 -global $dg_options;
26 -define('DG_OPTION_NAME', 'document_gallery');
27 -$dg_options = get_option(DG_OPTION_NAME);
24 + // INIT
25 + $attachments = array();
26 + $errs = array();
28 27
29 -// handle activation and uninstallation
30 -include_once DG_PATH . 'inc/class-setup.php';
31 -register_activation_hook(__FILE__, array('DG_Setup', 'activation'));
32 -register_uninstall_hook(__FILE__, array('DG_Setup', 'uninstall'));
33 28
34 -// I18n
35 -add_action('plugins_loaded', array('DocumentGallery', 'loadTextDomain'));
29 + // ATTRIBUTE VALIDATION
30 + if( strtolower($descriptions) == "false" ){ $descriptions = FALSE; }
36 31
37 -// cleanup cached data when thumbed attachment deleted
38 -include_once DG_PATH . 'inc/class-thumber.php';
39 -add_action('delete_attachment', array('DG_Thumber', 'deleteThumbMeta'));
32 + $order = strtoupper( $order );
33 + if($order != 'ASC' && $order != 'DEC')
34 + $errs[] = "The order attribute must be either ASC or DEC. You entered $order.";
40 35
41 -if (is_admin()) {
42 - // admin house keeping
43 - include_once DG_PATH . 'admin/class-admin.php';
36 + if( strtolower($attachment_pg) == "false" ){ $attachment_pg = FALSE; }
44 37
45 - // add settings link
46 - add_filter('plugin_action_links_' . plugin_basename(__FILE__),
47 - array('DG_Admin', 'addSettingsLink'));
38 + if( strtolower($images) == "false" ){ $images = FALSE; }
48 39
49 - // build options page
50 - add_action('admin_menu', array('DG_Admin', 'addAdminPage'));
51 - if (!empty($GLOBALS['pagenow'])
52 - && ('options-general.php' === $GLOBALS['pagenow'] // output
53 - || 'options.php' === $GLOBALS['pagenow'])) { // validation
54 - add_action('admin_init', array('DG_Admin', 'registerAdminStyle'));
55 - add_action('admin_init', array('DG_Admin', 'registerSettings'));
56 - }
57 -} else {
58 - // styling for gallery
59 - add_action('wp_enqueue_scripts', array('DocumentGallery', 'enqueueGalleryStyle'));
60 -}
40 + if( strtolower($ids) ){ $ids = FALSE; }
61 41
62 -// adds 'dg' shortcode
63 -add_shortcode('dg', array('DocumentGallery', 'doShortcode'));
42 + // http://www.youtube.com/watch?v=ClnSMCdw6E8
43 + if( $errs ) return implode(' ', $errs);
44 + // END VALIDATION (WE MADE IT!)
64 45
65 -/**
66 - * DocumentGallery wraps basic functionality to setup the plugin.
67 - *
68 - * @author drossiter
69 - */
70 -class DocumentGallery {
71 46
72 - /*==========================================================================
73 - * THE SHORTCODE
74 - *=========================================================================*/
47 + // LET'S GET SOME DOCUMENTS!
48 + if( $ids && ( $ids = explode( ',', $ids ) ) ){
49 + $attachments = dg_get_attachments_by_ids( $ids );
50 + }
75 51
76 - /**
77 - * Takes values passed from attributes and returns sutable HTML to represent
78 - * all valid attachments requested.
79 - *
80 - * @param array $atts Arguments from the user.
81 - * @return string HTML for the Document Gallery.
82 - */
83 - public static function doShortcode($atts) {
84 - include_once 'inc/class-gallery.php';
85 - return new DG_Gallery($atts);
86 - }
52 + // if 'ids' was used, skip
53 + if( !$attachments ){
54 + $args = array(
55 + 'numberposts' => -1,
56 + 'orderby' => $orderby,
57 + 'order' => $order,
58 + 'post_type' => 'attachment',
59 + 'post_mime_type' => 'application,video,text,audio',
60 + 'post_parent' => get_the_ID() );
61 + if( $images ) $args['post_mime_type'] .= ',image';
87 62
88 - /**
89 - * Enqueue standard DG CSS.
90 - */
91 - public static function enqueueGalleryStyle() {
92 - global $dg_options;
93 - wp_register_style('dg-main', DG_URL . 'assets/css/style.css', null,
94 - self::version() . ':' . $dg_options['css']['version']);
95 - wp_enqueue_style('dg-main');
96 - }
63 + $attachments = get_posts($args);
64 + }
65 +
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 );
97 69
98 - public static function updateUserGalleryStyle($css) {
99 - $ret = false;
70 + $count = 0;
71 + foreach( $attachments as $attachment ) { //setup array for more than one file attachment
72 + $url = $attachment->guid;
73 + $filename = basename( $url );
100 74
101 - if ($css_file = file_get_contents(DG_PATH . 'assets/css/style.css')) {
102 - $css_file = preg_replace('#/\* CUSTOM USER CSS \*/.*#s',
103 - "/* CUSTOM USER CSS */\n" . $css, $css_file);
104 - $ret = (bool)file_put_contents(DG_PATH . 'assets/css/style.css', $css_file, LOCK_EX);
105 - }
75 + if( $attachment_pg ) // link to attachment page
76 + $url = get_attachment_link( $attachment->ID );
106 77
107 - return $ret;
108 - }
78 + $title = get_the_title( $attachment->ID );
79 + $icon = dg_get_attachment_image( $attachment->ID, $title, $filename );
80 +
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;
89 + }
109 90
110 - /*==========================================================================
111 - * I18n
112 - *=========================================================================*/
91 + $attachment_str[] = " <a href=\"$url\">$icon<br>$title</a>".PHP_EOL;
113 92
114 - public static function loadTextDomain() {
115 - load_plugin_textdomain('document-gallery', false, DG_PATH . 'languages');
116 - }
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 + }
102 + }
103 + } // end looping attachments
117 104
118 - /*==========================================================================
119 - * HELPER FUNCTIONS
120 - *=========================================================================*/
105 + // for galleries w/ number of docs != mult of 4
106 + if( $count % 4 != 0 && !$descriptions ){ // end wrapper
107 + $attachment_str[] = '</div>'.PHP_EOL;
108 + }
121 109
122 - /**
123 - * Gets the current version of the plugin.
124 - * @param bool recalculate Whether to re-read the file for version number.
125 - * @return str DG version installed.
126 - */
127 - public static function version($recalculate = false) {
128 - static $version = null;
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');
129 119
130 - if ($recalculate) {
131 - include_once WP_ADMIN_DIR . '/includes/plugin.php';
132 - $data = get_plugin_data(__FILE__, false);
133 - $version = $data['Version'];
134 - } elseif(is_null($version)) {
135 - global $dg_options;
136 - $version = $dg_options['version'];
137 - }
138 120
139 - return $version;
140 - }
141 121
142 - /**
143 - * Blocks instantiation. All functions are static.
144 - */
145 - private function __construct() {
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 +}
146 133
147 - }
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 );
137 +
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;
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...
303 + }
304 +
305 + return '<img src="'.DG_URL."icons/$icon\" title=\"$title\" alt=\"$title\" />";
148 306 }
149 307
150 -?>
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 +
320 +?>