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