PluginProbe
Vimeography: Vimeo Video Gallery WordPress Plugin / 0.5.2
Vimeography: Vimeo Video Gallery WordPress Plugin v0.5.2
2.4.9 2.4.8 trunk 0.5.1 0.5.2 0.5.3 0.5.4 0.5.5 0.5.6 0.5.7 0.6 0.6.1 0.6.2 0.6.3 0.6.4 0.6.5 0.6.6 0.6.7 0.6.8 0.6.8.1 0.6.9 0.6.9.1 0.6.9.2 0.7 0.8 All 103 releases
vimeography / vimeography.php

vimeography.php in Vimeography: Vimeo Video Gallery WordPress Plugin 0.5.2, at vimeography.php

493 lines 17.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /*
3 Plugin Name: Vimeography
4 Plugin URI: http://vimeography.com
5 Description: Vimeography is the easiest way to set up a custom Vimeo gallery on your site.
6 Version: 0.5.2
7 Author: Dave Kiss
8 Author URI: http://davekiss.com
9 License: MIT
10 */
11
12 if (!function_exists('json_decode'))
13 wp_die('Vimeography needs the JSON PHP extension.');
14
15 global $wpdb;
16 $wp_upload_dir = wp_upload_dir();
17
18 // Define constants
19 define( 'VIMEOGRAPHY_URL', plugin_dir_url(__FILE__) );
20 define( 'VIMEOGRAPHY_PATH', plugin_dir_path(__FILE__) );
21 define( 'VIMEOGRAPHY_THEME_URL', $wp_upload_dir['baseurl'].'/vimeography-themes/' );
22 define( 'VIMEOGRAPHY_THEME_PATH', $wp_upload_dir['basedir'].'/vimeography-themes/' );
23 define( 'VIMEOGRAPHY_BASENAME', plugin_basename( __FILE__ ) );
24 define( 'VIMEOGRAPHY_VERSION', '0.5.2');
25 define( 'VIMEOGRAPHY_GALLERY_TABLE', $wpdb->prefix . "vimeography_gallery");
26 define( 'VIMEOGRAPHY_GALLERY_META_TABLE', $wpdb->prefix . "vimeography_gallery_meta");
27 define( 'VIMEOGRAPHY_CURRENT_PAGE', basename($_SERVER['PHP_SELF']));
28
29 require_once(VIMEOGRAPHY_PATH . '/vendor/mustache/Mustache.php');
30
31 class Vimeography
32 {
33 public function __construct()
34 {
35 add_action( 'init', array(&$this, 'vimeography_init') );
36 add_action( 'admin_init', array(&$this, 'vimeography_requires_wordpress_version') );
37 add_action( 'plugins_loaded', array(&$this, 'vimeography_update_db_check') );
38 add_action( 'admin_menu', array(&$this, 'vimeography_add_menu') );
39
40 register_activation_hook( VIMEOGRAPHY_BASENAME, array(&$this, 'vimeography_create_tables') );
41
42 add_filter( 'plugin_action_links', array(&$this, 'vimeography_filter_plugin_actions'), 10, 2 );
43 add_shortcode( 'vimeography', array(&$this, 'vimeography_shortcode') );
44
45 // Add shortcode support for widgets
46 add_filter( 'widget_text', 'do_shortcode' );
47 }
48
49 public function vimeography_init()
50 {
51 if(in_array(VIMEOGRAPHY_CURRENT_PAGE, array('post.php', 'page.php', 'page-new.php', 'post-new.php'))){
52 add_action('admin_footer', array(&$this, 'vimeography_add_mce_popup'));
53 }
54
55 if ( get_user_option('rich_editing') == 'true' ) {
56 add_filter( 'mce_external_plugins', array(&$this, 'vimeography_add_editor_plugin' ));
57 add_filter( 'mce_buttons', array(&$this, 'vimeography_register_editor_button') );
58 }
59
60 }
61
62 public function vimeography_register_editor_button($buttons)
63 {
64 array_push( $buttons, "|", "vimeography" );
65 return $buttons;
66 }
67
68 public function vimeography_add_editor_plugin( $plugin_array ) {
69 $plugin_array['vimeography'] = VIMEOGRAPHY_URL . 'media/js/mce.js';
70 return $plugin_array;
71 }
72
73 /**
74 * Check the wordpress version is compatible, and disable plugin if not.
75 *
76 * @access public
77 * @return void
78 */
79 public function vimeography_requires_wordpress_version() {
80 global $wp_version;
81 $plugin = plugin_basename( __FILE__ );
82 $plugin_data = get_plugin_data( __FILE__, false );
83
84 if ( version_compare($wp_version, "3.3", "<" ) ) {
85 if( is_plugin_active($plugin) ) {
86 deactivate_plugins( $plugin );
87 wp_die( "'".$plugin_data['Name']."' requires WordPress 3.3 or higher, and has been deactivated! Please upgrade WordPress and try again.<br /><br />Back to <a href='".admin_url()."'>WordPress admin</a>." );
88 }
89 }
90 }
91
92 /**
93 * Check if the Vimeography database needs updated based on the db version.
94 *
95 * @access public
96 * @return void
97 */
98 public function vimeography_update_db_check()
99 {
100 if (get_option('vimeography_db_version') != VIMEOGRAPHY_VERSION)
101 $this->vimeography_create_tables();
102
103 update_option('vimeography_db_version', VIMEOGRAPHY_VERSION);
104 }
105
106 /**
107 * Add Settings link to "installed plugins" admin page.
108 *
109 * @access public
110 * @param mixed $links
111 * @param mixed $file
112 * @return void
113 */
114 public function vimeography_filter_plugin_actions($links, $file)
115 {
116 if ( $file == VIMEOGRAPHY_BASENAME )
117 {
118 $settings_link = '<a href="admin.php?page=vimeography-edit-galleries">' . __('Settings') . '</a>';
119 if (!in_array($settings_link, $links))
120 array_unshift( $links, $settings_link ); // before other links
121 }
122 return $links;
123 }
124
125 /**
126 * Action target that displays the popup to insert a form to a post/page.
127 *
128 * @access public
129 * @return void
130 */
131 public function vimeography_add_mce_popup(){
132 require_once(VIMEOGRAPHY_PATH . 'lib/admin/view/vimeography/mce.php');
133 $mustache = new Vimeography_MCE();
134 $template = $this->_load_template('vimeography/mce');
135 echo $mustache->render($template);
136 }
137
138 /**
139 * Adds a new top level menu to the admin menu.
140 *
141 * @access public
142 * @return void
143 */
144 public function vimeography_add_menu()
145 {
146
147 global $submenu;
148
149 add_menu_page( 'Vimeography Page Title', 'Vimeography', 'manage_options', 'vimeography-edit-galleries', '', VIMEOGRAPHY_URL.'media/img/vimeography-icon.png' );
150 add_submenu_page( 'vimeography-edit-galleries', 'Edit Galleries', 'Edit Galleries', 'manage_options', 'vimeography-edit-galleries', array(&$this, 'vimeography_render_template' ));
151 add_submenu_page( 'vimeography-edit-galleries', 'New Gallery', 'New Gallery', 'manage_options', 'vimeography-new-gallery', array(&$this, 'vimeography_render_template' ));
152 add_submenu_page( 'vimeography-edit-galleries', 'My Themes', 'My Themes', 'manage_options', 'vimeography-my-themes', array(&$this, 'vimeography_render_template' ));
153 $submenu['vimeography-edit-galleries'][500] = array( 'Buy Themes', 'manage_options' , 'http://vimeography.com/themes' );
154 add_submenu_page( 'vimeography-edit-galleries', 'Vimeography Pro', 'Vimeography Pro', 'manage_options', 'vimeography-pro', array(&$this, 'vimeography_render_template' ));
155 add_submenu_page( 'vimeography-edit-galleries', 'Help', 'Help', 'manage_options', 'vimeography-help', array(&$this, 'vimeography_render_template' ));
156
157 }
158
159 public function vimeography_render_template()
160 {
161 if ( !current_user_can( 'manage_options' ) ) {
162 wp_die( __( 'You do not have sufficient permissions to access this page.' ) );
163 }
164
165 wp_register_style( 'bootstrap_css', VIMEOGRAPHY_URL.'media/css/bootstrap.min.css');
166 wp_register_style( 'bootstrap_responsive_css', VIMEOGRAPHY_URL.'media/css/bootstrap-responsive.min.css');
167 wp_register_style( 'vimeography-admin.css', VIMEOGRAPHY_URL.'media/css/admin.css');
168 wp_register_script( 'bootstrap_tab_js', VIMEOGRAPHY_URL.'media/js/bootstrap-tab.js');
169 wp_register_script( 'bootstrap_alert_js', VIMEOGRAPHY_URL.'media/js/bootstrap-alert.js');
170 wp_register_script( 'vimeography-admin.js', VIMEOGRAPHY_URL.'media/js/admin.js', 'jquery');
171
172 wp_enqueue_style( 'bootstrap_css');
173 wp_enqueue_style( 'bootstrap_responsive_css');
174 wp_enqueue_style( 'vimeography-admin.css');
175 wp_enqueue_script( 'jquery');
176 wp_enqueue_script( 'bootstrap_tab_js');
177 wp_enqueue_script( 'bootstrap_alert_js');
178 wp_enqueue_script( 'vimeography-admin.js');
179
180 switch(current_filter())
181 {
182 case 'vimeography_page_vimeography-new-gallery':
183 require_once(VIMEOGRAPHY_PATH . 'lib/admin/view/gallery/new.php');
184 $mustache = new Vimeography_Gallery_New();
185 $template = $this->_load_template('gallery/new');
186 break;
187 case 'toplevel_page_vimeography-edit-galleries':
188 if (isset($_GET['id']))
189 {
190 require_once(VIMEOGRAPHY_PATH . 'lib/admin/view/gallery/edit.php');
191 $mustache = new Vimeography_Gallery_Edit();
192 $template = $this->_load_template('gallery/edit');
193 }
194 else
195 {
196 require_once(VIMEOGRAPHY_PATH . 'lib/admin/view/gallery/list.php');
197 $mustache = new Vimeography_Gallery_List();
198 $template = $this->_load_template('gallery/list');
199 }
200 break;
201 case 'vimeography_page_vimeography-my-themes':
202 require_once(VIMEOGRAPHY_PATH . 'lib/admin/view/theme/list.php');
203 $mustache = new Vimeography_Theme_List();
204 $template = $this->_load_template('theme/list');
205 break;
206 case 'vimeography_page_vimeography-pro':
207 require_once(VIMEOGRAPHY_PATH . 'lib/admin/view/vimeography/pro.php');
208 $mustache = new Vimeography_Pro();
209 $template = $this->_load_template('vimeography/pro');
210 break;
211 case 'vimeography_page_vimeography-help':
212 require_once(VIMEOGRAPHY_PATH . 'lib/admin/view/vimeography/help.php');
213 $mustache = new Vimeography_Help();
214 $template = $this->_load_template('vimeography/help');
215 break;
216 default:
217 wp_die( __('The admin template for "'.current_filter().'" cannot be found.') );
218 break;
219 }
220 echo $mustache->render($template);
221 }
222
223 protected function _load_template($name)
224 {
225 $path = VIMEOGRAPHY_PATH . 'lib/admin/templates/' . $name .'.mustache';
226 if (! $result = @file_get_contents($path))
227 wp_die('The admin template "'.$name.'" cannot be found.');
228 return $result;
229 }
230
231 /**
232 * Create tables and define defaults when plugin is activated.
233 *
234 * @access public
235 * @return void
236 */
237 public function vimeography_create_tables() {
238 global $wpdb;
239
240 delete_option('vimeography_default_settings');
241 delete_option('vimeography_advanced_settings');
242
243 add_option('vimeography_advanced_settings', array(
244 'active' => FALSE,
245 'client_id' => '',
246 'client_secret' => '',
247 'access_token' => '',
248 'access_token_secret' => '',
249 ));
250
251 add_option('vimeography_default_settings', array(
252 'source_type' => 'channel',
253 'source_name' => 'hd',
254 'video_count' => 20,
255 'featured_video' => '',
256 'cache_timeout' => 3600,
257 'theme_name' => 'bugsauce',
258 ));
259
260 $sql = 'CREATE TABLE '.VIMEOGRAPHY_GALLERY_TABLE.' (
261 id mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
262 title varchar(150) NOT NULL,
263 date_created datetime NOT NULL,
264 is_active tinyint(1) NOT NULL,
265 PRIMARY KEY (id)
266 );
267 CREATE TABLE '.VIMEOGRAPHY_GALLERY_META_TABLE.' (
268 id mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
269 gallery_id mediumint(8) unsigned NOT NULL,
270 source_type varchar(50) NOT NULL,
271 source_name varchar(50) NOT NULL,
272 video_count mediumint(7) NOT NULL,
273 featured_video int(9) unsigned DEFAULT NULL,
274 cache_timeout mediumint(7) NOT NULL,
275 theme_name varchar(50) NOT NULL,
276 PRIMARY KEY (id)
277 );
278 ';
279
280 require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
281 dbDelta($sql);
282 add_option("vimeography_db_version", VIMEOGRAPHY_VERSION);
283
284 // Let's also move the bugsauce folder to the vimeography_theme_path (wp-content/uploads)
285 $this->_move_theme(array('source' => VIMEOGRAPHY_PATH . 'bugsauce/', 'destination' => VIMEOGRAPHY_THEME_PATH.'bugsauce/', 'clear_destination' => true, 'clear_working' => true));
286
287 }
288
289 /**
290 * Read the shortcode and return the output.
291 * example:
292 * [vimeography from='user' named='davekiss' theme='apple']
293 *
294 * @access public
295 * @param mixed $atts
296 * @return void
297 */
298 public function vimeography_shortcode($atts)
299 {
300
301 // Get admin panel options
302 $default_settings = get_option('vimeography_default_settings');
303
304 // Get shortcode attributes
305 $settings = shortcode_atts( array(
306 'id' => '',
307 'theme' => $default_settings['theme_name'],
308 'featured' => $default_settings['featured_video'],
309 'from' => $default_settings['source_type'],
310 'named' => $default_settings['source_name'],
311 'limit' => $default_settings['video_count'],
312 'cache' => $default_settings['cache_timeout'],
313 'width' => '',
314 'height' => '',
315 ), $atts );
316
317 if (intval($settings['id']))
318 {
319 global $wpdb;
320 $gallery_info = $wpdb->get_results('SELECT * from '.VIMEOGRAPHY_GALLERY_META_TABLE.' AS meta JOIN '.VIMEOGRAPHY_GALLERY_TABLE.' AS gallery ON meta.gallery_id = gallery.id WHERE meta.gallery_id = '.$settings['id'].' LIMIT 1;');
321 if ($gallery_info)
322 {
323 $settings['theme'] = $gallery_info[0]->theme_name;
324 $settings['featured'] = $gallery_info[0]->featured_video;
325 $settings['from'] = $gallery_info[0]->source_type;
326 $settings['named'] = $gallery_info[0]->source_name;
327 $settings['limit'] = $gallery_info[0]->video_count;
328 $settings['cache'] = $gallery_info[0]->cache_timeout;
329 }
330 }
331
332 try
333 {
334 require_once(VIMEOGRAPHY_PATH . 'lib/core.php');
335 $vimeography = Vimeography_Core::factory('videos', $settings);
336
337 // if cache is set, render it. otherwise, get the json, set the cache, and render it
338 if (($vimeography_data = $this->get_vimeography_cache($settings['id'])) === FALSE)
339 {
340 // cache not set, let's do a new request to the vimeo API and cache it
341 $vimeography_data = $vimeography->get('videos');
342 $transient = $this->set_vimeography_cache($settings['id'], $vimeography_data, $settings['cache']);
343 }
344 return $vimeography->render($vimeography_data);
345 }
346 catch (Vimeography_Exception $e)
347 {
348 return "Vimeography error: ".$e->getMessage();
349 }
350 }
351
352 /**
353 * Get the JSON data stored in the Vimeography cache for the provided gallery id.
354 *
355 * @access public
356 * @static
357 * @param mixed $id
358 * @return void
359 */
360 public static function get_vimeography_cache($id)
361 {
362 return FALSE === ( $vimeography_cache_results = get_transient( 'vimeography_cache_'.$id ) ) ? FALSE : $vimeography_cache_results;
363 }
364
365 /**
366 * Set the JSON data to the Vimeography cache for the provided gallery id.
367 *
368 * @access public
369 * @static
370 * @param mixed $id
371 * @param mixed $data
372 * @param mixed $cache_limit
373 * @return void
374 */
375 public static function set_vimeography_cache($id, $data, $cache_limit)
376 {
377 return set_transient( 'vimeography_cache_'.$id, $data, $cache_limit );
378 }
379
380 /**
381 * Clear the Vimeography cache for the provided gallery id.
382 *
383 * @access public
384 * @static
385 * @param mixed $id
386 * @return void
387 */
388 public static function delete_vimeography_cache($id)
389 {
390 return delete_transient('vimeography_cache_'.$id);
391 }
392
393 /**
394 * Moves the given folder to the given destination.
395 *
396 * @access private
397 * @param array $args (default: array())
398 * @return void
399 */
400 private function _move_theme($args = array())
401 {
402 WP_Filesystem();
403 global $wp_filesystem;
404 $defaults = array( 'source' => '', 'destination' => '', //Please always pass these
405 'clear_destination' => false, 'clear_working' => false,
406 'hook_extra' => array());
407
408 $args = wp_parse_args($args, $defaults);
409 extract($args);
410
411 @set_time_limit( 300 );
412
413 if ( empty($source) || empty($destination) )
414 return new WP_Error('bad_request', $this->strings['bad_request']);
415
416 // $this->skin->feedback('installing_package');
417
418 //Retain the Original source and destinations
419 $remote_source = $source;
420 $local_destination = $destination;
421
422 $source_files = array_keys( $wp_filesystem->dirlist($remote_source) );
423 $remote_destination = $wp_filesystem->find_folder($local_destination);
424
425 //Locate which directory to copy to the new folder, This is based on the actual folder holding the files.
426 if ( 1 == count($source_files) && $wp_filesystem->is_dir( trailingslashit($source) . $source_files[0] . '/') ) //Only one folder? Then we want its contents.
427 $source = trailingslashit($source) . trailingslashit($source_files[0]);
428 elseif ( count($source_files) == 0 )
429 return new WP_Error( 'incompatible_archive', 'incompatible archive string', __( 'The plugin contains no files.' ) ); //There are no files?
430 else //Its only a single file, The upgrader will use the foldername of this file as the destination folder. foldername is based on zip filename.
431 $source = trailingslashit($source);
432
433 //Has the source location changed? If so, we need a new source_files list.
434 if ( $source !== $remote_source )
435 $source_files = array_keys( $wp_filesystem->dirlist($source) );
436
437 if ( $clear_destination ) {
438 //We're going to clear the destination if there's something there
439 //$this->skin->feedback('remove_old');
440 $removed = true;
441 if ( $wp_filesystem->exists($remote_destination) )
442 $removed = $wp_filesystem->delete($remote_destination, true);
443 if ( is_wp_error($removed) )
444 return $removed;
445 else if ( ! $removed )
446 return new WP_Error('remove_old_failed', 'couldnt remove old');
447 } elseif ( $wp_filesystem->exists($remote_destination) ) {
448 //If we're not clearing the destination folder and something exists there already, Bail.
449 //But first check to see if there are actually any files in the folder.
450 $_files = $wp_filesystem->dirlist($remote_destination);
451 if ( ! empty($_files) ) {
452 $wp_filesystem->delete($remote_source, true); //Clear out the source files.
453 return new WP_Error('folder_exists', 'folder exists string', $remote_destination );
454 }
455 }
456
457 //Create themes folder, if needed
458 if ( !$wp_filesystem->exists(VIMEOGRAPHY_THEME_PATH) )
459 if ( !$wp_filesystem->mkdir(VIMEOGRAPHY_THEME_PATH, FS_CHMOD_DIR) )
460 return new WP_Error('mkdir_failed', 'mkdir failer string', $remote_destination);
461
462 //Create destination if needed
463 if ( !$wp_filesystem->exists($remote_destination) )
464 if ( !$wp_filesystem->mkdir($remote_destination, FS_CHMOD_DIR) )
465 return new WP_Error('mkdir_failed', 'mkdir failer string', $remote_destination);
466
467 // Copy new version of item into place.
468 $result = copy_dir($source, $remote_destination);
469
470 if ( is_wp_error($result) ) {
471 if ( $clear_working )
472 $wp_filesystem->delete($remote_source, true);
473 return $result;
474 }
475
476 //Clear the Working folder?
477 if ( $clear_working )
478 $wp_filesystem->delete($remote_source, true);
479
480 $destination_name = basename( str_replace($local_destination, '', $destination) );
481 if ( '.' == $destination_name )
482 $destination_name = '';
483
484 $result = compact('local_source', 'source', 'source_name', 'source_files', 'destination', 'destination_name', 'local_destination', 'remote_destination', 'clear_destination', 'delete_source_dir');
485
486 //Bombard the calling function will all the info which we've just used.
487 return $result;
488
489 }
490
491 }
492
493 new Vimeography;