%PDF- %PDF-
Direktori : /var/www/html/buggydubrovnik.com/wp-content/themes/Avada/includes/ |
Current File : /var/www/html/buggydubrovnik.com/wp-content/themes/Avada/includes/class-fusion-widget-tweets.php |
<?php class Fusion_Widget_Tweets extends WP_Widget { public function __construct() { $widget_ops = array( 'classname' => 'tweets', 'description' => '' ); $control_ops = array( 'id_base' => 'tweets-widget' ); parent::__construct('tweets-widget', 'Avada: Twitter', $widget_ops, $control_ops); } public function widget( $args, $instance ) { extract( $args ); $title = apply_filters( 'widget_title', isset( $instance['title'] ) ? $instance['title'] : '' ); $twitter_id = isset( $instance['twitter_id'] ) ? $instance['twitter_id'] : ''; $count = (int) isset( $instance['count'] ) ? $instance['count'] : 3; $consumer_key = isset( $instance['consumer_key'] ) ? $instance['consumer_key'] : ''; $consumer_secret = isset( $instance['consumer_secret'] ) ? $instance['consumer_secret'] : ''; $access_token = isset( $instance['access_token'] ) ? $instance['access_token'] : ''; $access_token_secret = isset( $instance['access_token_secret'] ) ? $instance['access_token_secret'] : ''; $widget_id = isset( $instance['widget_id'] ) ? $instance['widget_id'] : ''; $widget_type = isset( $instance['widget_type'] ) ? $instance['widget_type'] : 'avada_style'; $width = isset( $instance['width'] ) ? $instance['width'] : '400'; $height = isset( $instance['height'] ) ? $instance['height'] : '400'; $theme = isset( $instance['theme'] ) ? $instance['theme'] : 'light'; $link_color = isset( $instance['link_color'] ) ? $instance['link_color'] : Avada()->settings->get( 'link_color' ); $border_color = isset( $instance['border_color'] ) ? $instance['border_color'] : Avada()->settings->get( 'timeline_color' ); $show_header = isset( $instance['show_header'] ) ? $instance['show_header'] : 1; $show_footer = isset( $instance['show_footer'] ) ? $instance['show_footer'] : 1; $show_borders = isset( $instance['show_borders'] ) ? $instance['show_borders'] : 1; $transparent_bg = isset( $instance['transparent_bg'] ) ? $instance['transparent_bg'] : 0; $chrome = $this->get_chrome( $instance ); echo $before_widget; if ( $title ) { echo $before_title . $title . $after_title; } if ( 'twitter_style' == $widget_type || 'twitter_preconfig_style' == $widget_type ) { if ( $widget_id ) { $widget_params = array( 'title' => $title, 'twitter_id' => $twitter_id, 'count' => $count, 'widget_id' => $widget_id, 'widget_type' => $widget_type, 'width' => $width, 'height' => $height, 'theme' => $theme, 'link_color' => $link_color, 'border_color' => $border_color, 'show_header' => $show_header, 'show_footer' => $show_footer, 'show_borders' => $show_borders, 'transparent_bg' => $transparent_bg, 'chrome' => $chrome, ); $this->render_new_widget( $widget_params ); } } else { if ( $twitter_id && $consumer_key && $consumer_secret && $access_token && $access_token_secret && $count ) { $widget_id = $args['widget_id']; $widget_params = array( 'title' => $title, 'twitter_id' => $twitter_id, 'count' => $count, 'widget_id' => $widget_id, 'consumer_key' => $consumer_key, 'consumer_secret' => $consumer_secret, 'access_token' => $access_token, 'access_token_secret' => $access_token_secret, ); $this->render_old_widget( $widget_params ); } } echo $after_widget; } public function update( $new_instance, $old_instance ) { $instance = $old_instance; $instance['title'] = strip_tags( $new_instance['title'] ); $instance['twitter_id'] = $new_instance['twitter_id']; $instance['count'] = $new_instance['count']; $instance['consumer_key'] = $new_instance['consumer_key']; $instance['consumer_secret'] = $new_instance['consumer_secret']; $instance['access_token'] = $new_instance['access_token']; $instance['access_token_secret'] = $new_instance['access_token_secret']; $instance['widget_id'] = $new_instance['widget_id']; $instance['widget_type'] = $new_instance['widget_type']; $instance['width'] = $new_instance['width']; $instance['height'] = $new_instance['height']; $instance['theme'] = $new_instance['theme']; $instance['link_color'] = $new_instance['link_color']; $instance['border_color'] = $new_instance['border_color']; $instance['show_header'] = $new_instance['show_header']; $instance['show_footer'] = $new_instance['show_footer']; $instance['show_borders'] = $new_instance['show_borders']; $instance['transparent_bg'] = $new_instance['transparent_bg']; return $instance; } public function form( $instance ) { $defaults = array( 'title' => __( 'Recent Tweets', 'Avada' ), 'twitter_id' => '', 'count' => 3, 'consumer_key' => '', 'consumer_secret' => '', 'access_token' => '', 'access_token_secret' => '', 'widget_id' => '', 'widget_type' => 'avada_style', 'width' => '', 'height' => '', 'theme' => 'light', 'link_color' => Avada()->settings->get( 'link_color' ), 'border_color' => Avada()->settings->get( 'timeline_color' ), 'show_header' => 'on', 'show_footer' => 'on', 'show_borders' => 'on', 'transparent_bg' => 'off', ); $instance = wp_parse_args( (array) $instance, $defaults ); $twitter_doc_url = 'https://theme-fusion.com/avada-doc/twitter-widget/'; ?> <script type="text/javascript"> jQuery( document ).ready( function() { var $widget_type_select = jQuery( '#<?php echo $this->get_field_id( 'widget_type' ); ?>' ); if ( $widget_type_select.val() == 'twitter_style' ) { $widget_type_select.parents( '.widget' ).find( '.avada_style' ).hide(); $widget_type_select.parents( '.widget' ).find( '.twitter_style' ).show(); $widget_type_select.parents( '.widget' ).find( '.general_option' ).show(); } else if ( $widget_type_select.val() == 'avada_style' ) { $widget_type_select.parents( '.widget' ).find( '.avada_style' ).show(); $widget_type_select.parents( '.widget' ).find( '.general_option' ).show(); $widget_type_select.parents( '.widget' ).find( '.twitter_style' ).hide(); } else { $widget_type_select.parents( '.widget' ).find( '.twitter_style' ).hide(); $widget_type_select.parents( '.widget' ).find( '.avada_style' ).hide(); $widget_type_select.parents( '.widget' ).find( '.general_option' ).hide(); $widget_type_select.parents( '.widget' ).find( '.widget_id' ).show(); } jQuery( '.widget-type-selector' ).change( function() { if ( jQuery( this ).val() == 'twitter_style' ) { jQuery( this ).parents( '.widget' ).find( '.avada_style' ).hide(); jQuery( this ).parents( '.widget' ).find( '.twitter_style' ).show(); jQuery( this ).parents( '.widget' ).find( '.general_option' ).show(); } else if ( jQuery( this ).val() == 'avada_style' ) { jQuery( this ).parents( '.widget' ).find( '.avada_style' ).show(); jQuery( this ).parents( '.widget' ).find( '.general_option' ).show(); jQuery( this ).parents( '.widget' ).find( '.twitter_style' ).hide(); } else { jQuery( this ).parents( '.widget' ).find( '.twitter_style' ).hide(); jQuery( this ).parents( '.widget' ).find( '.avada_style' ).hide(); jQuery( this ).parents( '.widget' ).find( '.general_option' ).hide(); jQuery( this ).parents( '.widget' ).find( '.widget_id' ).show(); } }); }); </script> <p><?php _e( 'For general setup information or information on how to setup a Twitter App or a Twitter Widget on twitter.com, please see our documentation:', 'Avada' ); ?> <a href="<?php echo $twitter_doc_url; ?>" target="_blank"><?php _e( 'How to setup the Avada twitter widget.', 'Avada' ); ?></a></p> <p> <label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:', 'Avada' ); ?></label> <input class="widefat" type="text" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo $instance['title']; ?>" /> </p> <p> <label for="<?php echo $this->get_field_id( 'widget_type' ); ?>"><?php _e( 'Widget Style:', 'Avada' ); ?></label> <select id="<?php echo $this->get_field_id( 'widget_type' ); ?>" name="<?php echo $this->get_field_name( 'widget_type' ); ?>" class="widefat widget-type-selector" style="width:100%;"> <option value="twitter_preconfig_style" <?php selected( $instance['widget_type'], 'twitter_preconfig_style' ); ?>><?php _e( 'Twitter Preconfigured Style', 'Avada' ); ?></option> <option value="twitter_style" <?php selected( $instance['widget_type'], 'twitter_style' ); ?>><?php _e( 'Twitter Style', 'Avada' ); ?></option> <option value="avada_style" <?php selected( $instance['widget_type'], 'avada_style' ); ?>><?php _e( 'Avada Style', 'Avada' ); ?></option> </select> </p> <p class="twitter_style widget_id"> <label for="<?php echo $this->get_field_id( 'widget_id' ); ?>"><?php _e( 'Twitter Widget ID:', 'Avada' ); ?></label> <input class="widefat" type="text" id="<?php echo $this->get_field_id( 'widget_id' ); ?>" name="<?php echo $this->get_field_name( 'widget_id' ); ?>" value="<?php echo $instance['widget_id']; ?>" /> </p> <p class="avada_style"> <label for="<?php echo $this->get_field_id( 'consumer_key' ); ?>"><?php _e( 'Consumer Key:', 'Avada' ); ?></label> <input class="widefat" type="text" id="<?php echo $this->get_field_id( 'consumer_key' ); ?>" name="<?php echo $this->get_field_name( 'consumer_key' ); ?>" value="<?php echo $instance['consumer_key']; ?>" /> </p> <p class="avada_style"> <label for="<?php echo $this->get_field_id( 'consumer_secret' ); ?>"><?php _e( 'Consumer Secret:', 'Avada' ); ?></label> <input class="widefat" type="text" id="<?php echo $this->get_field_id( 'consumer_secret' ); ?>" name="<?php echo $this->get_field_name( 'consumer_secret' ); ?>" value="<?php echo $instance['consumer_secret']; ?>" /> </p> <p class="avada_style"> <label for="<?php echo $this->get_field_id( 'access_token' ); ?>"><?php _e( 'Access Token:', 'Avada' ); ?></label> <input class="widefat" type="text" id="<?php echo $this->get_field_id( 'access_token' ); ?>" name="<?php echo $this->get_field_name( 'access_token' ); ?>" value="<?php echo $instance['access_token']; ?>" /> </p> <p class="avada_style"> <label for="<?php echo $this->get_field_id( 'access_token_secret' ); ?>"><?php _e( 'Access Token Secret:', 'Avada' ); ?></label> <input class="widefat" type="text" id="<?php echo $this->get_field_id( 'access_token_secret' ); ?>" name="<?php echo $this->get_field_name( 'access_token_secret' ); ?>" value="<?php echo $instance['access_token_secret']; ?>" /> </p> <p class="avada_style"> <label for="<?php echo $this->get_field_id( 'twitter_id' ); ?>"><?php _e( 'Twitter Username:', 'Avada' ); ?></label> <input class="widefat" type="text" id="<?php echo $this->get_field_id( 'twitter_id' ); ?>" name="<?php echo $this->get_field_name( 'twitter_id' ); ?>" value="<?php echo $instance['twitter_id']; ?>" /> </p> <p class="general_option"> <label for="<?php echo $this->get_field_id( 'count' ); ?>"><?php _e( 'Number of Tweet (max. 20 tweets possible):', 'Avada' ); ?></label> <input class="widefat" type="text" id="<?php echo $this->get_field_id( 'count' ); ?>" name="<?php echo $this->get_field_name( 'count' ); ?>" value="<?php echo $instance['count']; ?>" /> </p> <p class="twitter_style"> <label for="<?php echo $this->get_field_id( 'width' ); ?>"><?php _e( 'Max. Width (has to be between 180 and 520):', 'Avada' ); ?></label> <input class="widefat" type="text" id="<?php echo $this->get_field_id( 'width' ); ?>" name="<?php echo $this->get_field_name( 'width' ); ?>" value="<?php echo $instance['width']; ?>" /> </p> <p class="twitter_style"> <label for="<?php echo $this->get_field_id( 'height' ); ?>"><?php _e( 'Height (min. is 200):', 'Avada' ); ?></label> <input class="widefat" type="text" id="<?php echo $this->get_field_id( 'height' ); ?>" name="<?php echo $this->get_field_name( 'height' ); ?>" value="<?php echo $instance['height']; ?>" /> </p> <p class="twitter_style"> <label for="<?php echo $this->get_field_id( 'theme' ); ?>"><?php _e( 'Color Scheme:', 'Avada' ); ?></label> <select id="<?php echo $this->get_field_id( 'theme' ); ?>" name="<?php echo $this->get_field_name( 'theme' ); ?>" class="widefat" style="width:100%;"> <option value="light" <?php echo ( 'light' == $instance['theme'] ) ? 'selected="selected"' : ''; ?>><?php _e( 'Light', 'Avada' ); ?></option> <option value="dark" <?php echo ( 'dark' == $instance['theme'] ) ? 'selected="selected"' : ''; ?>><?php _e( 'Dark', 'Avada' ); ?></option> </select> </p> <p class="twitter_style"> <label for="<?php echo $this->get_field_id( 'link_color' ); ?>"><?php _e( 'Link Color (leave empty for Theme default link color):', 'Avada' ); ?></label> <input class="widefat" type="text" id="<?php echo $this->get_field_id( 'link_color' ); ?>" name="<?php echo $this->get_field_name( 'link_color' ); ?>" value="<?php echo $instance['link_color']; ?>" /> </p> <p class="twitter_style"> <label for="<?php echo $this->get_field_id( 'border_color' ); ?>"><?php _e( 'Border Color:', 'Avada' ); ?></label> <input class="widefat" type="text" id="<?php echo $this->get_field_id( 'border_color' ); ?>" name="<?php echo $this->get_field_name( 'border_color' ); ?>" value="<?php echo $instance['border_color']; ?>" /> </p> <p class="twitter_style"> <input class="checkbox" type="checkbox" <?php checked( $instance['show_header'], 'on' ); ?> id="<?php echo $this->get_field_id( 'show_header' ); ?>" name="<?php echo $this->get_field_name( 'show_header' ); ?>" /> <label for="<?php echo $this->get_field_id( 'show_header' ); ?>"><?php _e( 'Show Header', 'Avada' ); ?></label> </p> <p class="twitter_style"> <input class="checkbox" type="checkbox" <?php checked( $instance['show_footer'], 'on' ); ?> id="<?php echo $this->get_field_id( 'show_footer' ); ?>" name="<?php echo $this->get_field_name( 'show_footer' ); ?>" /> <label for="<?php echo $this->get_field_id( 'show_footer' ); ?>"><?php _e( 'Show Footer', 'Avada' ); ?></label> </p> <p class="twitter_style"> <input class="checkbox" type="checkbox" <?php checked( $instance['show_borders'], 'on' ); ?> id="<?php echo $this->get_field_id( 'show_borders' ); ?>" name="<?php echo $this->get_field_name( 'show_borders' ); ?>" /> <label for="<?php echo $this->get_field_id( 'show_borders' ); ?>"><?php _e( 'Show Borders', 'Avada' ); ?></label> </p> <p class="twitter_style"> <input class="checkbox" type="checkbox" <?php checked( $instance['transparent_bg'], 'on' ); ?> id="<?php echo $this->get_field_id( 'transparent_bg' ); ?>" name="<?php echo $this->get_field_name( 'transparent_bg' ); ?>" /> <label for="<?php echo $this->get_field_id( 'transparent_bg' ); ?>"><?php _e( 'Transparent Background', 'Avada' ); ?></label> </p> <?php } /* ================================================================================================= New Widget Helper Functions ================================================================================================= */ /* * Renders the new twitter widget directly from twitter * * @param array $widget_params The needed twitter API parameters to render the widget * * @return void Echos output directly */ public function render_new_widget( $widget_params ) { extract( $widget_params ); ?> <div style="overflow:hidden"> <?php if ( 'twitter_style' == $widget_type ): ?> <a class="twitter-timeline" data-dnt="true" href="https://twitter.com/<?php echo $twitter_id; ?>" data-widget-id="<?php echo $widget_id; ?>" data-tweet-limit = "<?php echo $count; ?>" data-width="<?php echo $width; ?>" data-height="<?php echo $height; ?>" width="<?php echo $width; ?>" height="<?php echo $height; ?>" data-theme="<?php echo $theme; ?>" data-link-color="<?php echo $link_color; ?>" data-border-color="<?php echo $border_color; ?>" data-chrome="<?php echo $chrome; ?>">Twitter Tweets</a> <?php else : ?> <a class="twitter-timeline" data-dnt="true" href="https://twitter.com/<?php echo $twitter_id; ?>" data-widget-id="<?php echo $widget_id; ?>">Twitter Tweets</a> <?php endif; ?> <script> !function(d,s,id) { var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if (!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);} } (document,"script","twitter-wjs"); </script> </div> <?php } /* * Returns the correct flag string for twiiter chrome params. * * @param array $instance The twitter widget's instance parameters * * @return string The flag string for the twitter widget js API */ public function get_chrome( $instance ) { $chrome = ''; $instance['show_header'] = isset( $instance['show_header'] ) ? $instance['show_header'] : 1; $instance['show_footer'] = isset( $instance['show_footer'] ) ? $instance['show_footer'] : 1; $instance['show_borders'] = isset( $instance['show_borders'] ) ? $instance['show_borders'] : 1; $instance['transparent_bg'] = isset( $instance['transparent_bg'] ) ? $instance['transparent_bg'] : 0; if ( 'on' != $instance['show_header'] ) { $chrome .= 'noheader '; } if ( 'on' != $instance['show_footer'] ) { $chrome .= 'nofooter '; } if ( 'on' != $instance['show_borders'] ) { $chrome .= 'noborders '; } if ( $instance['transparent_bg'] && 'on' == $instance['transparent_bg'] ) { $chrome .= 'transparent '; } return rtrim( $chrome ); } /* ================================================================================================= Old Widget Helper Functions ================================================================================================= */ /* * Renders the old twitter widget using the REST API v1.1 * * @param array $widget_params The needed twitter API parameters to render the widget * * @return void Echos output directly */ public function render_old_widget( $widget_params ) { extract( $widget_params ); $transName = 'list_tweets_' . $widget_id; $tweets_body = get_transient( $transName ); if ( ! $tweets_body ) { $token = get_option( 'cfTwitterToken_' . $widget_id ); // Get a new token anyways delete_option( 'cfTwitterToken_'.$widget_id ); // Getting new auth bearer only if we don't have one if ( ! $token ) { // Preparing credentials $credentials = $consumer_key . ':' . $consumer_secret; $toSend = base64_encode( $credentials ); // Http post arguments $args = array( 'method' => 'POST', 'httpversion' => '1.1', 'blocking' => true, 'headers' => array( 'Authorization' => 'Basic ' . $toSend, 'Content-Type' => 'application/x-www-form-urlencoded;charset=UTF-8', ), 'body' => array( 'grant_type' => 'client_credentials', ), ); add_filter( 'https_ssl_verify', '__return_false' ); $response = wp_remote_post( 'https://api.twitter.com/oauth2/token', $args ); $keys = json_decode( wp_remote_retrieve_body( $response ) ); if ( $keys ) { // Saving token to wp_options table update_option( 'cfTwitterToken_' . $widget_id, $keys->access_token ); $token = $keys->access_token; } } // We have bearer token wether we obtained it from API or from options $args = array( 'httpversion' => '1.1', 'blocking' => true, 'headers' => array( 'Authorization' => "Bearer $token" ) ); add_filter( 'https_ssl_verify', '__return_false' ); $api_url = 'https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=' . $twitter_id . '&count=' . $count; $response = wp_remote_get( $api_url, $args ); $tweets_body = wp_remote_retrieve_body( $response ); set_transient( $transName, $tweets_body, 600 ); } $tweets = false; if ( ! empty( $tweets_body ) ) { $tweets = json_decode( $tweets_body, true ); if ( ! is_array( $tweets ) ) { $tweets = false; } } if ( $tweets && is_array( $tweets ) ) { ?> <div class="twitter-box"> <div class="twitter-holder"> <div class="b"> <div class="tweets-container" id="tweets_<?php echo $widget_id; ?>"> <ul class="jtwt"> <?php foreach ( $tweets as $tweet ) : ?> <li class="jtwt_tweet"> <p class="jtwt_tweet_text"> <?php $latestTweet = $this->tweet_get_html( $tweet ); echo $latestTweet; ?> </p> <?php $twitterTime = strtotime( $tweet['created_at'] ); $timeAgo = $this->ago( $twitterTime ); ?> <a href="http://twitter.com/<?php echo $tweet['user']['screen_name']; ?>/statuses/<?php echo $tweet['id_str']; ?>" class="jtwt_date"><?php echo $timeAgo; ?></a> </li> <?php endforeach; ?> </ul> </div> </div> </div> <span class="arrow"></span> </div> <?php } } /* * Converts the tweet text into a HTML formatted string, incl. links for URLs, Hashtags and users * * @param string $tweet The tweet text * @param boolean $links Flag if link tags for URLs should be added * @param boolean $users Flag if link tags for users should be added * @param boolean $hashtags Flag if link tags for hashtags should be added * @param boolean $media Flag if link tags for media should be added * * @return string The HTML formatted tweet text */ public function tweet_get_html( $tweet, $links = true, $users = true, $hashtags = true, $media = true ) { if ( array_key_exists( 'retweeted_status', $tweet ) ) { $tweet = $tweet['retweeted_status']; } $return = $tweet['text']; $entities = array(); $temp = array(); if ( $links && is_array( $tweet['entities']['urls'] ) ) { foreach ( $tweet['entities']['urls'] as $e ) { $temp['start'] = $e['indices'][0]; $temp['end'] = $e['indices'][1]; $temp['replacement'] = '<a href="' . $e['expanded_url'] . '" target="_blank">' . $e['display_url'] . '</a>'; $entities[] = $temp; } } if ( $users && is_array( $tweet['entities']['user_mentions'] ) ) { foreach ( $tweet['entities']['user_mentions'] as $e ) { $temp['start'] = $e['indices'][0]; $temp['end'] = $e['indices'][1]; $temp['replacement'] = '<a href="https://twitter.com/' . $e['screen_name'] . '" target="_blank">@' . $e['screen_name'] . '</a>'; $entities[] = $temp; } } if ( $hashtags && is_array( $tweet['entities']['hashtags'] ) ) { foreach ( $tweet['entities']['hashtags'] as $e ) { $temp['start'] = $e['indices'][0]; $temp['end'] = $e['indices'][1]; $temp['replacement'] = '<a href="https://twitter.com/hashtag/' . $e['text'] . '?src=hash" target="_blank">#' . $e['text'] . '</a>'; $entities[] = $temp; } } if ( $media && array_key_exists( 'media', $tweet['entities'] ) ) { foreach ( $tweet['entities']['media'] as $e ) { $temp['start'] = $e['indices'][0]; $temp['end'] = $e['indices'][1]; $temp['replacement'] = '<a href="' . $e['url'] . '" target="_blank">' . $e['display_url'] . '</a>'; $entities[] = $temp; } } usort( $entities, array( $this, 'sort_tweets' ) ); foreach ( $entities as $item ) { $return = $this->mb_substr_replace( $return, $item['replacement'], $item['start'], $item['end'] - $item['start'] ); } return $return; } /* * The PHP substr_replace equivalent for multibyte encoded strings. * * @param string $string The string in which replacement should take place * @param string $replacement The replacement string * @param int $start The index where the replacement should start * @param int $length The length of $string that should be replaced * * @return array|string The correctly replaced string. When the result is an array, it runs recursively. */ public function mb_substr_replace( $string, $replacement, $start, $length = null ) { if ( is_array( $string ) ) { $num = count( $string ); // $replacement $replacement = is_array( $replacement ) ? array_slice( $replacement, 0, $num ) : array_pad( array( $replacement ), $num, $replacement ); // $start if ( is_array( $start ) ) { $start = array_slice( $start, 0, $num ); foreach ( $start as $key => $value ) { $start[$key] = is_int( $value ) ? $value : 0; } } else { $start = array_pad( array( $start ), $num, $start ); } // $length if ( ! isset( $length ) ) { $length = array_fill( 0, $num, 0 ); } elseif ( is_array( $length ) ) { $length = array_slice( $length, 0, $num ); foreach ( $length as $key => $value ) { $length[$key] = isset( $value ) ? ( is_int( $value ) ? $value : $num ) : 0; } } else { $length = array_pad( array( $length ), $num, $length ); } // Recursive call return array_map( __FUNCTION__, $string, $replacement, $start, $length ); } preg_match_all( '/./us', (string) $string, $smatches ); preg_match_all('/./us', (string) $replacement, $rmatches ); if ( null === $length ) { $length = mb_strlen( $string ); } array_splice( $smatches[0], $start, $length, $rmatches[0] ); return join( $smatches[0] ); } /* * Compare the start indices of two twitter entities * * @param array $a A twiiter entity * @param array $b A twiiter entity * * @return int The difference of the start indices */ public function sort_tweets( $a, $b ) { return ( $b['start'] - $a['start'] ); } /* * Function to display the correct time format for each tweet * * @param int $time A timestamp for the tweet publishing date * * @return string The formatted date for the twwet's publishing date */ public function ago( $time ) { $periods = array( __( 'second', 'Avada' ), __( 'minute', 'Avada' ), __( 'hour', 'Avada' ), __( 'day', 'Avada' ), __( 'week', 'Avada' ), __( 'month', 'Avada' ), __( 'year', 'Avada' ), __( 'decade', 'Avada' ) ); $periods_plural = array( __( 'seconds', 'Avada' ), __( 'minutes', 'Avada' ), __( 'hours', 'Avada' ), __( 'days', 'Avada' ), __( 'weeks', 'Avada' ), __( 'months', 'Avada' ), __( 'years', 'Avada' ), __( 'decades', 'Avada' ) ); $lengths = array( '60', '60', '24', '7', '4.35', '12', '10' ); $now = time(); $difference = $now - $time; $tense = __( 'ago', 'Avada' ); for ( $j = 0; $difference >= $lengths[$j] && $j < count( $lengths ) -1; $j++ ) { $difference /= $lengths[$j]; } $difference = round( $difference ); if ( 1 != $difference ) { $periods[$j] = $periods_plural[$j]; } return sprintf( '%s %s %s', $difference, $periods[$j], $tense ); } } // Omit closing PHP tag to avoid "Headers already sent" issues.