'', self::FLICKR_USER_NAME => '', self::FLICKR_USER_NSID => '', self::FLICKR_OAUTH_TOKEN => '', self::FLICKR_OAUTH_TOKEN_SECRET => '', self::OPTION_PHOTO_LINK => '0', self::OPTION_LINK_REL => '', self::OPTION_LINK_CLASS => '', ); function WpFlickrEmbed() { global $wp; $this->includeDir = dirname(__FILE__). '/include'; $this->pagesDir = $this->includeDir . '/pages'; $this->settings = get_option(get_class($this)); $flush_settings = false; foreach($this->default_settings as $key => $value) { if(!isset($this->settings[$key])) { $this->settings[$key] = $value; $flush_settings = true; } } if($flush_settings) { $this->update_settings(); } $this->pluginURI = plugin_dir_url(__FILE__); // Avoid 'insecure content' loading errors. if (is_ssl()) $this->pluginURI = str_replace('http:', 'https:', $this->pluginURI); add_action('init', array(&$this, 'hook_init')); add_action('template_redirect', array(&$this, 'hook_template_redirect')); add_action('media_buttons', array(&$this, 'addMediaButton'), 20); add_action('media_upload_flickr', array(&$this, 'media_upload_flickr')); add_action('admin_menu', array(&$this, 'addAdminMenu')); add_action('admin_print_scripts', array(&$this, 'adminPrintScripts')); add_action('admin_print_styles', array(&$this, 'adminPrintStyles')); // check that we can do use this plugin if(!function_exists('curl_init') && !ini_get('allow_url_fopen')) { $this->_disabled = self::DISABLED_REASON_CURL_FOPEN; } else if (PHP_VERSION_ID < 50200) { $this->_disabled = self::DISABLED_REASON_PHP_VERSION; } if ($this->isViewingOurAdminPage()) { $this->_currentURL = admin_url(sprintf('options-general.php?%s', $_SERVER['QUERY_STRING'])); } else { $this->_currentURL = null; } $this->flickrAPI = new WpFlickrEmbed_Flickr( self::FLICKR_API_KEY, self::FLICKR_SECRET, $this->_currentURL ); // are we authenticated with flickr? if so then set up auth params if (!empty($this->settings[self::FLICKR_OAUTH_TOKEN])) { $this->flickrAPI->useOAuthAccessCredentials(array( WpFlickrEmbed_Flickr::USER_FULL_NAME => $this->settings[self::FLICKR_USER_FULLNAME], WpFlickrEmbed_Flickr::USER_NAME => $this->settings[self::FLICKR_USER_NAME], WpFlickrEmbed_Flickr::USER_NSID => $this->settings[self::FLICKR_USER_NSID], WpFlickrEmbed_Flickr::OAUTH_ACCESS_TOKEN => $this->settings[self::FLICKR_OAUTH_TOKEN], WpFlickrEmbed_Flickr::OAUTH_ACCESS_TOKEN_SECRET => $this->settings[self::FLICKR_OAUTH_TOKEN_SECRET], )); } } /** * Get whether this plugin is disabled. * * @return bool FALSE if not; otherwise the reason for being disabled. */ function isDisabled() { return $this->_disabled ? $this->_disabled : FALSE; } /** * Hook for 'init' action. */ function hook_init() { global $wp; $wp->add_query_var( self::SIGN_URL_PARAM_NAME ); $wp->add_query_var( self::FLICKR_AUTH_URL_PARAM_NAME ); } /** * Hook for 'template_redirect' action. */ function hook_template_redirect() { // sign a flickr request $wpfe_sign = get_query_var(self::SIGN_URL_PARAM_NAME); if (!empty($wpfe_sign)) { // parse JSON string $json = @json_decode(stripslashes($wpfe_sign)); if (empty($json) || !is_object($json)) { die('Invalid JSON input: ' . $wpfe_sign); } else { if (empty($json->method)) { die('No Flickr API method specified: ' . print_r($json,true)); } // api key $json->api_key = self::FLICKR_API_KEY; // get signed call $ret = $this->flickrAPI->getSignedUrlParams($json->method, get_object_vars($json), array( 'use_secure_api' => TRUE )); header("Content-type: application/json"); print json_encode($ret); exit(); } } // flickr authorization process $wpfe_flickr_auth = get_query_var(self::FLICKR_AUTH_URL_PARAM_NAME); if (!empty($wpfe_flickr_auth)) { // first time call? $oauth_verifier = $_GET['oauth_verifier']; if (empty($oauth_verifier)) { // want flickr to come back here $current_url = sprintf('%s?%s=%s', trailingslashit($this->getSiteHomeUrl()), self::FLICKR_AUTH_URL_PARAM_NAME, urlencode($wpfe_flickr_auth)); $this->flickrAPI = new WpFlickrEmbed_Flickr( self::FLICKR_API_KEY, self::FLICKR_SECRET, $current_url ); // sign out and re-auth $this->flickrAPI->signOut(); if (!$this->flickrAPI->authenticate('read')) { header('Location: ' . $wpfe_flickr_auth . '&auth_result=fail'); } } else { // complete auth if ($this->flickrAPI->authenticate('read')) { $this->saveFlickrAuthentication(); header('Location: ' . $wpfe_flickr_auth . '&auth_result=success'); } else { header('Location: ' . $wpfe_flickr_auth . '&auth_result=fail'); } } exit(); } } function addMediaButton() { global $post_ID, $temp_ID; $uploading_iframe_ID = (int) (0 == $post_ID ? $temp_ID : $post_ID); $media_upload_iframe_src = "media-upload.php?post_id=$uploading_iframe_ID"; $wp_flickr_embed_iframe_src = apply_filters('wp_flickr_embed_iframe_src', "$media_upload_iframe_src&type=flickr&tab=flickr"); $wp_flickr_embed_title = __('Add Flickr photo', 'wp-flickr-embed'); echo "pluginURI}/images/media-flickr.png\" alt=\"$wp_flickr_embed_title\" />"; } function modifyMediaTab($tabs) { return array( 'flickr' => __('Flickr photo', 'wp-flickr-embed') ); } function addAdminMenu() { if (function_exists('add_options_page')) { add_options_page(__('WP Flickr Embed', 'wp-flickr-embed'), __('WP Flickr Embed', 'wp-flickr-embed'), 8, $this->pagesDir.'/admin.php'); } } /** * Handler for 'admin_print_scripts' hook. */ function adminPrintScripts() { if ($this->isViewingOurAdminPage()) { wp_enqueue_script('postbox'); wp_enqueue_script('dashboard'); } } public function getSignRequestApiUrl() { return sprintf('%s?%s=', trailingslashit($this->getSiteHomeUrl()), self::SIGN_URL_PARAM_NAME); } /** * Get website home URL. * * @return string */ public function getSiteHomeUrl() { // if we're in SSL then request SSL version return home_url('', is_ssl() ? 'https' : 'http'); } /** * Handler for 'admin_print_styles' hook. */ public function adminPrintStyles() { if ($this->isViewingOurAdminPage()) { wp_enqueue_style('dashboard'); wp_enqueue_style('wp-flickr-embed-admin', $this->pluginURI . '/wp-flickr-embed-admin.css'); } } /** * Get whether user is viewing our admin page. */ private function isViewingOurAdminPage() { return (isset($_GET['page']) && 0 === stripos($_GET['page'], $this->_slug)); } function media_upload_flickr() { wp_iframe('media_upload_type_flickr'); } /** * Update settings. * @param null $settings */ function update_settings($settings=null){ if($settings) { foreach($settings as $key => $val) { $this->settings[$key] = $val; } } $_settings = array(); foreach($this->settings as $key => $value) { if(isset($this->default_settings[$key])) { $_settings[$key] = $value; } } update_option(get_class($this), $_settings); } /** * Clear Flickr authentication credentials. */ function clearFlickrAuthentication() { $this->flickrAPI->signout(); $this->update_settings(array( self::FLICKR_USER_FULLNAME => '', self::FLICKR_USER_NAME => '', self::FLICKR_USER_NSID => '', self::FLICKR_OAUTH_TOKEN => '', self::FLICKR_OAUTH_TOKEN_SECRET => '', )); } /** * Save Flickr authentication data into settings. */ function saveFlickrAuthentication() { $this->update_settings(array( self::FLICKR_USER_FULLNAME => $this->flickrAPI->getOauthData(WpFlickrEmbed_Flickr::USER_FULL_NAME), self::FLICKR_USER_NAME => $this->flickrAPI->getOauthData(WpFlickrEmbed_Flickr::USER_NAME), self::FLICKR_USER_NSID => $this->flickrAPI->getOauthData(WpFlickrEmbed_Flickr::USER_NSID), self::FLICKR_OAUTH_TOKEN => $this->flickrAPI->getOauthData(WpFlickrEmbed_Flickr::OAUTH_ACCESS_TOKEN), self::FLICKR_OAUTH_TOKEN_SECRET => $this->flickrAPI->getOauthData(WpFlickrEmbed_Flickr::OAUTH_ACCESS_TOKEN_SECRET), )); } /** * Get whether user has authenticated with Flickr. * * @return bool true if so; false otherwise. */ function authenticatedWithFlickr() { return !empty($this->settings[self::FLICKR_OAUTH_TOKEN]); } } /** Get the iFRAME contents */ function media_upload_type_flickr() { global $wpFlickrEmbed; if ($wpFlickrEmbed->isDisabled()) { echo '

' . __('The Wordpress Flickr Embed plugin has been disabled. Please visit the plugin\'s options page.', 'wp-flickr-embed') . '

'; } else { require(dirname(__FILE__) .'/wp-flickr-embed-upload-frame.php'); } } $wpFlickrEmbed = new WpFlickrEmbed;