WordPress.org

Plugin Directory

Changeset 608735


Ignore:
Timestamp:
10/05/12 22:56:08 (19 months ago)
Author:
tmoorewp
Message:

Publicize UI: First pass at functional UI.

Location:
jetpack/branches/publicize/modules/publicize
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • jetpack/branches/publicize/modules/publicize/publicize.php

    r608584 r608735  
    99    function __construct() { 
    1010        add_action( 'load-settings_page_sharing', array( $this, 'admin_page_load' ) ); 
     11        add_action( 'wp_ajax_publicize_facebook_options_page', array( $this, 'options_page_facebook' ) ); 
     12        add_action( 'wp_ajax_publicize_facebook_options_save', array( $this, 'options_save_facebook' ) ); 
     13        add_action( 'wp_ajax_publicize_tumblr_options_page', array( $this, 'options_page_tumblr' ) ); 
     14        add_action( 'wp_ajax_publicize_tumblr_options_save', array( $this, 'options_save_tumblr' ) ); 
    1115    } 
    1216     
     
    188192        ); 
    189193    } 
    190      
     194 
     195    function options_page_facebook() { 
     196        $connected_services = Jetpack::get_option( 'publicize_connections' ); 
     197        $connection = $connected_services['facebook'][$_POST['connection']]; 
     198        $options_to_show = $connection['connection_data']['meta']['options_responses']; 
     199 
     200        // Nonce check 
     201        check_admin_referer( 'options_page_facebook_' . $_REQUEST['connection'] ); 
     202         
     203        $me = $options_to_show[0]; 
     204        $pages = $options_to_show[1]['data']; 
     205 
     206        $profile_checked = true; 
     207        $page_selected = false; 
     208 
     209        if ( !empty( $connection['connection_data']['meta']['facebook_page'] ) && !empty( $connection['connection_data']['meta']['facebook_page_token'] ) ) { 
     210            $found = false; 
     211            if ( is_array( $pages->data ) ) { 
     212                foreach ( $pages->data as $page ) { 
     213                    if ( $page->id == $connection['connection_data']['meta']['facebook_page'] ) { 
     214                        $found = true; 
     215                        break; 
     216                    } 
     217                } 
     218            } 
     219 
     220            if ( $found ) { 
     221                $profile_checked = false; 
     222                $page_selected = $connection['connection_data']['meta']['facebook_page']; 
     223            } else { 
     224                // Reset page token 
     225                //$this->store_token( null ); 
     226            } 
     227        } 
     228         
     229        ?> 
     230 
     231        <div id="thickbox-content"> 
     232 
     233            <p><?php _e('Publicize to my <strong>Facebook Wall</strong>:') ?></p> 
     234            <table id="option-profile"> 
     235                <tbody> 
     236                    <tr> 
     237                        <td class="radio"><input type="radio" name="option" id="<?php echo esc_attr( $me['id'] ) ?>" value="" <?php checked( $profile_checked, true ); ?> /></td> 
     238                        <td class="thumbnail"><label for="<?php echo esc_attr( $me['id'] ) ?>"><img src="<?php echo esc_url( $me['picture']['data']['url'] ) ?>" width="50" height="50" /></label></td> 
     239                        <td class="details"><label for="<?php echo esc_attr( $me['id'] ) ?>"><?php echo esc_html( $me['name'] ) ?></label></td> 
     240                    </tr> 
     241                </tbody> 
     242            </table> 
     243 
     244            <?php if ( $pages ) : ?> 
     245 
     246                <p><?php _e('Publicize to my <strong>Facebook Page</strong>:') ?></p> 
     247                <table id="option-fb-fanpage"> 
     248                    <tbody> 
     249 
     250                        <?php foreach ( $pages as $i => $page ) : ?> 
     251                            <?php if ( ! isset( $page['perms'] ) ) { continue; } ?> 
     252                            <?php if ( ! ( $i % 2 ) ) : ?> 
     253                                <tr> 
     254                            <?php endif; ?> 
     255                                    <td class="radio"><input type="radio" name="option" id="<?php echo esc_attr( $page['id'] ) ?>" value="<?php echo esc_attr( $page['access_token'] ) ?>" <?php checked( $page_selected && $page_selected == $page['id'], true ); ?> /></td> 
     256                                    <td class="thumbnail"><label for="<?php echo esc_attr( $page['id'] ) ?>"><img src="<?php echo esc_url( str_replace( '_s', '_q', $page['picture']['data']['url'] ) ) ?>" width="50" height="50" /></label></td> 
     257                                    <td class="details"> 
     258                                        <label for="<?php echo esc_attr( $page['id'] ) ?>"> 
     259                                            <span class="name"><?php echo esc_html( $page['name'] ) ?></span><br/> 
     260                                            <span class="category"><?php echo esc_html( $page['category'] ) ?></span> 
     261                                        </label> 
     262                                    </td> 
     263                            <?php if ( ( $i % 2 ) || ( $i == count( $pages ) - 1 ) ): ?> 
     264                                </tr> 
     265                            <?php endif; ?> 
     266                        <?php endforeach; ?> 
     267 
     268                    </tbody> 
     269                </table> 
     270 
     271            <?php endif; ?> 
     272 
     273            <p style="text-align: center;"> 
     274                <input type="submit" value="<?php esc_attr_e('Save these settings') ?>" class="button fb-options save-options" name="save" data-connection="<?php echo esc_attr( $_REQUEST['connection'] ); ?>" rel="<?php echo wp_create_nonce('save_fb_token_' . $_REQUEST['connection'] ) ?>" /> 
     275            </p><br/> 
     276        </div> 
     277 
     278        <?php 
     279    } 
     280 
     281    function options_save_facebook() { 
     282        // Nonce check 
     283        check_admin_referer( 'save_fb_token_' . $_REQUEST['connection'] ); 
     284 
     285        $id = $_POST['connection']; 
     286 
     287        // Check for a numeric page ID 
     288        $page_id = (int) $_POST['selected_id']; 
     289        if ( !ctype_digit( $page_id ) ) 
     290            die( 'Security check' ); 
     291 
     292        if ( isset( $_POST['selected_id'] ) && empty( $_POST['token'] ) ) { 
     293            // Publish to User Wall/Profile 
     294            $options = array( 
     295                'facebook_page'       => null, 
     296                'facebook_page_token' => null, 
     297                'facebook_profile'    => true 
     298            ); 
     299 
     300        } else { 
     301            if ( !isset( $_POST['token'] ) || !isset( $_POST['selected_id'] ) ) { 
     302                return; 
     303            } 
     304 
     305            // Publish to Page 
     306            $page_token = $_POST['token']; 
     307            $page_token = urlencode( $page_token ); 
     308            $options = array( 
     309                'facebook_page'       => $page_id, 
     310                'facebook_page_token' => $page_token, 
     311                'facebook_profile'    => null 
     312            ); 
     313        } 
     314 
     315        Jetpack::load_xml_rpc_client(); 
     316        $xml = new Jetpack_IXR_Client(); 
     317        $xml->query( 'jetpack.setPublicizeOptions', $id, $options ); 
     318         
     319        if ( !$xml->isError() ) { 
     320            $response = $xml->getResponse(); 
     321            Jetpack::update_option( 'publicize_connections', $response ); 
     322        } 
     323    } 
     324 
     325    function options_page_tumblr() { 
     326        // Nonce check 
     327        check_admin_referer( 'options_page_tumblr_' . $_REQUEST['connection'] ); 
     328 
     329        $connected_services = Jetpack::get_option( 'publicize_connections' ); 
     330        $connection = $connected_services['tumblr'][$_POST['connection']]; 
     331        $options_to_show = $connection['connection_data']['meta']['options_responses']; 
     332        $request = $options_to_show[0]; 
     333 
     334        $blogs = $request['response']['user']['blogs']; 
     335        $blog_selected = false; 
     336 
     337        if ( !empty( $connection['connection_data']['meta']['tumblr_base_hostname'] ) ) { 
     338            foreach ( $blogs as $blog ) { 
     339                if ( $connection['connection_data']['meta']['tumblr_base_hostname'] == $this->get_basehostname( $blog['url'] ) ) { 
     340                    $blog_selected = $connection['connection_data']['meta']['tumblr_base_hostname']; 
     341                    break; 
     342                } 
     343            } 
     344 
     345        } 
     346 
     347        // Use their Primary blog if they haven't selected one yet 
     348        if ( !$blog_selected ) { 
     349            foreach ( $blogs as $blog ) { 
     350                if ( $blog['primary'] ) 
     351                    $blog_selected = $this->get_basehostname( $blog['url'] ); 
     352            } 
     353        } ?> 
     354 
     355        <div id="thickbox-content"> 
     356 
     357            <p><?php _e('Publicize to my <strong>Tumblr blog</strong>:') ?></p> 
     358 
     359            <ul id="option-tumblr-blog"> 
     360 
     361            <?php 
     362            foreach ( $blogs as $blog ) { 
     363                $url = $this->get_basehostname( $blog['url'] ); ?> 
     364                <li> 
     365                    <input type="radio" name="option" id="<?php echo esc_attr( $url ) ?>" value="<?php echo esc_attr( $url ) ?>" <?php checked( $blog_selected == $url, true ); ?> /> 
     366                    <label for="<?php echo esc_attr( $url ) ?>"><span class="name"><?php echo esc_html( $blog['title'] ) ?></span></label> 
     367                </li> 
     368            <?php } ?> 
     369 
     370            </ul> 
     371 
     372            <p style="text-align: center;"> 
     373                <input type="submit" value="<?php esc_attr_e( 'Save these settings' ) ?>" class="button tumblr-options save-options" name="save" data-connection="<?php echo esc_attr( $_REQUEST['connection'] ); ?>" rel="<?php echo wp_create_nonce( 'save_tumblr_blog_' . $_REQUEST['connection'] ) ?>" /> 
     374            </p> <br /> 
     375        </div>  
     376 
     377        <?php 
     378    } 
     379 
     380    function get_basehostname( $url ) { 
     381        return parse_url( $url, PHP_URL_HOST ); 
     382    } 
     383 
     384    function options_save_tumblr() { 
     385        // Nonce check 
     386        check_admin_referer( 'save_tumblr_blog_' . $_REQUEST['connection'] ); 
     387 
     388        $id = $_POST['connection']; 
     389         
     390        $options = array( 'tumblr_base_hostname' => $_POST['selected_id'] ); 
     391         
     392        Jetpack::load_xml_rpc_client(); 
     393        $xml = new Jetpack_IXR_Client(); 
     394        $xml->query( 'jetpack.setPublicizeOptions', $id, $options ); 
     395         
     396        if ( !$xml->isError() ) { 
     397            $response = $xml->getResponse(); 
     398            Jetpack::update_option( 'publicize_connections', $response ); 
     399        } 
     400    } 
    191401} 
    192  
    193402?> 
  • jetpack/branches/publicize/modules/publicize/ui.php

    r608584 r608735  
    4949            <p> 
    5050                <?php esc_html_e( 'Connect your blog to popular social networking sites and automatically share new posts with your friends.' ) ?> 
    51                 <?php esc_html_e( 'You can make a connection for just yourself or for all users on your blog. Shared connections are marked with the (Shared) text.' ); ?> 
     51                <?php esc_html_e( 'Click on (Share?) to make a connection available to all users on your blog. Shared connections are marked with the (Shared) text.' ); ?> 
    5252            </p> 
    5353 
     
    7272                                        foreach( $connections as $id => $connection ) : 
    7373 
    74                                             // if ( 'facebook' == $service->get_name() && isset( $cmeta->meta['facebook_page_token'] ) ) { 
    75                                             //  $response = $service->request( 'https://graph.facebook.com/' . $cmeta->meta['facebook_page'] ); 
    76  
    77                                             //  $connection_display = $response->name; 
    78                                             //  $profile_link = $response->link; 
    79                                             // } elseif ( 'tumblr' == $service->get_name() && isset( $cmeta->meta['tumblr_base_hostname'] ) ) { 
    80                                             //  $connection_display = $cmeta->meta['tumblr_base_hostname']; 
    81                                             //  $profile_link = $service->get_profile_link( $c ); 
    82                                             // } else { 
    83                                                 // $profile_link = $service->get_profile_link( $c ); 
     74                                            if ( 'facebook' == $service_name && isset( $connection['connection_data']['meta']['facebook_page_token'] ) ) { 
     75                                                $response = wp_remote_get( 'https://graph.facebook.com/' . $connection['connection_data']['meta']['facebook_page'] ); 
     76                                                if ( ! is_wp_error( $response ) ) { 
     77                                                    $result = json_decode( wp_remote_retrieve_body( $response ) ); 
     78                                                    $connection_display = $result->name; 
     79                                                    $profile_link = $result->link; 
     80                                                } else { 
     81                                                    $connection_display = $connection['external_name']; 
     82                                                    $profile_link = ''; 
     83                                                } 
     84                                            } elseif ( 'tumblr' == $service_name && isset( $connection['connection_data']['meta']['tumblr_base_hostname'] ) ) { 
     85                                                $connection_display = $connection['connection_data']['meta']['tumblr_base_hostname']; 
     86                                                $profile_link = ( false == strpos( $connection['connection_data']['meta']['tumblr_base_hostname'], 'http' ) ? 'http://' . $connection['connection_data']['meta']['tumblr_base_hostname'] : $connection['connection_data']['meta']['tumblr_base_hostname'] ); 
     87                                            } elseif ( 'twitter' == $service_name ) { 
     88                                                $profile_link = 'https://twitter.com/' . $connection['external_name']; 
    8489                                                $connection_display = $connection['external_display']; 
    8590                                                if ( empty( $connection_display ) ) 
    8691                                                    $connection_display = $connection['external_name']; 
    87                                             // } 
     92                                            } elseif ( 'yahoo' == $service_name ) { 
     93                                                $profile_link = 'http://profile.yahoo.com/' . $connection['external_id']; 
     94                                            } elseif ( 'linkedin' == $service_name ) { 
     95                                                $profile_link = ''; 
     96                                                $connection_display = $connection['external_display']; 
     97                                                if ( empty( $connection_display ) ) 
     98                                                    $connection_display = $connection['external_name']; 
     99                                            } 
    88100 
     101                                            if ( isset( $connection['connection_data']['meta']['options_responses'] ) && is_array( $connection['connection_data']['meta']['options_responses'] ) ) : 
     102                                                $options_nonce = wp_create_nonce( 'options_page_' . $service_name . '_' . $id ); 
     103                                                ?> 
     104 
     105                                                <script type="text/javascript"> 
     106                                                jQuery(document).ready( function($) { 
     107                                                    showOptionsPage.call( 
     108                                                    this, 
     109                                                    '<?php echo esc_js( $service_name ); ?>', 
     110                                                    '<?php echo esc_js( $options_nonce ); ?>', 
     111                                                    '<?php echo esc_js( $id ); ?>' 
     112                                                    ); 
     113                                                } ); 
     114                                                </script> 
     115 
     116                                                <?php 
     117                                            endif; 
    89118                                            ?> 
    90119                                            <li> 
    91                                                 <a class="publicize-profile-link" href="<?php //echo esc_attr( $profile_link ); ?>"> 
     120                                                <?php if ( !empty( $profile_link ) ) : ?> 
     121                                                    <a class="publicize-profile-link" href="<?php echo esc_attr( $profile_link ); ?>"> 
     122                                                <?php endif; ?> 
     123                                                 
    92124                                                    <?php echo esc_attr( $connection_display );?> 
    93                                                 </a> 
     125                                                 
     126                                                <?php if ( !empty( $profile_link ) ) : ?> 
     127                                                    </a> 
     128                                                <?php endif; ?> 
    94129 
    95130                                                <?php if ( 0 == $connection['connection_data']['user_id'] ) : ?> 
    96131                                                    <small>(Shared)</small> 
     132                                                <?php else: ?> 
     133                                                    <small>(<a href="<?php echo esc_url( $this->publicize->globalize_url( $service_name, $id, 'globalize' ) ); ?>">Share?</a>)</small> 
    97134                                                <?php endif; ?> 
    98135                                                 
     
    106143                                    </ul> 
    107144                                <?php endif; ?> 
    108                                 <a id="<?php echo esc_attr( $name ); ?>" class="publicize-add-connection" href="<?php echo esc_url( $this->publicize->connect_url( $service_name ) ); ?>"><?php esc_html_e( sprintf( __( 'Add new %s connection.' ), ucwords( $service_name ) ) ); ?></a> 
     145                                <a id="<?php echo esc_attr( $service_name ); ?>" class="publicize-add-connection" href="<?php echo esc_url( $this->publicize->connect_url( $service_name ) ); ?>"><?php esc_html_e( sprintf( __( 'Add new %s connection.' ), ucwords( $service_name ) ) ); ?></a> 
    109146                            </div> 
    110147                        </div> 
Note: See TracChangeset for help on using the changeset viewer.