option_defaults(); $bytab = $this->admin_get_options_by_tab( $currenttab ); foreach( $bytab as $id){ $new = (isset($newoptions[$id])?$newoptions[$id]:''); $old = (isset($oldoptions[$id])?$oldoptions[$id]:''); $opt = (isset($options[$id])?$options[$id]:''); $oldoptions[$id] = $this->MenuOptionsValidate( $new, $old, $opt ); // Make changes to existing options array } update_option( $this->get_private('settings'), $oldoptions); return $oldoptions; } ////////////////////////////////////////////////////////////////////////////////////// ////////////////////// Admin Option Functions ////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////// /** * Create array of option names for a given tab * * @ Since 1.2.0 */ function admin_get_options_by_tab( $tab = 'generator' ){ $default_options = $this->option_defaults(); $return = array(); foreach($default_options as $key => $val){ if( $val['tab'] == $tab ){ $return[$key] = $key; } } return $return; } /** * Create array of option names and current values for a given tab * * @ Since 1.2.0 */ function admin_get_settings_by_tab( $tab = 'generator' ){ $current = $this->get_all_options(); $default_options = $this->option_defaults(); $return = array(); foreach($default_options as $key => $val){ if( $val['tab'] == $tab ){ $return[$key] = $current[$key]; } } return $return; } /** * Create array of positions for a given tab along with a list of settings for each position * * @ Since 1.2.0 * @ Updated 1.2.3 */ function get_option_positions_by_tab( $tab = 'generator' ){ $positions = $this->admin_option_positions(); $return = array(); if( isset($positions[$tab]) ){ $options = $this->admin_get_options_by_tab( $tab ); $defaults = $this->option_defaults(); foreach($positions[$tab] as $pos => $info ){ $return[$pos]['title'] = (isset($info['title'])?$info['title']:''); $return[$pos]['description'] = (isset($info['description'])?$info['description']:''); $return[$pos]['options'] = array(); } foreach($options as $name){ $pos = (isset($defaults[$name]['position'])?$defaults[$name]['position']:'none'); $return[ $pos ]['options'][] = $name; } } return $return; } /** * Create array of positions for each widget along with a list of settings for each position * * @ Since 1.2.0 */ function admin_get_widget_options_by_position(){ $default_options = $this->option_defaults(); $positions = $this->admin_widget_positions(); $return = array(); foreach($positions as $key => $val ){ $return[$key]['title'] = $val; $return[$key]['options'] = array(); } foreach($default_options as $key => $val){ if(!empty($val['widget'])){ $return[ $val['position'] ]['options'][] = $key; } } return $return; } ////////////////////////////////////////////////////////////////////////////////////// /////////////////////// Admin Page Functions ////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////// /** * Create shortcode based on given options * * @ Since 1.1.0 * @ Update 1.2.5 */ function admin_generate_shortcode( $options, $optiondetails ){ $short = '['.$this->get_private('short'); $id = rand(100, 1000); $short .= ' id='.$id; $trigger = ''; foreach( $options as $key=>$value ){ if($value && isset($optiondetails[$key]['short'])){ if( isset($optiondetails[$key]['child']) && isset($optiondetails[$key]['hidden']) ){ $hidden = @explode(' ',$optiondetails[$key]['hidden']); if( !in_array( $options[ $optiondetails[$key]['child'] ] ,$hidden) ){ $short .= ' '.$optiondetails[$key]['short'].'="'.$value.'"'; } }else{ $short .= ' '.$optiondetails[$key]['short'].'="'.$value.'"'; } } } $short .= ']'; return $short; } /** * Define Settings Page Tab Markup * * @since 1.1.0 * @link`http://www.onedesigns.com/tutorials/separate-multiple-theme-options-pages-using-tabs Daniel Tara * */ function admin_options_page_tabs( $current = 'general' ) { $tabs = $this->admin_settings_page_tabs(); $links = array(); foreach( $tabs as $tab ){ $tabname = $tab['name']; $tabtitle = $tab['title']; if( $tabname == $current ){ $links[] = ''.$tabtitle.''; }else{ $links[] = ''.$tabtitle.''; } } echo '

'.$this->get_private('name').'

'; echo '
'; } /** * Function for printing general settings page * * @ Since 1.2.0 * @ Updated 1.2.4 */ function admin_display_general(){ ?>

get_private('name'); _e(",
a WordPress plugin by the Alpine Press.");?>

check_private('termsofservice') ) { echo '

'.$this->get_private('termsofservice').'

'; }?>

the Alpine Press.


check_private('plugins') && is_array( $this->get_private('plugins') ) ){ foreach($this->get_private('plugins') as $each){ ?>

Please support further development of this plugin with a small donation.

get_all_options(); $settings_section = $this->get_private('id'). '_' . $currenttab . '_tab'; $submitted = ( ( isset($_POST[ "hidden" ]) && ($_POST[ "hidden" ]=="Y") ) ? true : false ); if( $submitted ){ $options = $this->admin_simple_update( $currenttab, $_POST, $options ); } $buttom = (isset($_POST[$this->get_private('settings').'_'.$currenttab]['submit-'.$currenttab])?$_POST[$this->get_private('settings').'_'.$currenttab]['submit-'.$currenttab]:''); if( $buttom == 'Delete Current Cache' ){ // // DELETE CACHE BUTTON HAS BEEN DISABLED ON USER-SIDE // $bot = new PhotoTileForInstagramBot(); $bot->clearAllCache(); echo '
'.__("Cache Cleared").'
'; } elseif( $buttom == 'Save Settings' ){ $bot = new PhotoTileForInstagramBot(); $bot->clearAllCache(); echo '
'.__("Settings Saved").'
'; } echo '
'; echo ''; $this->admin_display_opt_form($options,$currenttab); echo '
'; echo '
'; } /** * Second function for printing options page * * @ Since 1.1.0 * @ Updated 1.2.7 * */ function admin_display_opt_form($options,$currenttab){ $defaults = $this->option_defaults(); $positions = $this->get_option_positions_by_tab( $currenttab ); $submitted = ( ( isset($_POST[ "hidden" ]) && ($_POST[ "hidden" ]=="Y") ) ? true : false ); if( 'generator' == $currenttab ) { $preview = (isset($_POST[ $this->get_private('settings').'_preview']['submit-preview']) && $_POST[ $this->get_private('settings').'_preview']['submit-preview'] == 'Preview')?true:false; if( $submitted && isset($_POST['shortcode']) && $preview ){ $short = str_replace('\"','"',$_POST['shortcode']); }elseif( $submitted ){ // Use filtered $options, not unflitered $_POST $short = $this->admin_generate_shortcode( $options, $defaults ); } ?>

This tool allows you to create shortcodes for the Alpine PhotoTile plugin.

A shortcode is a line of text that tells WordPress how to load a plugin inside the content of a page or post. Rather than explaining how to put together a shortcode, this tool will create the shortcode for you.

Now, copy (Crtl+C) and paste (Crtl+V) the following shortcode into a page or post.
Or preview using the button below.

'; echo do_shortcode($short); echo ''; } } echo '
'; } if( !empty($positions) && count($positions) ){ foreach( $positions as $position=>$positionsinfo){ echo '
'; if( !empty($positionsinfo['title']) ){ echo '

'. $positionsinfo['title'].'

'; } if( !empty($positionsinfo['description']) ){ echo '
'. $positionsinfo['description'].'
'; } echo ''; echo ''; if( !empty($positionsinfo['options']) && count($positionsinfo['options']) ){ foreach( $positionsinfo['options'] as $optionname ){ $option = $defaults[$optionname]; $fieldname = ( $option['name'] ); $fieldid = ( $option['name'] ); if( !empty($option['hidden-option']) && !empty($option['check']) ){ $show = $this->get_option( $option['check'] ); if( !$show ){ continue; } } if(isset($option['parent'])){ $class = $option['parent']; }elseif(isset($option['child'])){ $class =($option['child']); }else{ $class = ('unlinked'); } $trigger = (isset($option['trigger'])?('data-trigger="'.(($option['trigger'])).'"'):''); $hidden = (isset($option['hidden'])?' '.$option['hidden']:''); if( 'generator' == $currenttab ){ echo ''; }else{ echo ''; } } } echo ''; echo '
'; $this->MenuDisplayCallback($options,$option,$fieldname,$fieldid); echo '
'; $this->AdminDisplayCallback($options,$option,$fieldname,$fieldid); echo '
'; echo '
'; } } if( 'generator' == $currenttab ) { echo ''; }elseif( 'plugin-settings' == $currenttab ){ echo ''; //echo ''; } } ////////////////////////////////////////////////////////////////////////////////////// ////////////////////// Menu Display Functions ///////////////////////////// ////////////////////////////////////////////////////////////////////////////////////// /** * Function for displaying forms in the widget page * * @ Since 1.0.0 * @ Updated 1.2.6.1 */ function MenuDisplayCallback($options,$option,$fieldname,$fieldid){ $default = (isset($option['default'])?$option['default']:''); $optionname = (isset($option['name'])?$option['name']:''); $optiontitle = (isset($option['title'])?$option['title']:''); $optiondescription = (isset($option['description'])?$option['description']:''); $fieldtype = (isset($option['type'])?$option['type']:''); $value = ( isset($options[$optionname]) ? $options[$optionname] : $default ); // Output checkbox form field markup if ( 'checkbox' == $fieldtype ) { ?> /> value="" />

/>
value="" />

=$min && $newinput<=$max) ? $newinput : $valid_input ); } // Validate text input and textarea fields else if ( ( 'text' == $type || 'textarea' == $type || 'image-upload' == $type) ) { $valid_input = strip_tags( $newinput ); $sanatize = (isset($optiondetails['sanitize'])?$optiondetails['sanitize']:''); // Validate no-HTML content // nospaces option offers additional filters if ( 'nospaces' == $sanatize ) { // Pass input data through the wp_filter_nohtml_kses filter $valid_input = wp_filter_nohtml_kses( $newinput ); // Remove specified character(s) if( isset($optiondetails['remove']) ){ if( is_array($optiondetails['remove']) ){ foreach( $optiondetails['remove'] as $remove ){ $valid_input = str_replace($remove,'',$valid_input); } }else{ $valid_input = str_replace($optiondetails['remove'],'',$valid_input); } } // Switch or encode characters if( isset($optiondetails['encode']) && is_array( $optiondetails['encode'] ) ){ foreach( $optiondetails['encode'] as $find=>$replace ){ $valid_input = str_replace($find,$replace,$valid_input); } } // Replace spaces with provided character or just remove spaces if( isset($optiondetails['replace']) ){ $valid_input = str_replace(array(' ',' '),$optiondetails['replace'],$valid_input); }else{ $valid_input = str_replace(' ','',$valid_input); } } // Check if numeric elseif ( 'numeric' == $sanatize && is_numeric( wp_filter_nohtml_kses( $newinput ) ) ) { // Pass input data through the wp_filter_nohtml_kses filter $valid_input = wp_filter_nohtml_kses( $newinput ); if( isset($optiondetails['min']) && $valid_input<$optiondetails['min']){ $valid_input = $optiondetails['min']; } if( isset($optiondetails['max']) && $valid_input>$optiondetails['max']){ $valid_input = $optiondetails['max']; } } elseif ( 'int' == $sanatize && is_numeric( wp_filter_nohtml_kses( $newinput ) ) ) { // Pass input data through the wp_filter_nohtml_kses filter $valid_input = round( wp_filter_nohtml_kses( $newinput ) ); if( isset($optiondetails['min']) && $valid_input<$optiondetails['min']){ $valid_input = $optiondetails['min']; } if( isset($optiondetails['max']) && $valid_input>$optiondetails['max']){ $valid_input = $optiondetails['max']; } } elseif ( 'tag' == $sanatize ) { // Pass input data through the wp_filter_nohtml_kses filter $valid_input = wp_filter_nohtml_kses( $newinput ); $valid_input = str_replace(' ','-',$valid_input); } // Validate no-HTML content elseif ( 'nohtml' == $sanatize ) { // Pass input data through the wp_filter_nohtml_kses filter $valid_input = wp_filter_nohtml_kses( $newinput ); $valid_input = str_replace(' ','',$valid_input); } // Validate HTML content elseif ( 'html' == $sanatize ) { // Pass input data through the wp_filter_kses filter using allowed post tags $valid_input = wp_kses_post($newinput ); } // Validate URL address elseif( 'url' == $sanatize ){ $valid_input = esc_url( $newinput ); } // Validate CSS elseif( 'css' == $sanatize ){ $valid_input = wp_htmledit_pre( stripslashes( $newinput ) ); } // Just strip slashes elseif( 'stripslashes' == $sanatize ){ $valid_input = stripslashes( $newinput ); } }else if( 'wp-textarea' == $type ){ // Text area filter $valid_input = wp_kses_post( force_balance_tags($newinput) ); } elseif( 'color' == $type ){ $value = wp_filter_nohtml_kses( $newinput ); if( '#' == $value ){ $valid_input = ''; }else{ $valid_input = $value; } } return $valid_input; } } /** ############################################################################################################################################## * ############################################################################################################################################## * ############################################################################################################################################## * ############################################################################################################################################## * ############################################################################################################################################## * ############################################################################################################################################## * ############################################################################################################################################## * ############################################################################################################################################## * * AlpineBot * * ADMIN Functions * Contains ONLY UNIQUE ADMIN functions * * ########################################################################################## */ class PhotoTileForInstagramAdmin extends PhotoTileForInstagramAdminSecondary{ ////////////////////////////////////////////////////////////////////////////////////// //////////////////// Unique Admin Functions //////////////////////////// ////////////////////////////////////////////////////////////////////////////////////// /** * Add User * * @ Since 1.2.0 * @ Updated 1.2.6.2 */ function AddUser( $post_content ){ /* $post_content = array( 'access_token' => $access_token, 'username' => $user->username, 'picture' => $user->profile_picture, 'fullname' => $user->full_name, 'client_id' => $client_id, 'client_secret' => $client_secret );*/ if( isset($post_content['access_token']) && !empty($post_content['access_token']) && isset($post_content['username']) && !empty($post_content['username']) && isset($post_content['user_id']) && !empty($post_content['user_id']) ){ // All necessary data is accounted for // Empty array to store users $currentUsers = array(); $username = $post_content['username']; $oldoptions = $this->get_all_options(); if( isset($oldoptions['users']) && !empty($oldoptions['users']) ){ // Check current record of users $currentUsers = $oldoptions['users']; } $post_content['name'] = $username; $post_content['title'] = $username; // Add user to users array $currentUsers[ $username ] = $post_content; // Re-assign users array $oldoptions['users'] = $currentUsers; update_option( $this->get_private('settings'), $oldoptions ); } return true; } /** * Delete User * * @since 1.2.0 * */ function DeleteUser( $user ){ $oldoptions = $this->get_all_options(); $currentUsers = $oldoptions['users']; if( !empty($currentUsers[$user]) ){ unset($currentUsers[$user]); } $oldoptions['users'] = $currentUsers; update_option( $this->get_private('settings'), $oldoptions); } /** * Update User * * @since 1.2.0 * */ function UpdateUser( $data ){ $oldoptions = $this->get_all_options(); $currentUsers = $oldoptions['users']; if( !empty($data['username']) && !empty($oldoptions['users']) && !empty($oldoptions['users'][$data['username']]) ) { $current = $oldoptions['users'][$data['username']]; foreach( $data as $k=>$v ){ if( !empty($v) ){ $current[$k] = $v; } } $oldoptions['users'][$data['username']] = $current; update_option( $this->get_private('settings'), $oldoptions); } } /** * Alpine PhotoTile: Options Page * * @ Since 1.1.1 * @ Updated 1.2.7.6 */ function admin_build_settings_page(){ $currenttab = isset( $_GET['tab'] )?$_GET['tab']:'general'; // Check for valid tab $possible_tabs = array_keys( $this->admin_settings_page_tabs() ); if( !in_array($currenttab,$possible_tabs) ){ $currenttab = 'general'; } echo '
'; $this->admin_options_page_tabs( $currenttab ); echo '
'; echo '
'; if( 'general' == $currenttab ){ $this->admin_display_general(); }elseif( 'add' == $currenttab ){ $this->admin_display_add(); }elseif( 'plugin-tools' == $currenttab ){ $this->admin_display_tools(); }else{ $this->admin_setup_options_form($currenttab); } echo '
'; echo '
'; //$this->admin_donate_button(); echo ''; echo '
**Please Note: This plugin is no longer being developed or maintained. If you are a WordPress developer, I encourage you to take this plugin and make it your own.**
'; echo '
'; echo '
'; // Close Container echo '
'; // Close wrap } /** * Show User Function * * @ Since 1.2.0 * @ Updated 1.2.5 */ function show_user($info){ $name = (isset($info['username'])?$info['username']:'user'); $picture = (isset($info['picture'])?$info['picture']:'user'); $output = '
'; $output .= '

'.$name.'

'; $output .= '
'; // Not currently needed $output .= '
'; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= '
'; $output .= '
'; $output .= ''; $output .= ''; $output .= ''; $output .= ''; $output .= '
'; $output .= '
'; return $output; } /** * Show User Javascript * * @ Since 1.2.0 * * // Not currently needed */ function show_user_js($info){ $redirect = admin_url( 'options-general.php?page='.$this->get_private('settings').'&tab=add' ); $output = 'jQuery(document).ready(function() {var url = "https://api.instagram.com/oauth/authorize/"+"?redirect_uri=" + encodeURIComponent("'.$redirect . '")+ "&response_type=code" + "&client_id='.$info['client_id'].'" + "&display=touch";jQuery("#'.$this->get_private('settings').'-user-'.$info['username'].'").ajaxForm({ success: function(responseText){ window.location.replace(url); } }); });'; return $output; } /** * Display Add User Page * * @ Since 1.2.0 * @ Updated 1.2.7 */ function admin_display_add(){ $currenttab = 'add'; $options = $this->get_all_options(); $settings_section = $this->get_private('id') . '_'.$currenttab.'_tab'; $submitted = ( ( isset($_POST[ "hidden" ]) && ($_POST[ "hidden" ]=="Y") ) ? true : false ); $redirect = admin_url( 'options-general.php?page='.$this->get_private('settings').'&tab='.$currenttab ); $success = false; $errormessage = null; $errortype = null; if( isset($_POST['add-user']) ){ if( !empty($_POST['client_id']) && !empty($_POST['client_secret']) ){ $options = $this->admin_simple_update( $currenttab, $_POST, $options ); // Don't display previously input info ?> DeleteUser( $user ); } elseif( isset($_POST['update-user']) && isset($_POST['user']) ){ // Update User button was pressed $user = $_POST['user']; $users = $this->get_instagram_users(); if( !empty($users) && !empty($users[$user]) && !empty($users[$user]['access_token']) && !empty($users[$user]['user_id']) ){ $request = 'https://api.instagram.com/v1/users/'.$users[$user]['user_id'].'/?access_token='.$users[$user]['access_token']; $response = wp_remote_get($request, array( 'method' => 'GET', 'timeout' => 10, 'sslverify' => apply_filters('https_local_ssl_verify', false) ) ); if( is_wp_error( $response ) || !isset($response['body']) ) { // Try again if( method_exists( $this, 'manual_cURL' ) ){ $content = $this->manual_cURL($request); } if( !isset($content) ){ $errormessage = 'User not updated'; } }else{ $content = $response['body']; } if( isset( $content ) ){ // Before decoding JSON, remove Emoji characters from content $content = $this->removeEmoji($content); if( function_exists('json_decode') ){ $_instagram_json = @json_decode( $content, true ); }elseif( function_exists('alpine_json_decode') ){ $_instagram_json = @alpine_json_decode( $content, true ); } if( empty($_instagram_json) || 200 != $_instagram_json['meta']['code'] ){ $errormessage = 'User not updated'; }elseif( !empty($_instagram_json['data']) ){ $data = $_instagram_json['data']; $post_content = array( 'access_token' => $users[$user]['access_token'], 'username' => $data['username'], 'picture' => $data['profile_picture'], 'fullname' => $data['full_name'], 'user_id' => $users[$user]['user_id'] ); $this->UpdateUser( $post_content ); $update = true; } } } } elseif( $submitted && isset($_POST['manual-user-form']) && !empty($_POST['access_token']) && !empty($_POST['user_id']) && !empty($_POST['client_id']) && !empty($_POST['username']) ){ $success = $this->AddUser($_POST); } elseif( isset($_GET['code']) ) { // Callback has been received from Instagram $code = $_GET['code']; $client_id = $this->get_option('client_id'); $client_secret = $this->get_option('client_secret'); $url = 'https://api.instagram.com/oauth/access_token'; $fields = array( 'code' => $code, 'response_type' => 'authorization_code', 'redirect_uri' => $redirect, 'client_id' => $client_id, 'client_secret' => $client_secret, 'grant_type' => 'authorization_code' ); $response = wp_remote_post($url, array( 'body' => $fields, 'sslverify' => apply_filters('https_local_ssl_verify', false) ) ); $access_token = null; $username = null; $image = null; if( is_wp_error( $response ) || !isset($response['body']) ) { // Try again if( method_exists( $this, 'manual_cURL' ) ){ $content = $this->manual_cURL($url,$fields); } if( !isset($content) ){ $errormessage = 'User not added'; } }else{ $content = $response['body']; } if( isset($content) ) { // Before decoding JSON, remove Emoji characters from content $content = $this->removeEmoji($content); if( function_exists('json_decode') ){ $auth = @json_decode( $content, true ); }elseif( function_exists('alpine_json_decode') ){ $auth = @alpine_json_decode( $content, true ); } // If decoded correctly, should now have access token if( isset($auth['access_token']) ) { $access_token = $auth['access_token']; $user = $auth['user']; $post_content = array( 'access_token' => $access_token, 'username' => $user['username'], 'picture' => $user['profile_picture'], 'fullname' => $user['full_name'], 'user_id' => $user['id'], 'client_id' => $client_id, 'client_secret' => $client_secret ); $success = $this->AddUser($post_content); }else{ $errormessage = 'No access token found'; } }elseif( !is_wp_error($response) && $response['response']['code'] >= 400 ) { $error = ''; if( function_exists('json_decode') ){ $error = @json_decode( $response['body'], true ); }elseif( function_exists('alpine_json_decode') ){ $error = @alpine_json_decode( $response['body'], true ); } $errormessage = $error->error_message; $errortype = $error->error_type; } } $defaults = $this->option_defaults(); $positions = $this->get_option_positions_by_tab( $currenttab ); echo '
'; if( !empty($success) ){ echo '
User successfully authorized.
'; }elseif( !empty($update) ){ echo '
User ('.$user.') updated.
'; }elseif( !empty($delete) ){ echo '
User ('.$user.') deleted.
'; }elseif( !empty($errormessage) ){ echo '
An error occured ('.$errormessage.').
'; } if( count($positions) ){ foreach( $positions as $position=>$positionsinfo){ if( $position == 'top'){ echo '
'; if( $positionsinfo['title'] ){ echo '

'. $positionsinfo['title'].'

'; } $users = $this->get_instagram_users(); if( empty($users) || ( is_array( $users ) && isset($users['none']) && is_array( $users['none'] ) ) ){ echo '

No users available. Add a user by following the instructions below.

'; }elseif( !empty($users) && is_array($users) ){ foreach($users as $name=>$info){ echo $this->show_user($info); //echo ''; // Not currently needed } } echo '
'; }else{ echo '
'; // Display Message about adding users $this->admin_display_add_message(); // Show directions for Add User Method One $this->admin_display_method_one($redirect); echo '
'; // Display Form echo '
'; ?>
" action="" method="post"> '; if( $positionsinfo['title'] ){ echo '

'. $positionsinfo['title'].'

'; } echo ''; echo ''; if( count($positionsinfo['options']) ){ foreach( $positionsinfo['options'] as $optionname ){ $option = $defaults[$optionname]; $fieldname = ( $option['name'] ); $fieldid = ( $option['name'] ); echo ''; } } echo ''; echo '
'; $this->AdminDisplayCallback(array() ,$option,$fieldname,$fieldid); // Don't display previously input info echo '
'; echo '
'; echo ''; echo ''; echo '
'; echo '
'; } } } echo ''; // close add div $this->admin_display_method_two(); } /** * Display Add User Method One * * @ Since 1.2.6.3 */ function admin_display_method_one($redirect){ ?>

:

  1. http://instagram.com/developer.
  2. get_private('name');?> WordPress plugin
          ****

:

Your Internet browser or the server that your WordPress site is hosted on may cause Method One to fail. Therefore, in Method Two you will use a tool hosted at theAlpinePress.com to retrieve the information you need and then manually submit it to the plugin using the form below.

  1. the Alpine Press

Manually Add New User

'Username','user_id' =>'User ID','access_token' => 'Access Token','client_id' => 'Client ID','client_secret' => 'Client Secret','picture' => 'Picture'); foreach($the_content as $name=>$title){ ?>

:

(!!!)

let me know if these directions become outdated.");?> '; echo '

System Check

'; echo '
Check the settings and extensions on your web server.
'; echo ''; echo ''; // PHP Version echo ''; // cURL echo ''; // Rec echo ''; echo ''; echo '
'; if ( function_exists('phpversion') ){ echo 'Current PHP version of your server: '. phpversion(); }else{ echo 'Current PHP version of your server: < 4'; } echo '
'; if ( function_exists('curl_init') ){ echo 'Check: curl_init function found.'; $version = curl_version(); echo '
cURL Version: '.$version['version'] ; // Try connecting to Instagram.com $request = 'http://instagram.com/'; $response = wp_remote_get($request,array('timeout' => 10)); if( is_wp_error( $response ) ){ echo '
Check: Plugin failed to connect to Instagram.com.'; echo '
WordPress Error Message: '.$response->get_error_message().'.'; }else{ if( isset( $response['response'] ) && isset( $response['response']['code'] ) && isset( $response['response']['message'] )){ if( $response['response']['code'] == 200 ){ echo '
Check: Plugin successfully connected to Instagram.com.'; }else{ echo '
Check: Plugin failed to connect to Instagram.com.'; echo '
Code: '.$response['response']['code'].', Message: '.$response['response']['message'].'.'; } } } }else{ echo '

Check: curl_init function not found. To connect to Instagram.com, your server needs to have the cURL extension enabled. Unfortunately, this extension was not found on your server.

'; echo '

Recommendation(s):

'; echo '
    '; echo '
  1. Contact your web host. They may need to simply enable a PHP extension or open a port.
  2. '; echo '
'; } // JSON Decode echo '
'; if ( function_exists('json_decode') ){ echo 'Check: json_decode function found.'; $m = json_decode('{"code":1}', true); if( !empty( $m ) && isset($m['code']) && $m['code'] == 1 ){ echo '
Check: Sample JSON successfully decoded and parsed.'; }else{ echo '
Check: Server failed to decode sample JSON.'; } }else{ echo '

Check: json_decode function not found. Instagram feeds are in a format known as JSON. Servers with PHP 5.2.0+ have a JSON extension that allows the server to quickly interpret the JSON feed. Unfortunately, this function was not found on your server.

'; echo '

Recommendation(s):

'; echo '
    '; echo '
  1. Contact your web host. A good hosting provider should be using an updated version of PHP with JSON extensions enabled.
  2. '; echo '
  3. The Alpine plugin includes a backup function that can interpret JSON, but it is very slow. You can expect loading times of 20+ seconds. Therefore, I recommended visiting the Plugin Settings page and setting the cache time to between 24 and 48 hours.
  4. '; echo '
'; //echo '
PHP Server is missing .
'; } echo '
'; echo '

If you are looking for a new/better web host, I recommend the following sites. (Full disclosure: I use these sites, am in their affiliate programs, and get paid a commision if you sign up using these links):

'; echo '
    '; echo '
  • BlueHost is one of the most popular hosting options on the Internet. They are also the most recommended hosting service by WordPress. BlueHost makes it quick and easy to install WordPress and I use them to host theAlpinePress.com.
  • '; echo '
  • FatCow is a nice, cheap option. I have noticed that the servers go down a few times a year, but since I pay around $4 a month to host 3 WordPress sites (ElectricTreeHouse.com, Rebuild-US.net, and KylinUntitled.com), I am okay with it.
  • '; echo '
'; echo '
'; echo ''; // Close top $currenttab = 'plugin-tools'; $defaults = $this->option_defaults(); $submitted = ( ( isset($_POST[ "hidden" ]) && ($_POST[ "hidden" ]=="Y") ) ? true : false ); $test = (isset($_POST[ $this->get_private('settings').'_test']['submit-test']) && $_POST[ $this->get_private('settings').'_test']['submit-test'] == 'Test Plugin')?true:false; if( $submitted && isset($_POST['shortcode']) && $test ){ $short = str_replace('\"','"',$_POST['shortcode']); }else{ $short = ''; } ?>

Plugin Loading Test

Create a shortcode using the Shortcode Generator and paste it into the box below. Then, click "Test Plugin" to use the tool. The plugin will be loaded once directly from the Instagram feed and once from the cache (unless disabled). This test shows the server-side loading times only and does not include delays from loading photos into a browser or running the JS/jQuery code (It should be clear that loading from the cache is much faster).


'; echo '

Load from the Instagram feed

'; echo '
'; echo do_shortcode($short_one); echo '
'; echo '

Load from cache

'; echo '
'; echo do_shortcode($short_two); echo '
'; } } } ?>