PluginProbe ʕ •ᴥ•ʔ
Image Widget / 3.3.1
Image Widget v3.3.1
trunk 1.0 2.0 2.1 2.2 2.2.1 2.2.2 3.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.1 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.2 3.2.1 3.2.10 3.2.11 3.2.2 3.2.3 3.2.4 3.2.5 3.2.7 3.2.8 3.2.9 3.3 3.3.1 3.3.2 3.3.3 3.3.4 3.3.5 3.3.6 3.3.7 4.0 4.0.1 4.0.2 4.0.3 4.0.4 4.0.5 4.0.6 4.0.7 4.0.8 4.0.9 4.1 4.1.1 4.1.2 4.2 4.2.1 4.2.2 4.3 4.3.1 4.4 4.4.1 4.4.11 4.4.12 4.4.2 4.4.3 4.4.4 4.4.5 4.4.6 4.4.7 4.4.8 4.4.9
image-widget / image-widget.php
image-widget Last commit date
lang 14 years ago views 14 years ago image-widget.js 14 years ago image-widget.php 14 years ago readme.txt 14 years ago screenshot-1.png 14 years ago screenshot-2.png 14 years ago screenshot-3.png 14 years ago
image-widget.php
307 lines
1 <?php
2 /*
3 Plugin Name: Image Widget
4 Plugin URI: http://wordpress.org/extend/plugins/image-widget/
5 Description: Simple image widget that uses native Wordpress upload thickbox to add image widgets to your site.
6 Author: Modern Tribe, Inc.
7 Version: 3.3.1
8 Author URI: http://tri.be
9 */
10
11 // Block direct requests
12 if ( !defined('ABSPATH') )
13 die('-1');
14
15 // Load the widget on widgets_init
16 function tribe_load_image_widget() {
17 register_widget('Tribe_Image_Widget');
18 }
19 add_action('widgets_init', 'tribe_load_image_widget');
20
21 /**
22 * Tribe_Image_Widget class
23 **/
24 class Tribe_Image_Widget extends WP_Widget {
25
26 var $pluginDomain = 'sp_image_widget';
27
28 /**
29 * SP Image Widget constructor
30 *
31 * @author Modern Tribe, Inc. (Peter Chester)
32 */
33 function Tribe_Image_Widget() {
34 $this->loadPluginTextDomain();
35 $widget_ops = array( 'classname' => 'widget_sp_image', 'description' => __( 'Showcase a single image with a Title, URL, and a Description', $this->pluginDomain ) );
36 $control_ops = array( 'id_base' => 'widget_sp_image' );
37 $this->WP_Widget('widget_sp_image', __('Image Widget', $this->pluginDomain), $widget_ops, $control_ops);
38 $this->register_scripts_and_styles();
39
40 global $pagenow;
41 if (defined("WP_ADMIN") && WP_ADMIN) {
42 add_action( 'admin_init', array( $this, 'fix_async_upload_image' ) );
43
44 if ( 'widgets.php' == $pagenow ) {
45 wp_enqueue_style( 'thickbox' );
46 wp_enqueue_script( 'tribe-image-widget' );
47 add_action( 'admin_head-widgets.php', array( $this, 'admin_head' ) );
48 }
49 elseif ( 'media-upload.php' == $pagenow || 'async-upload.php' == $pagenow ) {
50 wp_enqueue_script( 'fix-browser-upload' );
51 add_filter( 'image_send_to_editor', array( $this,'image_send_to_editor'), 1, 8 );
52 add_filter( 'gettext', array( $this, 'replace_text_in_thickbox' ), 1, 3 );
53 add_filter( 'media_upload_tabs', array( $this, 'media_upload_tabs' ) );
54 }
55 }
56
57 }
58
59 function register_scripts_and_styles() {
60 $dir = plugins_url('/', __FILE__);
61 wp_register_script( 'tribe-image-widget', $dir . 'image-widget.js', array('jquery','thickbox'), false, true );
62 }
63
64 function fix_async_upload_image() {
65 if(isset($_REQUEST['attachment_id'])) {
66 $id = (int) $_REQUEST['attachment_id'];
67 $GLOBALS['post'] = get_post( $id );
68 }
69 }
70
71 function loadPluginTextDomain() {
72 load_plugin_textdomain( $this->pluginDomain, false, trailingslashit(basename(dirname(__FILE__))) . 'lang/');
73 }
74
75 /**
76 * Retrieve resized image URL
77 *
78 * @param int $id Post ID or Attachment ID
79 * @param int $width desired width of image (optional)
80 * @param int $height desired height of image (optional)
81 * @return string URL
82 * @author Modern Tribe, Inc. (Peter Chester)
83 */
84 function get_image_url( $id, $width=false, $height=false ) {
85
86 /**/
87 // Get attachment and resize but return attachment path (needs to return url)
88 $attachment = wp_get_attachment_metadata( $id );
89 $attachment_url = wp_get_attachment_url( $id );
90 if (isset($attachment_url)) {
91 if ($width && $height) {
92 $uploads = wp_upload_dir();
93 $imgpath = $uploads['basedir'].'/'.$attachment['file'];
94 if (WP_DEBUG) {
95 error_log(__CLASS__.'->'.__FUNCTION__.'() $imgpath = '.$imgpath);
96 }
97 $image = image_resize( $imgpath, $width, $height );
98 if ( $image && !is_wp_error( $image ) ) {
99 $image = path_join( dirname($attachment_url), basename($image) );
100 } else {
101 $image = $attachment_url;
102 }
103 } else {
104 $image = $attachment_url;
105 }
106 if (isset($image)) {
107 return $image;
108 }
109 }
110 }
111
112 /**
113 * Test context to see if the uploader is being used for the image widget or for other regular uploads
114 *
115 * @author Modern Tribe, Inc. (Peter Chester)
116 */
117 function is_sp_widget_context() {
118 if ( isset($_SERVER['HTTP_REFERER']) && strpos($_SERVER['HTTP_REFERER'],$this->id_base) !== false ) {
119 return true;
120 } elseif ( isset($_REQUEST['_wp_http_referer']) && strpos($_REQUEST['_wp_http_referer'],$this->id_base) !== false ) {
121 return true;
122 } elseif ( isset($_REQUEST['widget_id']) && strpos($_REQUEST['widget_id'],$this->id_base) !== false ) {
123 return true;
124 }
125 return false;
126 }
127
128 /**
129 * Somewhat hacky way of replacing "Insert into Post" with "Insert into Widget"
130 *
131 * @param string $translated_text text that has already been translated (normally passed straight through)
132 * @param string $source_text text as it is in the code
133 * @param string $domain domain of the text
134 * @author Modern Tribe, Inc. (Peter Chester)
135 */
136 function replace_text_in_thickbox($translated_text, $source_text, $domain) {
137 if ( $this->is_sp_widget_context() ) {
138 if ('Insert into Post' == $source_text) {
139 return __('Insert Into Widget', $this->pluginDomain );
140 }
141 }
142 return $translated_text;
143 }
144
145 /**
146 * Filter image_end_to_editor results
147 *
148 * @param string $html
149 * @param int $id
150 * @param string $alt
151 * @param string $title
152 * @param string $align
153 * @param string $url
154 * @param array $size
155 * @return string javascript array of attachment url and id or just the url
156 * @author Modern Tribe, Inc. (Peter Chester)
157 */
158 function image_send_to_editor( $html, $id, $caption, $title, $align, $url, $size, $alt = '' ) {
159 // Normally, media uploader return an HTML string (in this case, typically a complete image tag surrounded by a caption).
160 // Don't change that; instead, send custom javascript variables back to opener.
161 // Check that this is for the widget. Shouldn't hurt anything if it runs, but let's do it needlessly.
162 if ( $this->is_sp_widget_context() ) {
163 if ($alt=='') $alt = $title;
164 ?>
165 <script type="text/javascript">
166 // send image variables back to opener
167 var win = window.dialogArguments || opener || parent || top;
168 win.IW_html = '<?php echo addslashes($html); ?>';
169 win.IW_img_id = '<?php echo $id; ?>';
170 win.IW_alt = '<?php echo addslashes($alt); ?>';
171 win.IW_caption = '<?php echo addslashes($caption); ?>';
172 win.IW_title = '<?php echo addslashes($title); ?>';
173 win.IW_align = '<?php echo esc_attr($align); ?>';
174 win.IW_url = '<?php echo esc_url($url); ?>';
175 win.IW_size = '<?php echo esc_attr($size); ?>';
176 </script>
177 <?php
178 }
179 return $html;
180 }
181
182 /**
183 * Remove from url tab until that functionality is added to widgets.
184 *
185 * @param array $tabs
186 * @author Modern Tribe, Inc. (Peter Chester)
187 */
188 function media_upload_tabs($tabs) {
189 if ( $this->is_sp_widget_context() ) {
190 unset($tabs['type_url']);
191 }
192 return $tabs;
193 }
194
195
196 /**
197 * Widget frontend output
198 *
199 * @param array $args
200 * @param array $instance
201 * @author Modern Tribe, Inc. (Peter Chester)
202 */
203 function widget( $args, $instance ) {
204 extract( $args );
205 extract( $instance );
206 $title = apply_filters( 'widget_title', empty( $title ) ? '' : $title );
207
208 include( $this->getTemplateHierarchy( 'widget' ) );
209 }
210
211 /**
212 * Update widget options
213 *
214 * @param object $new_instance Widget Instance
215 * @param object $old_instance Widget Instance
216 * @return object
217 * @author Modern Tribe, Inc. (Peter Chester)
218 */
219 function update( $new_instance, $old_instance ) {
220 $instance = $old_instance;
221 $instance['title'] = strip_tags($new_instance['title']);
222 if ( isset($new_instance['description']) ) {
223 if ( current_user_can('unfiltered_html') ) {
224 $instance['description'] = $new_instance['description'];
225 } else {
226 $instance['description'] = wp_filter_post_kses($new_instance['description']);
227 }
228 }
229 $instance['link'] = $new_instance['link'];
230 $instance['image'] = $new_instance['image'];
231 $instance['imageurl'] = $this->get_image_url($new_instance['image'],$new_instance['width'],$new_instance['height']); // image resizing not working right now
232 if( $_SERVER["HTTPS"] == "on" ) {
233 $instance['imageurl'] = str_replace('http://', 'https://', $instance['imageurl']);
234 }
235 $instance['linktarget'] = $new_instance['linktarget'];
236 $instance['width'] = $new_instance['width'];
237 $instance['height'] = $new_instance['height'];
238 $instance['align'] = $new_instance['align'];
239 $instance['alt'] = $new_instance['alt'];
240
241 return $instance;
242 }
243
244 /**
245 * Form UI
246 *
247 * @param object $instance Widget Instance
248 * @author Modern Tribe, Inc. (Peter Chester)
249 */
250 function form( $instance ) {
251
252 $instance = wp_parse_args( (array) $instance, array(
253 'title' => '',
254 'description' => '',
255 'link' => '',
256 'linktarget' => '',
257 'width' => '',
258 'height' => '',
259 'image' => '',
260 'imageurl' => '',
261 'align' => '',
262 'alt' => ''
263 ) );
264 include( $this->getTemplateHierarchy( 'widget-admin' ) );
265 }
266
267 /**
268 * Admin header css
269 *
270 * @author Modern Tribe, Inc. (Peter Chester)
271 */
272 function admin_head() {
273 ?>
274 <style type="text/css">
275 .aligncenter {
276 display: block;
277 margin-left: auto;
278 margin-right: auto;
279 }
280 </style>
281 <?php
282 }
283
284 /**
285 * Loads theme files in appropriate hierarchy: 1) child theme,
286 * 2) parent template, 3) plugin resources. will look in the image-widget/
287 * directory in a theme and the views/ directory in the plugin
288 *
289 * @param string $template template file to search for
290 * @return template path
291 * @author Modern Tribe, Inc. (Matt Wiebe)
292 **/
293
294 function getTemplateHierarchy($template) {
295 // whether or not .php was added
296 $template_slug = rtrim($template, '.php');
297 $template = $template_slug . '.php';
298
299 if ( $theme_file = locate_template(array('image-widget/'.$template)) ) {
300 $file = $theme_file;
301 } else {
302 $file = 'views/' . $template;
303 }
304 return apply_filters( 'sp_template_image-widget_'.$template, $file);
305 }
306 }
307