WordPress.org

Plugin Directory

Changeset 617518


Ignore:
Timestamp:
10/25/12 21:13:40 (18 months ago)
Author:
alexkingorg
Message:

version 2.6, full commit history is in GitHub

Location:
social/trunk
Files:
2 deleted
22 edited

Legend:

Unmodified
Added
Removed
  • social/trunk/README.txt

    r547543 r617518  
    22Contributors: crowdfavorite, alexkingorg 
    33Tags: comments, facebook, twitter, social, broadcast, import, integrate, integration 
    4 Requires at least: 3.2 
    5 Tested up to: 3.3.2 
    6 Stable tag: 2.5 
     4Requires at least: 3.3 
     5Tested up to: 3.4.2 
     6Stable tag: 2.6 
    77License: GPLv2 
    88License URI: http://www.gnu.org/licenses/gpl-2.0.html 
     
    3636 
    3737- Allow users to leave comments as Facebook or Twitter identity 
    38 - Twitter hovercard support (with @anywhere API key) 
    3938- Links point back to users' Facebook or Twitter profiles 
    4039- Indicators let you and visitors know people are who they say they are 
     
    51504. Visit your profile page under `Users > Profile` to add Twitter and Facebook accounts that only you can broadcast to 
    52515. Make sure your plugin or uploads directory writable to allow the cron jobs to fetch new comments from Twitter and Facebook 
    53 6. (Optional) Register for and add your [Twitter @anywhere API key](http://dev.twitter.com/anywhere) to the settings page to enable Twitter hovercards 
    5452 
    5553== Frequently Asked Questions == 
     
    8381    define('SOCIAL_COMMENTS_FILE', STYLESHEETPATH.'/social-comments.php'); 
    8482 
    85 Then you will need to create the `social-comments.php` file with your custom markup (perhaps copy it directly from the provided comments.php in the plugin) into your theme's directory.  
     83Then you will need to create the `social-comments.php` file with your custom markup (perhaps copy it directly from the provided comments.php in the plugin) into your theme's directory. 
    8684 
    8785= How can I define custom JS and/or CSS, or disable Social's JS/CSS? = 
     
    146144 
    147145    <?php add_action('social_cron_15', array('Your_Class', 'your_method')); ?> 
    148  
    149 = How can I turn on and off Twitter's @Anywhere functionality? = 
    150  
    151 To utilize Twitter's @Anywhere functionality (hovercards appearing on linked @usernames) you will need to have an @Anywhere application set up. If you don't have an application already created, 
    152 visit http://dev.twitter.com/anywhere. 
    153  
    154 Once you have an Consumer API key, login to your WordPress installation and navigate to Settings -> Social -> Twitter @Anywhere Settings. Enter your `Consumer key` in the input box and click on "Save Settings". 
    155  
    156 If you want to disable the @Anywhere functionality, simply remove the API key from the Social settings page and click "Save Settings". 
    157146 
    158147= Does the proxy application have access to my passwords now? = 
     
    2672564. Send customized broadcasts to each social account  
    268257 
    269 5. View of replies imported from Twitter as comments, @anywhere support  
     2585. View of replies imported from Twitter as comments 
    270259 
    271260 
    272261== Upgrade Notice == 
    273262 
    274 = 2.5 = 
    275 This version fixes an issue where users could be authenticated incorrectly (they would be logged in as someone else) when more than one user was logging in at exactly the same time. We also added a bunch of great new features and enhancements, as well as changes to improve reliability of comment importing from Facebook. 
     263= 2.6 = 
     264This version fixes numerous bugs, provides compatibility with the newest Twitter API, and provides a few new filters to customize the date output.  See the Changelog for details 
    276265 
    277266== Changelog == 
     267 
     268= 2.6 = 
     269* Now utilizes the newest Twitter API (1.1) 
     270* Removed the discontinued Twitter @anywhere service 
     271* Automatically approve Likes and Retweets 
     272* New date format filters: `social_formatted_date`, `social_comment_date`, `social_fuzzy_date` 
     273* XML-RPC / posts via email / scheduled posts now auto broadcast correctly 
     274* Enable Pages support in user profile social accounts is working correctly 
     275* Now utilizing longer timeouts for broadcast requests 
     276* Properly post links to facebook 
     277* Remove 'social' namespace for login i18n 
     278* Properly truncate comment broadcasting, giving the url priority 
     279 
    278280 
    279281= 2.5 = 
     
    294296* Support lazy loading of avatars (via plugin) 
    295297* Change comment header title based on context (creating a new comment, replying to a comment, etc.) 
    296 * Fix issue causing reactions to Facebook broadcasts to not be imported consistently as comments  
     298* Fix issue causing reactions to Facebook broadcasts to not be imported consistently as comments 
    297299* Various bug fixes and improvements 
    298300 
     
    315317* New authentication scheme improves security. 
    316318* Manual comment check commands from the admin bar and posts list admin page. 
    317 * Improved queue and locking system to reduce the possibility of social reactions being imported twice.  
     319* Improved queue and locking system to reduce the possibility of social reactions being imported twice. 
    318320* Filter: social_broadcast_format now contains a third parameter, $service_key. 
    319321* Filter: social_broadcast_permalink now contains a third parameter, $service_key. 
  • social/trunk/assets/social.js

    r547543 r617518  
    403403                    $this.data('running-import', true); 
    404404                    $inputs.attr('disabled', 'disabled'); 
    405                      
     405 
    406406                    var $loading = $('<div class="loading"></div>') 
    407407                        .height($this.height()) 
     
    411411                        .end() 
    412412                        .after($loading); 
    413      
     413 
    414414                    $.get($this.attr('action'), { 
    415415                        url: $('input[name=url]').val() 
     
    439439 
    440440        /** 
    441          * Twitter @Anywhere 
    442          */ 
    443         if (typeof twttr != 'undefined' && typeof twttr.anywhere != 'undefined') { 
    444             twttr.anywhere(function(T) { 
    445                 T.hovercards(); 
    446             }); 
    447         } 
    448  
    449         /** 
    450441         * Social items 
    451442         */ 
  • social/trunk/lib/social/aggregation/queue.php

    r547543 r617518  
    234234     * 
    235235     * @static 
    236      * @param  int  $timetamp 
     236     * @param  int  $timestamp 
    237237     * @return string 
    238238     */ 
    239     public static function next_run($timetamp) { 
     239    public static function next_run($timestamp) { 
    240240        $current_time = current_time('timestamp', 1); 
    241         $diff = $timetamp - $current_time; 
    242         if ($diff < Social_Date::HOUR) { 
    243             $next_run = Social_Date::fuzzy_span($timetamp, $current_time); 
     241        $diff = $timestamp - $current_time; 
     242        if ($diff < 0) { 
     243            $next_run = Social_Date::fuzzy_span($current_time + 1, $current_time); 
     244        } 
     245        else if ($diff < Social_Date::HOUR) { 
     246            $next_run = Social_Date::fuzzy_span($timestamp, $current_time); 
    244247        } 
    245248        else if ($diff < (Social_Date::DAY * 2)) { 
    246             $next_run = Social_Date::span_formatted($timetamp, $current_time); 
     249            $next_run = Social_Date::span_formatted($timestamp, $current_time); 
    247250            $next_run = sprintf(__('approximately %s', 'social'), $next_run); 
    248251        } 
    249252        else { 
    250             $next_run = Social_Date::fuzzy_span($timetamp, $current_time); 
     253            $next_run = Social_Date::fuzzy_span($timestamp, $current_time); 
    251254        } 
    252255        return $next_run; 
  • social/trunk/lib/social/controller/aggregation.php

    r547543 r617518  
    2222            return; 
    2323        } 
    24          
     24 
    2525        $post = get_post($this->request->query('post_id')); 
    2626        if ($post === null) { 
     
    6666                $post->aggregated_ids[$key] = array(); 
    6767            } 
    68              
     68 
    6969            if (isset($broadcasted_ids[$key]) and count($broadcasted_ids[$key])) { 
    7070                $service->aggregate_by_api($post); 
     
    176176    } 
    177177 
    178     /** 
    179      * Retrieves missing Twitter content. 
    180      * 
    181      * @return void 
    182      */ 
    183     public function action_retrieve_twitter_content() { 
    184  
    185         $this->verify_nonce(); 
    186  
    187         $broadcasted_id = $this->request->query('broadcasted_id'); 
    188         if ($broadcasted_id === null) { 
    189             exit; 
    190         } 
    191  
    192         $post_id = $this->request->query('post_id'); 
    193         if ($post_id !== null) { 
    194             $recovered = false; 
    195             $run = get_post_meta('_social_run_twitter_retrieval', true); 
    196             if (empty($run) or (int) $run <= current_time('timestamp', 1)) { 
    197                 Social::log('Running Twitter retrieval on post #:post_id for broadcasted #:broadcasted_id.', array( 
    198                     'post_id' => $post_id, 
    199                     'broadcasted_id' => $broadcasted_id 
    200                 )); 
    201  
    202                 // Do we have accounts to use? 
    203                 $service = Social::instance()->service('twitter'); 
    204                 if ($service !== false) { 
    205                     $accounts = $service->accounts(); 
    206                     if (count($accounts)) { 
    207                         foreach ($accounts as $account) { 
    208                             Social::log('Using account #:account_id.', array( 
    209                                 'account_id' => $account->id() 
    210                             )); 
    211  
    212                             // Run the request to the find Tweet 
    213                             $response = $service->request($account, 'statuses/show/'.$broadcasted_id); 
    214                             if ($response !== false and $response->body()->result != 'error') { 
    215                                 $recovered = $service->recovered_meta($post_id, $broadcasted_id, $response->body()->response); 
    216                             } 
    217  
    218                             Social::log('Response: :response', array( 
    219                                 'response' => print_r($response, true) 
    220                             )); 
    221                         } 
    222                     } 
    223                     else { 
    224                         Social::log('Using public API, no accounts found.'); 
    225                         $response = wp_remote_get('http://api.twitter.com/1/statuses/show/'.$broadcasted_id.'.json'); 
    226                         if (!is_wp_error($response) and !isset($response->error)) { 
    227                             $recovered = $service->recovered_meta($post_id, $broadcasted_id, $response); 
    228                         } 
    229  
    230                         Social::log('Response: :response', array( 
    231                             'response' => print_r($response, true) 
    232                         )); 
    233                     } 
    234                 } 
    235                 else { 
    236                     Social::log('Failed, Twitter class not found.'); 
    237                 } 
    238             } 
    239  
    240             if (!$recovered) { 
    241                 Social::log('Failed to recover the data, try again in 15 minutes.'); 
    242                 // Something went wrong, retry again in 15 minutes. 
    243                 update_post_meta($post_id, '_social_run_twitter_retrieval', (current_time('timestamp', 1) + 54000)); 
    244             } 
    245             else if (!empty($run)) { 
    246                 Social::log('Content found, cya!'); 
    247                 delete_post_meta($post_id, '_social_run_twitter_retrieval'); 
    248             } 
    249         } 
    250     } 
    251  
    252178} // End Social_Controller_Aggregation 
  • social/trunk/lib/social/controller/broadcast.php

    r547543 r617518  
    1010    /** 
    1111     * Formats previous broadcasts for display. 
    12      *  
     12     * 
    1313     * @param  string $broadcasted_id 
    1414     * @param  array  $broadcast 
     
    3838    /** 
    3939     * Displays the broadcast options form. 
    40      *  
     40     * 
    4141     * @return void 
    4242     */ 
     
    4747                wp_redirect(admin_url('index.php')); 
    4848            } 
    49              
     49 
    5050            return; 
    5151        } 
     
    103103                                                $errors[$key] = array(); 
    104104                                            } 
    105          
     105 
    106106                                            $errors[$key][$page_id] = __('Please enter content to be broadcasted.', 'social'); 
    107107                                        } 
     
    115115                                                    $account_content_meta[$key] = array(); 
    116116                                                } 
    117          
     117 
    118118                                                $account_content_meta[$key][$page_id] = $account_content[$key][$page_id]; 
    119119                                                $account_service_meta[$key][$page_id] = $service->get_broadcast_extras($page_id, $post); 
     
    164164                                            $broadcast_accounts[$key] = array(); 
    165165                                        } 
    166      
     166 
    167167                                        if (!isset($broadcast_accounts[$key][$page_id])) { 
    168168                                            if (isset($universal_pages[$page_id])) { 
     
    203203                    $location = get_edit_post_link($post->ID, false); 
    204204                } 
    205                  
     205 
    206206                wp_redirect($location); 
    207207                exit; 
     
    332332            } 
    333333        } 
    334          
     334 
    335335        $default_accounts = $this->social->default_accounts($post); 
    336336 
     
    365365                    $content = stripslashes($_POST['social_account_content'][$key][$id]); 
    366366                    $checked = ( 
    367                         isset($_POST['social_accounts']) &&  
    368                         isset($_POST['social_accounts'][$key]) &&  
     367                        isset($_POST['social_accounts']) && 
     368                        isset($_POST['social_accounts'][$key]) && 
    369369                        in_array($data['field_value_checked'], $_POST['social_accounts'][$key]) 
    370370                    ); 
     
    389389                    // check to see if a facebook page should be selected by default 
    390390                    // our data structure currently makes this awkward 
    391                     if (!$checked && $key == 'facebook' &&  
    392                         isset($default_accounts[$key]) &&  
     391                    if (!$checked && $key == 'facebook' && 
     392                        isset($default_accounts[$key]) && 
    393393                        isset($default_accounts[$key]['pages']) && 
    394394                        is_array($default_accounts[$key]['pages'])) { 
     
    522522                                'service' => $service->title(), 
    523523                            )); 
    524                              
     524 
    525525                            $response = $service->broadcast($account, $message, $args, $post->ID); 
    526526                            if ($response !== false) { 
  • social/trunk/lib/social/controller/settings.php

    r547543 r617518  
    3838                } 
    3939            } 
    40              
     40 
    4141            $accounts = apply_filters('social_settings_default_accounts', $accounts, $this); 
    4242 
     
    4848            } 
    4949 
    50             // Anywhere key 
    51             if ($this->request->post('social_twitter_anywhere_api_key') !== null) { 
    52                 Social::option('twitter_anywhere_api_key', $this->request->post('social_twitter_anywhere_api_key')); 
     50            // API accounts 
     51            if ($this->request->post('social_api_accounts')) { 
     52                Social::option('social_api_accounts', $this->request->post('social_api_accounts')); 
    5353            } 
    5454 
     
    6262                } 
    6363            } 
    64              
     64 
    6565            // Disable Social's comment display feature 
    6666            if (isset($_POST['social_use_standard_comments'])) { 
     
    8484            exit; 
    8585        } 
    86          
     86 
    8787        $accounts = array(); 
    8888        foreach ($this->social->services() as $key => $service) { 
  • social/trunk/lib/social/date.php

    r547543 r617518  
    114114        $span = self::span($remote, $local); 
    115115        $timespan = abs($remote - $local); 
     116        $output = ''; 
    116117 
    117118        // Years 
    118119        if (!empty($span['years'])) { 
    119120            if ($span['years'] == '1') { 
    120                 return __('1 year', 'social'); 
    121             } 
    122             else { 
    123                 return sprintf(__('%s years', 'social'), $span['years']); 
     121                $output = __('1 year', 'social'); 
     122            } 
     123            else { 
     124                $output = sprintf(__('%s years', 'social'), $span['years']); 
    124125            } 
    125126        } 
     
    128129        if (!empty($span['months'])) { 
    129130            if ($span['months'] == '1') { 
    130                 return __('1 month', 'social'); 
    131             } 
    132             else { 
    133                 return sprintf(__('%s months', 'social'), $span['months']); 
     131                $output = __('1 month', 'social'); 
     132            } 
     133            else { 
     134                $output = sprintf(__('%s months', 'social'), $span['months']); 
    134135            } 
    135136        } 
     
    138139        if (!empty($span['weeks'])) { 
    139140            if ($span['weeks'] == '1') { 
    140                 return __('1 week', 'social'); 
    141             } 
    142             else { 
    143                 return sprintf(__('%s weeks', $span['weeks']), $span['weeks']); 
     141                $output = __('1 week', 'social'); 
     142            } 
     143            else { 
     144                $output = sprintf(__('%s weeks', $span['weeks']), $span['weeks']); 
    144145            } 
    145146        } 
     
    148149        if (!empty($span['days'])) { 
    149150            if ($span['days'] == '1') { 
    150                 return __('1 day', 'social'); 
    151             } 
    152             else { 
    153                 return sprintf(__('%s days', 'social'), $span['days']); 
     151                $output = __('1 day', 'social'); 
     152            } 
     153            else { 
     154                $output = sprintf(__('%s days', 'social'), $span['days']); 
    154155            } 
    155156        } 
     
    181182            if (!empty($span['seconds'])) { 
    182183                if ($span['seconds'] == '1') { 
    183                     return __('1 second', 'social'); 
     184                    $output = __('1 second', 'social'); 
    184185                } 
    185186                else { 
    186                     return sprintf(__('%s seconds', 'social'), $span['seconds']); 
     187                    $output = sprintf(__('%s seconds', 'social'), $span['seconds']); 
    187188                } 
    188189            } 
     
    190191 
    191192        if (!empty($hours) and !empty($minutes)) { 
    192             return $hours.' '.$minutes; 
     193            $output = $hours.' '.$minutes; 
    193194        } 
    194195        else if (!empty($hours)) { 
    195             return $hours; 
     196            $output = $hours; 
    196197        } 
    197198        else { 
    198             return $minutes; 
    199         } 
     199            $output = $minutes; 
     200        } 
     201 
     202        return apply_filters('social_formatted_date', $output, $remote, $local); 
    200203    } 
    201204 
     
    215218        $span = self::span($remote, $local); 
    216219        $timespan = abs($remote - $local); 
     220        $output = ''; 
    217221 
    218222        // Years 
    219223        if (!empty($span['years'])) { 
    220             return get_comment_date(); 
     224            $output = get_comment_date(); 
    221225        } 
    222226 
     
    224228        if (!empty($span['months'])) { 
    225229            if ($span['months'] == '1') { 
    226                 return __('1 month ago', 'social'); 
    227             } 
    228             else { 
    229                 return sprintf(__('%s months ago', 'social'), $span['months']); 
     230                $output = __('1 month ago', 'social'); 
     231            } 
     232            else { 
     233                $output = sprintf(__('%s months ago', 'social'), $span['months']); 
    230234            } 
    231235        } 
     
    234238        if (!empty($span['weeks'])) { 
    235239            if ($span['weeks'] == '1') { 
    236                 return __('1 week ago', 'social'); 
    237             } 
    238             else { 
    239                 return sprintf(__('%s weeks ago', $span['weeks']), $span['weeks']); 
     240                $output = __('1 week ago', 'social'); 
     241            } 
     242            else { 
     243                $output = sprintf(__('%s weeks ago', $span['weeks']), $span['weeks']); 
    240244            } 
    241245        } 
     
    244248        if (!empty($span['days'])) { 
    245249            if ($span['days'] == '1') { 
    246                 return __('1 day', 'social'); 
    247             } 
    248             else { 
    249                 return sprintf(__('%s days ago', 'social'), $span['days']); 
     250                $output = __('1 day', 'social'); 
     251            } 
     252            else { 
     253                $output = sprintf(__('%s days ago', 'social'), $span['days']); 
    250254            } 
    251255        } 
     
    275279        // Seconds 
    276280        if (empty($hours) and empty($minutes)) { 
    277             return __('just now', 'social'); 
     281            $output = __('just now', 'social'); 
    278282        } 
    279283 
    280284        if (!empty($hours)) { 
    281285            if ($span['hours'] > 1) { 
    282                 return sprintf(__('%s ago', 'social'), $hours); 
    283             } 
    284             else { 
    285                 return sprintf(__('%s ago', 'social'), $hours.' '.$minutes); 
     286                $output = sprintf(__('%s ago', 'social'), $hours); 
     287            } 
     288            else { 
     289                $output = sprintf(__('%s ago', 'social'), $hours.' '.$minutes); 
    286290            } 
    287291        } 
    288292        else { 
    289             return sprintf(__('%s ago', 'social'), $minutes); 
    290         } 
     293            $output = sprintf(__('%s ago', 'social'), $minutes); 
     294        } 
     295 
     296        return apply_filters('social_comment_date', $output, $remote, $local); 
    291297    } 
    292298 
     
    313319 
    314320        if ($offset <= self::MINUTE) { 
    315             $span = __('moments', 'social'); 
     321            $span = __('a few moments', 'social'); 
    316322        } 
    317323        elseif ($offset < (self::MINUTE * 20)) 
     
    394400        if ($timestamp <= $local_timestamp) { 
    395401            // This is in the past 
    396             return sprintf(__('% ago', 'social'), $span); 
     402            $output = sprintf(__('%s ago', 'social'), $span); 
    397403        } 
    398404        else 
    399405        { 
    400406            // This in the future 
    401             return sprintf(__('in %s', 'social'), $span); 
    402         } 
     407            $output = sprintf(__('in %s', 'social'), $span); 
     408        } 
     409 
     410        return apply_filters('social_fuzzy_date', $output, $remote, $local); 
    403411    } 
    404412 
  • social/trunk/lib/social/service.php

    r547543 r617518  
    6565        $params = '?social_controller=auth&social_action=authorize&target='.urlencode($url); 
    6666        if (is_admin()) { 
    67             $url = (defined('IS_PROFILE_PAGE') ? 'profile.php' : 'index.php'); 
     67            $url = (defined('IS_PROFILE_PAGE') ? 'profile.php' : 'options-general.php'); 
    6868            $url = admin_url($url.$params); 
    6969        } 
     
    300300 
    301301        return false; 
     302    } 
     303 
     304    /** 
     305     * Gets the specified "api" account. 
     306     * 
     307     * @return Social_Service_Account|Social_Service|bool 
     308     */ 
     309    public function api_account() { 
     310        if ($social_api_accounts = Social::option('social_api_accounts')) { 
     311            if (isset($social_api_accounts[$this->key()])) { 
     312                return $this->account($social_api_accounts[$this->key()]); 
     313            } 
     314        } 
     315 
     316        return null; 
    302317    } 
    303318 
     
    450465        $_format = $format; 
    451466        $available = $this->max_broadcast_length(); 
     467        $used_tokens = array(); 
     468 
     469        // Gather used tokens and subtract remaining characters from available length 
    452470        foreach (Social::comment_broadcast_tokens() as $token => $description) { 
    453             $_format = str_replace($token, '', $_format); 
     471            $replaced = 0; 
     472            $_format = str_replace($token, '', $_format, $replaced); 
     473            if ($replaced) { 
     474                $used_tokens[$token] = ''; 
     475            } 
    454476        } 
    455477        $available = $available - strlen($_format); 
    456478 
    457         $_format = explode(' ', $format); 
    458         foreach (Social::comment_broadcast_tokens() as $token => $description) { 
    459             $content = ''; 
     479        // Prep token replacement content 
     480        foreach ($used_tokens as $token => $content) { 
    460481            switch ($token) { 
    461482                case '{url}': 
     
    466487                    $url .= '#comment-'.$comment->comment_ID; 
    467488                    $url = apply_filters('social_comment_broadcast_permalink', $url, $comment, $this); 
    468                     $content = esc_url($url); 
     489                    $used_tokens[$token] = esc_url($url); 
    469490                    break; 
    470491                case '{content}': 
    471                     $content = strip_tags($comment->comment_content); 
    472                     $content = str_replace(array("\n", "\r", PHP_EOL), '', $content); 
    473                     $content = str_replace('&nbsp;', '', $content); 
     492                    $used_tokens[$token] = strip_tags($comment->comment_content); 
     493                    $used_tokens[$token] = str_replace(array("\n", "\r", PHP_EOL), '', $used_tokens[$token]); 
     494                    $used_tokens[$token] = str_replace('&nbsp;', '', $used_tokens[$token]); 
    474495                    break; 
    475496            } 
    476  
    477             if (strlen($content) > $available) { 
    478                 $content = substr($content, 0, ($available - 3)).'...'; 
    479             } 
    480  
    481             $content = apply_filters('social_format_comment_content', $content, $comment, $format, $this); 
    482  
    483             foreach ($_format as $haystack) { 
    484                 if (strpos($haystack, $token) !== false and $available > 0) { 
    485                     $haystack = str_replace($token, $content, $haystack); 
    486                     $available = $available - strlen($haystack); 
    487                     $format = str_replace($token, $content, $format); 
    488                     break; 
    489                 } 
     497        } 
     498 
     499        // if {url} is used, pre-allocate its length 
     500        if (isset($used_tokens['{url}'])) { 
     501            $available = $available - strlen($used_tokens['{url}']); 
     502        } 
     503 
     504        $used_tokens['{content}'] = apply_filters('social_format_comment_content', $used_tokens['{content}'], $comment, $format, $this); 
     505 
     506        // Truncate content to size limit 
     507        if (strlen($used_tokens['{content}']) > $available) { 
     508            $used_tokens['{content}'] = substr($used_tokens['{content}'], 0, ($available - 3)).'...'; 
     509        } 
     510 
     511        foreach ($used_tokens as $token => $replacement) { 
     512            if (strpos($format, $token) !== false) { 
     513                $format = str_replace($token, $replacement, $format); 
    490514            } 
    491515        } 
     
    514538            $args = apply_filters('social_api_endpoint_args', $args, $this->_key); 
    515539            $request = wp_remote_post($proxy, array( 
     540                'timeout' => 60, // default of 5 seconds if not set here 
    516541                'sslverify' => false, 
    517542                'body' => array( 
  • social/trunk/lib/social/service/account.php

    r547543 r617518  
    189189    } 
    190190 
     191    /** 
     192     * Update child accounts of a service account 
     193     * @abstract 
     194     * @param array $enabled_child_ids - array of enabled child account ids 
     195     */ 
     196    abstract public function update_enabled_child_accounts($enabled_child_ids); 
     197 
    191198} // End Social_Service_Account 
  • social/trunk/lib/social/service/facebook.php

    r547543 r617518  
    7575    public function broadcast($account, $message, array $args = array(), $post_id = null, $comment_id = null) { 
    7676        global $post; 
    77         // if post ID is set, this is a broadcast of a post,  
     77        // if post ID is set, this is a broadcast of a post, 
    7878        // if the comment ID is set it is a broadcast of a comment 
    7979        // TODO - add wrapper functions that abstract these actions out to separate methods 
     
    110110                } 
    111111            } 
    112              
     112 
    113113            // posting with a link, do not include URL in comment. 
    114114            $format = trim(str_replace('{url}', '', Social::option('comment_broadcast_format'))); 
     
    144144 
    145145        $args = apply_filters($this->key().'_broadcast_args', $args, $post_id, $comment_id); 
    146         return $this->request($account, 'feed', $args, 'POST'); 
     146        $endpoint = isset($args['link']) ? 'links' : 'feed'; 
     147        return $this->request($account, 'me/'.$endpoint, $args, 'POST'); 
    147148    } 
    148149 
     
    228229                                        } 
    229230                                    } 
    230      
     231 
    231232                                    Social_Aggregation_Log::instance($post->ID)->add($this->_key, $result->id, 'reply', false, $data); 
    232233                                    $result->status_id = $broadcasted_id; 
     
    336337                            'comment_date_gmt' => gmdate('Y-m-d H:i:s', strtotime($result->created_time)), 
    337338                        )); 
     339 
    338340                    } 
    339341                } 
     
    357359 
    358360                $result_id = (isset($result->status_id) ? $result->status_id : $result->id); 
    359                 if (($commentdata = $this->allow_comment($commentdata, $result_id, $post)) === false) { 
     361                if (apply_filters('social_approve_likes_and_retweets', true) && isset($result->like)) { 
     362                    $commentdata['comment_approved'] = 1; 
     363                } 
     364                else if (($commentdata = $this->allow_comment($commentdata, $result_id, $post)) === false) { 
    360365                    continue; 
    361366                } 
     
    376381                try 
    377382                { 
     383                    Social::Log('Attempting to save commentdata: :commentdata', array( 
     384                        'commentdata' => print_r($commentdata, true) 
     385                    )); 
    378386                    $comment_id = wp_insert_comment($commentdata); 
    379387 
     
    580588        ); 
    581589    } 
    582      
     590 
    583591    public static function social_settings_save($controller) { 
    584592        // Save Facebook pages 
     
    587595            define('IS_PROFILE_PAGE', true); 
    588596        } 
    589      
    590         $enabled_pages = $controller->request()->post('social_enabled_pages'); 
    591         if (!is_array($enabled_pages)) { 
    592             $enabled_pages = array(); 
     597 
     598        $enabled_child_accounts = $controller->request()->post('social_enabled_child_accounts'); 
     599        if (!is_array($enabled_child_accounts)) { 
     600            $enabled_child_accounts = array(); 
    593601        } 
    594602        $service = $controller->social()->service('facebook'); 
    595603        if ($service !== false) { 
    596             $fb_accounts = $service->accounts(); 
    597             foreach ($fb_accounts as $account) { 
    598                 // reset pages for account 
    599                 $fb_accounts[$account->id()]->pages(array(), $is_profile); 
    600                 if (count($enabled_pages) && isset($enabled_pages[$account->id()])) { 
    601                     // fetch available pages for account 
    602                     $pages = $service->get_pages($account, $is_profile); 
    603                     foreach ($enabled_pages[$account->id()] as $enabled_page_id) { 
    604                         if (isset($pages[$enabled_page_id])) { 
    605                             $fb_accounts[$account->id()]->page($pages[$enabled_page_id], $is_profile); 
    606                         } 
    607                     } 
    608                 } 
    609                  
    610             } 
    611             foreach ($fb_accounts as $account_id => $account) { 
    612                 $fb_accounts[$account_id] = $account->as_object(); 
    613             } 
    614             $service->accounts($fb_accounts)->save($is_profile); 
    615         } 
    616     } 
    617      
     604            foreach ($service->accounts() as $account) { 
     605                $updated_accounts = array(); 
     606                foreach ($service->accounts() as $account) { 
     607                    //default service to empty array in case it is not set 
     608                    $enabled_child_accounts[$service->key()] = isset($enabled_child_accounts[$service->key()]) ? $enabled_child_accounts[$service->key()] : array(); 
     609 
     610                    $account->update_enabled_child_accounts($enabled_child_accounts[$service->key()]); 
     611                    $updated_accounts[$account->id()] = $account->as_object(); 
     612                } 
     613                $service->accounts($updated_accounts)->save($is_profile); 
     614            } 
     615        } 
     616    } 
     617 
    618618    public static function social_settings_default_accounts($accounts, $controller) { 
    619619        if (is_array($controller->request()->post('social_default_pages'))) { 
  • social/trunk/lib/social/service/facebook/account.php

    r547543 r617518  
    256256 
    257257    /** 
     258     * 
     259     * 
     260     */ 
     261    public function update_enabled_child_accounts($enabled_child_ids) { 
     262        $is_profile = defined('IS_PROFILE_PAGE'); 
     263 
     264        // reset enabled pages for account 
     265        $this->pages(array(), $is_profile); 
     266        // get available pages for account 
     267        $pages = $this->fetch_child_accounts(); 
     268 
     269        // rebuild based on selections 
     270        foreach ($enabled_child_ids as $enabled_child_id) { 
     271            if (isset($pages[$enabled_child_id])) { 
     272                $this->page($pages[$enabled_child_id], $is_profile); 
     273            } 
     274        } 
     275    } 
     276 
     277    /** 
    258278     * Get all pages (the accounts are already segregated by personal/universal so we just want all of the pages). 
    259279     * 
     
    282302    public function fetch_child_accounts() { 
    283303        $pages = array(); 
    284         if ($this->use_pages()) { 
     304        if ($this->use_pages() or $this->use_pages(true)) { 
    285305            $service = new Social_Service_Facebook; 
    286306            $pages = $service->get_pages($this); 
  • social/trunk/lib/social/service/twitter.php

    r547543 r617518  
    2525        return 140; 
    2626    } 
    27      
     27 
    2828    /** 
    2929     * Any additional parameters that should be passed with a broadcast. 
     
    7272     */ 
    7373    public function aggregate_by_url(&$post, array $urls) { 
    74         $url = 'http://search.twitter.com/search.json?q='.implode('+OR+', $urls); 
    75         Social::log('Searching by URL(s) for post #:post_id. (Query: :url)', array( 
     74        if ( ! ($account = $this->api_account())) { 
     75            return; 
     76        } 
     77 
     78        Social::log('Searching by URL(s) for post #:post_id. urls -> :urls', array( 
    7679            'post_id' => $post->ID, 
    77             'url' => $url, 
     80            'urls' => print_r($url, true), 
    7881            'rpp' => 100 
    7982        )); 
    80         $request = wp_remote_get($url); 
    81         if (!is_wp_error($request)) { 
    82             $response = apply_filters('social_response_body', $request['body'], $this->_key); 
    83             if (isset($response->results) and is_array($response->results) and count($response->results)) { 
    84                 foreach ($response->results as $result) { 
    85                     $data = array( 
    86                         'username' => $result->from_user, 
    87                     ); 
    88  
    89                     if (in_array($result->id, $post->aggregated_ids[$this->_key])) { 
    90                         Social_Aggregation_Log::instance($post->ID)->add($this->_key, $result->id, 'url', true, $data); 
     83 
     84        $social_response = $this->request($account, 'search', array( 
     85            'q' => implode('+OR+', $urls) 
     86        )); 
     87 
     88        if (isset($social_response->body()->response) and is_array($social_response->body()->response) and count($social_response->body()->response)) { 
     89            foreach ($social_response->body()->response as $result) { 
     90                $data = array( 
     91                    'username' => $result->from_user, 
     92                ); 
     93 
     94                if (in_array($result->id, $post->aggregated_ids[$this->_key])) { 
     95                    Social_Aggregation_Log::instance($post->ID)->add($this->_key, $result->id, 'url', true, $data); 
     96                    continue; 
     97                } 
     98                else { 
     99                    if ($this->is_original_broadcast($post, $result->id)) { 
    91100                        continue; 
    92101                    } 
    93                     else { 
    94                         if ($this->is_original_broadcast($post, $result->id)) { 
    95                             continue; 
    96                         } 
    97                     } 
    98                      
    99                     $result->comment_type = (Social_Twitter::is_retweet(null, $result) ? 'social-twitter-rt' : 'social-twitter'); 
    100  
    101                     Social_Aggregation_Log::instance($post->ID)->add($this->_key, $result->id, 'url', false, $data); 
    102                     $post->aggregated_ids[$this->_key][] = $result->id; 
    103                     $post->results[$this->_key][$result->id] = $result; 
    104                 } 
     102                } 
     103 
     104                $result->comment_type = (Social_Twitter::is_retweet(null, $result) ? 'social-twitter-rt' : 'social-twitter'); 
     105 
     106                Social_Aggregation_Log::instance($post->ID)->add($this->_key, $result->id, 'url', false, $data); 
     107                $post->aggregated_ids[$this->_key][] = $result->id; 
     108                $post->results[$this->_key][$result->id] = $result; 
    105109            } 
    106110        } 
     
    182186                            } 
    183187                            // not a reply to a broadcast, or a reply to an aggregated (or broadcast) comment 
    184                             if (!isset($broadcasted_ids[$result->in_reply_to_status_id]) &&  
     188                            if (!isset($broadcasted_ids[$result->in_reply_to_status_id]) && 
    185189                                ( 
    186                                     !isset($post->aggregated_ids[$this->_key]) ||  
     190                                    !isset($post->aggregated_ids[$this->_key]) || 
    187191                                    !in_array($result->in_reply_to_status_id, $post->aggregated_ids[$this->_key]) 
    188192                                )) { 
     
    245249                    ); 
    246250 
    247                     if ($skip_approval) { 
    248                         $commentdata['comment_approved'] = '1'; 
     251                    if ($skip_approval || (apply_filters('social_approve_likes_and_retweets', true) && Social_Twitter::is_retweet(null, $result))) { 
     252                        $commentdata['comment_approved'] = 1; 
    249253                    } 
    250254                    else if (($commentdata = $this->allow_comment($commentdata, $result->id, $post)) === false) { 
     
    268272                    try 
    269273                    { 
     274                        Social::Log('Attempting to save commentdata: :commentdata', array( 
     275                            'commentdata' => print_r($commentdata, true) 
     276                        )); 
    270277                        $comment_id = wp_insert_comment($commentdata); 
    271278 
     
    346353        return ''; 
    347354    } 
    348      
     355 
    349356    /** 
    350357     * Parse a Twitter URL and return the tweet ID. 
     
    369376     */ 
    370377    public function import_tweet_by_url($post_id, $url) { 
     378        if ( ! ($account = $this->api_account())) { 
     379            return; 
     380        } 
     381 
    371382        $post = get_post($post_id); 
    372383 
     
    379390        $id = $this->tweet_url_to_id($url); 
    380391        if (!empty($id) and !$this->is_original_broadcast($post, $id)) { 
    381             Social::log('Importing tweet. -- ID: :id -- URL: :url'); 
    382             $url = 'http://api.twitter.com/1/statuses/show.json?id='.$id; 
    383             $request = wp_remote_get($url); 
    384             if (!is_wp_error($request)) { 
    385                 $response = apply_filters('social_response_body', $request['body'], $this->_key); 
     392            Social::log('Importing tweet. -- ID: :id -- URL: :url', array("id" => $id, "url" => $url)); 
     393            $social_response = $this->request($account, 'statuses/show/'.$id, array( 
     394                'include_entities' => 'true', 
     395            )); 
     396            error_log(print_r($social_response, true)); 
     397            if ($social_response !== false and is_object($social_response->body()->response)) { 
     398                $response = $social_response->body()->response; 
    386399                if ($response !== null and !isset($response->error)) { 
    387400                    $logger = Social_Aggregation_Log::instance($post->ID); 
     
    407420 
    408421                        $post->aggregated_ids[$this->_key][] = $response->id; 
    409                         $post->results[$this->_key][$response->id] = (object) array( 
    410                             'id' => $response->id, 
    411                             'from_user_id' => $response->user->id, 
    412                             'from_user' => $response->user->screen_name, 
    413                             'text' => $response->text, 
    414                             'created_at' => $response->created_at, 
    415                             'profile_image_url' => $response->user->profile_image_url, 
    416                             'in_reply_to_status_id' => $response->in_reply_to_status_id, 
    417                             'raw' => $response, 
    418                             'comment_type' => 'social-twitter', 
     422                        $post->results = array( 
     423                            $this->_key => array( 
     424                                $response->id => (object) array( 
     425                                    'id' => $response->id, 
     426                                    'from_user_id' => $response->user->id, 
     427                                    'from_user' => $response->user->screen_name, 
     428                                    'text' => $response->text, 
     429                                    'created_at' => $response->created_at, 
     430                                    'profile_image_url' => $response->user->profile_image_url, 
     431                                    'in_reply_to_status_id' => $response->in_reply_to_status_id, 
     432                                    'raw' => $response, 
     433                                    'comment_type' => 'social-twitter', 
     434                                ), 
     435                            ), 
    419436                        ); 
    420437 
     
    443460            } 
    444461            else { 
    445                 Social::log('Something went wrong... -- :response', array( 
    446                     'response' => print_r($request, true) 
    447                 )); 
    448  
    449462                $invalid = true; 
    450463            } 
     
    576589     */ 
    577590    public function recover_broadcasted_tweet_data($broadcasted_id, $post_id) { 
    578         $response = wp_remote_get('http://api.twitter.com/1/statuses/show/'.$broadcasted_id.'.json?include_entities=true'); 
    579         if (!is_wp_error($response)) { 
    580             $body = json_decode($response['body']); 
     591        if ( ! ($account = $this->api_account())) { 
     592            return; 
     593        } 
     594 
     595        $social_response = $this->request($account, '/statuses/show/'.$broadcasted_id, array( 
     596            'include_entities' => true, 
     597        )); 
     598 
     599        if ($social_response !== false && is_object($social_response->body()->response)) { 
     600            $body = $social_response->body()->response; 
    581601            if (!isset($body->error)) { 
    582602                $post_meta = get_post_meta($post_id, '_social_broadcasted_ids', true); 
     
    624644            $status_id = get_comment_meta($comment->comment_ID, 'social_status_id', true); 
    625645            $output = str_replace("rel='", "rel='".$status_id." ", $url); 
    626  
    627             $api_key = Social::option('twitter_anywhere_api_key'); 
    628             if (!empty($api_key)) { 
    629                 $output = str_replace("'>", "' style='display:none'>@", $output); 
    630                 $output .= '@'.get_comment_author($comment->comment_ID); 
    631             } 
    632             else { 
    633                 $output = str_replace("'>", "'>@", $output); 
    634             } 
     646            $output = str_replace("'>", "'>@", $output); 
    635647 
    636648            return $output; 
     
    639651        return $url; 
    640652    } 
    641      
     653 
    642654    /** 
    643655     * Comment types for this service. 
  • social/trunk/lib/social/service/twitter/account.php

    r471325 r617518  
    7070    } 
    7171 
     72    /** 
     73     * Update the enabled child accounts 
     74     * ( Currently not in use by twitter ) 
     75     * 
     76     * @param array $enabled_child_ids Array of enabled child account ids 
     77     */ 
     78    public function update_enabled_child_accounts($enabled_child_ids) { 
     79    } 
     80 
    7281} // End Social_Service_Twitter_Account 
  • social/trunk/social-twitter.php

    r547543 r617518  
    217217    } 
    218218 
    219     /** 
    220      * Enqueues the @Anywhere script. 
    221      * 
    222      * @static 
    223      * @return void 
    224      */ 
    225     public static function enqueue_assets() { 
    226         $api_key = Social::option('twitter_anywhere_api_key'); 
    227         if (!empty($api_key)) { 
    228             wp_enqueue_script('twitter_anywhere', 'http://platform.twitter.com/anywhere.js?id='.$api_key, array('social_js'), Social::$version, true); 
    229         } 
    230     } 
    231219 
    232220    /** 
     
    277265        return md5(trim($content)); 
    278266    } 
    279      
     267 
    280268    /** 
    281269     * Checks for a retweet via twitter API data and user perception. 
     
    361349        return $title; 
    362350    } 
    363      
     351 
    364352    /** 
    365353     * Add a "reply to" field to broadcast form. 
     
    395383add_filter('social_save_broadcasted_ids_data', array('Social_Twitter', 'social_save_broadcasted_ids_data'), 10, 5); 
    396384add_filter('social_item_output_title', array('Social_Twitter', 'social_item_output_title'), 10, 2); 
    397 add_action('wp_enqueue_scripts', array('Social_Twitter', 'enqueue_assets')); 
    398385add_action('social_broadcast_form_item_edit', array('Social_Twitter', 'social_broadcast_form_item_edit'), 10, 3); 
    399386 
  • social/trunk/social.php

    r547543 r617518  
    44Plugin URI: http://mailchimp.com/social-plugin-for-wordpress/ 
    55Description: Broadcast newly published posts and pull in discussions using integrations with Twitter and Facebook. Brought to you by <a href="http://mailchimp.com">MailChimp</a>. 
    6 Version: 2.5 
     6Version: 2.6 
    77Author: Crowd Favorite 
    88Author URI: http://crowdfavorite.com/ 
     
    2626     * @var  string  version number 
    2727     */ 
    28     public static $version = '2.5'; 
     28    public static $version = '2.6'; 
    2929 
    3030    /** 
     
    6767        'broadcast_format' => '{title}: {content} {url}', 
    6868        'comment_broadcast_format' => '{content} {url}', 
    69         'twitter_anywhere_api_key' => null, 
    7069        'system_cron_api_key' => null, 
    7170        'fetch_comments' => '1', 
     
    495494            } 
    496495            wp_remote_get( 
    497                 admin_url('index.php?'.http_build_query(array( 
     496                admin_url('options_general.php?'.http_build_query(array( 
    498497                    'social_controller' => 'cron', 
    499498                    'social_action' => 'check_crons', 
     
    577576            $suppress_no_accounts_notice = get_user_meta(get_current_user_id(), 'social_suppress_no_accounts_notice', true); 
    578577            if (!$this->_enabled and (!isset($_GET['page']) or $_GET['page'] != basename(SOCIAL_FILE)) and empty($suppress_no_accounts_notice)) { 
    579                 $dismiss = sprintf(__('<a href="%s" class="social_dismiss">[Dismiss]</a>', 'social'), esc_url(admin_url('index.php?social_controller=settings&social_action=suppress_no_accounts_notice'))); 
     578                $dismiss = sprintf(__('<a href="%s" class="social_dismiss">[Dismiss]</a>', 'social'), esc_url(admin_url('options-general.php?social_controller=settings&social_action=suppress_no_accounts_notice'))); 
    580579                $message = sprintf(__('To start using Social, please <a href="%s">add an account</a>.', 'social'), esc_url(Social::settings_url())); 
    581580                echo '<div class="error"><p>'.$message.' '.$dismiss.'</p></div>'; 
     
    605604                if (empty($suppress_enable_notice)) { 
    606605                    $message = __('When you enable Social, users will be created when they log in with Facebook or Twitter to comment. These users are created without a role and will be prevented from accessing the admin side of WordPress until an administrator edits the user to give them a role.', 'social'); 
    607                     $dismiss = sprintf(__('<a href="%s" class="social_dismiss">[Dismiss]</a>', 'social'), esc_url(admin_url('index.php?social_controller=settings&social_action=suppress_enable_notice'))); 
     606                    $dismiss = sprintf(__('<a href="%s" class="social_dismiss">[Dismiss]</a>', 'social'), esc_url(admin_url('options-general.php?social_controller=settings&social_action=suppress_enable_notice'))); 
    608607                    echo '<div class="updated"><p>'.$message.' '.$dismiss.'</p></div>'; 
    609608                } 
     
    614613            if ($error == '1') { 
    615614                echo '<div class="error"><p>'. 
    616                     sprintf(__('%s needs to be writable for Social\'s logging. <a href="%" class="social_dismiss">[Dismiss]</a>', 'social'), esc_html(Social::$plugins_path), esc_url(admin_url('index.php?social_controller=settings&social_action=clear_log_write_error'))). 
     615                    sprintf(__('%s needs to be writable for Social\'s logging. <a href="%" class="social_dismiss">[Dismiss]</a>', 'social'), esc_html(Social::$plugins_path), esc_url(admin_url('options-general.php?social_controller=settings&social_action=clear_log_write_error'))). 
    617616                    '</p></div>'; 
    618617            } 
     
    624623            foreach ($deauthed as $service => $data) { 
    625624                foreach ($data as $id => $message) { 
    626                     $dismiss = sprintf(__('<a href="%s" class="%s">[Dismiss]</a>', 'social'), esc_url(admin_url('index.php?social_controller=settings&social_action=clear_deauth&id='.$id.'&service='.$service)), 'social_dismiss'); 
     625                    $dismiss = sprintf(__('<a href="%s" class="%s">[Dismiss]</a>', 'social'), esc_url(admin_url('options-general.php?social_controller=settings&social_action=clear_deauth&id='.$id.'&service='.$service)), 'social_dismiss'); 
    627626                    echo '<div class="error"><p>'.esc_html($message).' '.$dismiss.'</p></div>'; 
    628627                } 
     
    658657            } 
    659658 
    660             $dismiss = sprintf(__('<a href="%s" class="%s">[Dismiss]</a>', 'social'), esc_url(admin_url('index.php?social_controller=settings&social_action=clear_2_0_upgrade')), 'social_dismiss'); 
     659            $dismiss = sprintf(__('<a href="%s" class="%s">[Dismiss]</a>', 'social'), esc_url(admin_url('options-general.php?social_controller=settings&social_action=clear_2_0_upgrade')), 'social_dismiss'); 
    661660            echo '<div class="error"><p>'.$output.' '.$dismiss.'</p></div>'; 
    662661        } 
     
    735734            delete_user_meta($user_id, 'social_default_accounts'); 
    736735        } 
    737     } 
    738      
     736 
     737        // Save Enabled child accounts 
     738        $is_profile = true; 
     739        $enabled_child_accounts = is_array($_POST['social_enabled_child_accounts']) ? $_POST['social_enabled_child_accounts'] : array(); 
     740        foreach ($this->services() as $service_key => $service) { 
     741            $updated_accounts = array(); 
     742            foreach ($service->accounts() as $account) { 
     743                //default service to empty array in case it is not set 
     744                $enabled_child_accounts[$service_key] = isset($enabled_child_accounts[$service_key]) ? $enabled_child_accounts[$service_key] : array(); 
     745 
     746                $account->update_enabled_child_accounts($enabled_child_accounts[$service_key]); 
     747                $updated_accounts[$account->id()] = $account->as_object(); 
     748            } 
     749            $service->accounts($updated_accounts)->save($is_profile); 
     750        } 
     751    } 
     752 
    739753    /** 
    740754     * Return array of enabled social broadcasting post types 
     
    952966            $xmlrpc = false; 
    953967            if ($new == 'publish') { 
    954                 if (defined('XMLRPC_REQUEST') and $old != 'publish') { 
     968                if ( ( defined('XMLRPC_REQUEST') or defined('SOCIAL_MAIL_PUBLISH') ) and $old != 'publish') { 
    955969                    $xmlrpc = true; 
    956970                    $this->xmlrpc_publish_post($post); 
     
    981995 
    982996            $broadcast_accounts = array(); 
     997            $broadcast_content = array(); 
     998            $broadcast_meta = array(); 
     999 
    9831000            foreach ($this->default_accounts($post) as $service_key => $accounts) { 
    9841001                $service = $this->service($service_key); 
    9851002                if ($service !== false) { 
     1003                    $broadcast_content[$service_key] = array(); 
     1004                    $broadcast_meta[$service_key] = array(); 
    9861005                    foreach ($accounts as $key => $id) { 
    9871006                        // TODO abstract this to the Facebook plugin 
     
    10171036                                        } 
    10181037                                    } 
     1038                                    $broadcast_content[$service_key][$page_id] = $service->format_content($post, Social::option('broadcast_format')); 
     1039                                    $broadcast_meta[$service_key][$page_id] = $service->get_broadcast_extras($page_id, $post); 
    10191040                                } 
    10201041                            } 
     
    10311052                                    'universal' => $account->universal() 
    10321053                                ); 
     1054 
     1055                                $broadcast_content[$service_key][$account->id()] = $service->format_content($post, Social::option('broadcast_format')); 
     1056                                $broadcast_meta[$service_key][$account->id()] = $service->get_broadcast_extras($account->id(), $post); 
    10331057                            } 
    10341058                        } 
    10351059                    } 
    1036  
    1037                     // Content 
    1038                     if (isset($broadcast_accounts[$service_key])) { 
    1039                         $content = $service->format_content($post, Social::option('broadcast_format')); 
    1040                         update_post_meta($post->ID, '_social_'.$service_key.'_content', addslashes_deep($content)); 
    1041                     } 
    1042                 } 
    1043             } 
     1060                } 
     1061            } 
     1062 
     1063            update_post_meta($post->ID, '_social_broadcast_content', addslashes_deep($broadcast_content)); 
     1064            update_post_meta($post->ID, '_social_broadcast_meta', addslashes_deep($broadcast_meta)); 
    10441065 
    10451066            if (count($broadcast_accounts)) { 
     
    12521273        } 
    12531274        else { 
    1254             $link = explode('>'.__('Log in', 'social'), $link); 
    1255             $link = $link[0].' id="social_login">'.__('Log in', 'social').$link[1]; 
     1275            $link = explode('>'.__('Log in'), $link); 
     1276            $link = $link[0].' id="social_login">'.__('Log in').$link[1]; 
    12561277        } 
    12571278 
     
    16591680    public function post_row_actions(array $actions, $post) { 
    16601681        if ($post->post_status == 'publish' && in_array(Social::option('fetch_comments'), array('1', '2'))) { 
    1661             $actions['social_aggregation'] = sprintf(__('<a href="%s" rel="%s">Social Comments</a>', 'social'), esc_url(wp_nonce_url(admin_url('index.php?social_controller=aggregation&social_action=run&post_id='.$post->ID), 'run')), $post->ID). 
     1682            $actions['social_aggregation'] = sprintf(__('<a href="%s" rel="%s">Social Comments</a>', 'social'), esc_url(wp_nonce_url(admin_url('options-general.php?social_controller=aggregation&social_action=run&post_id='.$post->ID), 'run')), $post->ID). 
    16621683                '<img src="'.esc_url(admin_url('images/wpspin_light.gif')).'" class="social_run_aggregation_loader" />'; 
    16631684        } 
     
    16941715                        <span class="social-dot">.</span> 
    16951716                    )</span>', 
    1696                 'href' => esc_url(wp_nonce_url(admin_url('index.php?social_controller=aggregation&social_action=run&post_id='.$current_object->ID), 'run')), 
     1717                'href' => esc_url(wp_nonce_url(admin_url('options-general.php?social_controller=aggregation&social_action=run&post_id='.$current_object->ID), 'run')), 
    16971718            )); 
    16981719            $wp_admin_bar->add_menu(array( 
     
    17001721                'id' => 'social-add-tweet-by-url', 
    17011722                'title' => __('Add Tweet by URL', 'social') 
    1702                     .'<form class="social-add-tweet" style="display: none;" method="get" action="'.esc_url(wp_nonce_url(admin_url('index.php?social_controller=import&social_action=from_url&social_service=twitter&post_id='.$current_object->ID), 'from_url')).'"> 
     1723                    .'<form class="social-add-tweet" style="display: none;" method="get" action="'.esc_url(wp_nonce_url(admin_url('options-general.php?social_controller=import&social_action=from_url&social_service=twitter&post_id='.$current_object->ID), 'from_url')).'"> 
    17031724                        <input type="text" size="20" name="url" value="" autocomplete="off" /> 
    17041725                        <input type="submit" name="social-add-tweet-button" name="social-add-tweet-button" value="'.__('Add Tweet by URL', 'social').'" /> 
     
    21542175} 
    21552176 
     2177function social_wp_mail_indicator() { 
     2178    define('SOCIAL_MAIL_PUBLISH', true); 
     2179} 
     2180 
    21562181$social_file = __FILE__; 
    21572182if (isset($plugin)) { 
     
    21962221add_action('wp_after_admin_bar_render', array($social, 'admin_bar_footer_js')); 
    21972222add_action('set_user_role', array($social, 'set_user_role'), 10, 2); 
    2198 add_filter('social_settings_save', array('Social_Service_Facebook', 'social_settings_save')); 
     2223add_action('wp-mail.php', 'social_wp_mail_indicator'); 
     2224add_action('social_settings_save', array('Social_Service_Facebook', 'social_settings_save')); 
    21992225 
    22002226// CRON Actions 
  • social/trunk/views/wp-admin/options.php

    r547543 r617518  
    1 <form id="setup" method="post" action="<?php echo esc_url(admin_url('index.php?social_controller=settings&social_action=index')); ?>"> 
     1<form id="setup" method="post" action="<?php echo esc_url(admin_url('options-general.php?social_controller=settings&social_action=index')); ?>"> 
    22<?php wp_nonce_field(); ?> 
    33<input type="hidden" name="social_action" value="settings" /> 
     
    9191                <th><?php _e('Twitter @anywhere', 'social'); ?></th> 
    9292                <td> 
    93                     <label for="social_twitter_anywhere_api_key"><?php _e('Consumer API Key', 'social'); ?></label><br /> 
    94                     <input type="text" class="regular-text" name="social_twitter_anywhere_api_key" id="social_twitter_anywhere_api_key" value="<?php echo esc_attr(Social::option('twitter_anywhere_api_key')); ?>" /> 
    95                     <p class="description"><?php printf(__('To enable Twitter\'s @anywhere hovercards for Twitter usernames, enter your application\'s Consumer API key here. (<a href="%1$s" target="_blank">Click here to get an API key</a>)', 'social'), 'https://dev.twitter.com/docs/anywhere'); ?></p> 
     93                    <p>Social Version 2.6 has removed @anywhere support to comply with <a href="https://dev.twitter.com/blog/sunsetting-anywhere">Twitter's decision to sunset the service</a>.</p> 
     94                    <p>If you would like to continue to use @anywhere, <a href="https://www.google.com/search?q=WordPress+@anywhere+plugin" target="_blank">there are many plugins available to accomodate</a>.</p> 
    9695                </td> 
    9796            </tr> 
     
    127126                                        <?php _e("Disable Social's broadcasting feature.", 'social'); ?> 
    128127                                    </label> 
     128                                </li> 
     129                                <li>&nbsp;</li> 
     130                                <li> 
     131                                    <?php 
     132                                        $twitter_accounts = Social::instance()->service('twitter')->accounts(); 
     133                                        $social_api_accounts = Social::option('social_api_accounts'); 
     134                                        $selected_id = $social_api_accounts['twitter']; 
     135                                    ?> 
     136                                    <div class="twitter-api-account"> 
     137                                        <label>Twitter Default API Account</label> 
     138                                        <select id="social_api_accounts-twitter" name="social_api_accounts[twitter]"> 
     139                                            <?php foreach ($twitter_accounts as $account): $acct_id = $account->id() ?> 
     140                                                <?php if ($account->personal()) { continue; } ?> 
     141                                                <option value="<?php echo $acct_id ?>" <?php selected($acct_id, $selected_id) ?>><?php echo esc_html($account->name()) ?></option> 
     142                                            <?php endforeach; ?> 
     143                                        </select> 
     144                                    </div> 
     145                                    <p class="description" style="max-width: 450px;"><?php _e('Account for general (non account specific) Twitter API interaction.', 'social'); ?></p> 
    129146                                </li> 
    130147                            </ul> 
  • social/trunk/views/wp-admin/parts/accounts.php

    r547543 r617518  
    6464                        <?php _e('Default', 'social'); ?> 
    6565                    </label> 
    66                     <label class="enabled" for="social_enabled_pages-<?php echo esc_attr($key.$child_account->id); ?>"> 
    67                         <input type="checkbox" name="social_enabled_pages[<?php echo esc_attr($account->id()); ?>][]" id="social_enabled_pages-<?php echo esc_attr($key.$child_account->id); ?>" value="<?php echo esc_attr($child_account->id); ?>"<?php echo $enabled_checked; ?> /> 
     66                    <label class="enabled" for="social_enabled_child_accounts-<?php echo esc_attr($key.$child_account->id); ?>"> 
     67                        <input type="checkbox" name="social_enabled_child_accounts[<?php echo esc_attr($service->key()); ?>][]" id="social_enabled_child_accounts-<?php echo esc_attr($key.$child_account->id); ?>" value="<?php echo esc_attr($child_account->id); ?>"<?php echo $enabled_checked; ?> /> 
    6868                        <?php _e('Enabled', 'social'); ?> 
    6969                    </label> 
  • social/trunk/views/wp-admin/post/meta/log/shell.php

    r547543 r617518  
    66        <input type="text" id="social-source-url" name="source_url" style="width:350px" /> 
    77        <span class="submit" style="float:none"> 
    8             <a href="<?php echo esc_url(wp_nonce_url(admin_url('index.php?social_controller=import&social_action=from_url&social_service=twitter&post_id='.$post->ID), 'from_url')); ?>" id="import_from_url" class="button"><?php _e('Import Tweet', 'social'); ?></a> 
     8            <a href="<?php echo esc_url(wp_nonce_url(admin_url('options-general.php?social_controller=import&social_action=from_url&social_service=twitter&post_id='.$post->ID), 'from_url')); ?>" id="import_from_url" class="button"><?php _e('Import Tweet', 'social'); ?></a> 
    99        </span> 
    1010        <img src="<?php echo esc_url(admin_url('images/wpspin_light.gif')); ?>" style="position:relative;top:4px;left:0;display:none" id="import_from_url_loader" /> 
     
    2121 
    2222    <p class="submit" style="clear:both;float:none;padding:0;"> 
    23         <a href="<?php echo esc_url(wp_nonce_url(admin_url('index.php?social_controller=aggregation&social_action=run&post_id='.$post->ID), 'run')); ?>" id="run_aggregation" class="button" style="float:left;margin-bottom:10px;"><?php _e('Find Social Comments', 'social'); ?></a> 
     23        <a href="<?php echo esc_url(wp_nonce_url(admin_url('options-general.php?social_controller=aggregation&social_action=run&post_id='.$post->ID), 'run')); ?>" id="run_aggregation" class="button" style="float:left;margin-bottom:10px;"><?php _e('Find Social Comments', 'social'); ?></a> 
    2424        <img src="<?php echo esc_url(admin_url('images/wpspin_light.gif')); ?>" style="float:left;position:relative;top:4px;left:5px;display:none;" id="run_aggregation_loader" /> 
    2525    </p> 
Note: See TracChangeset for help on using the changeset viewer.