Invision Power Services, Inc. * @copyright (c) 2001 - SVN_YYYY Invision Power Services, Inc. * @license http://www.invisionpower.com/legal/standards/ * @package IPS Social Suite * @since 13 Jun 2013 * @version SVN_VERSION_NUMBER */ namespace IPS\core\ProfileSync; /* To prevent PHP errors (extending class does not exist) revealing path */ if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) ) { header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' ); exit; } /** * Facebook Profile Sync */ class _VK extends ProfileSyncAbstract { /** * @brief Login handler key */ public static $loginKey = 'vkontakte'; /** * @brief Icon */ public static $icon = 'vk'; /** * Is connected? * * @return bool */ public function connected() { return ( $this->member->vk_uid and $this->member->vk_token ); } /** * Get photo * * @return \IPS\Http\Url|null */ public function photo() { try { $response = \IPS\Http\Url::external( "https://api.vk.com/method/users.get?user_id={$this->member->vk_uid}&v=5.29&access_token={$this->member->vk_token}&fields=photo_400_orig" )->request()->get()->decodeJson(); if ( isset( $response['response'][0]['photo_400_orig'] )) { $file = \IPS\Http\Url::external( $response['response'][0]['photo_400_orig'] )->import( 'core_Profile' ); $photo = \IPS\Image::create( $file->contents() ); if ( ( $photo->width > $photo->height ) OR ( $photo->height > $photo->width ) ) { if ( $photo->width > $photo->height ) { $difference = $photo->width - $photo->height; $photo->cropToPoints( ceil( $difference / 2 ), 0, ceil( $photo->width - ( $difference / 2 ) ), $photo->height ); $file->replace( (string) $photo ); } else if ( $photo->height > $photo->width ) { $difference = $photo->height - $photo->width; $photo->cropToPoints( 0, ceil( $difference / 2 ), $photo->width, ceil( $photo->height - ( $difference / 2 ) ) ); $file->replace( (string) $photo ); } } return $file; } else { return NULL; } } catch ( \IPS\Http\Request\Exception $e ) { return NULL; } } /** * Get cover photo * * @return \IPS\File|NULL */ /*public function cover() { $response = \IPS\Http\Url::external( "https://api.vk.com/method/users.get?user_id={$this->member->vk_uid}&v=5.29&access_token={$this->member->vk_token}&fields=photo_100" )->request()->get()->decodeJson(); if ( isset( $response['response'][0]['photo_100'] ) ) { return \IPS\Http\Url::external( $response['response'][0]['photo_100'] )->import( 'core_Profile' ); } return NULL; }*/ /** * Get name * * @return string */ public function name() { try { $response = \IPS\Http\Url::external( "https://api.vk.com/method/users.get?user_id={$this->member->vk_uid}&v=5.29&access_token={$this->member->vk_token}" )->request()->get()->decodeJson(); if ( isset( $response['response'][0]['first_name'], $response['response'][0]['last_name'] ) ) { return $response['response'][0]['first_name'].' '.$response['response'][0]['last_name']; } } catch ( \IPS\Http\Request\Exception $e ) { return NULL; } } /** * Get status * * @return \IPS\core\Statuses\Status|null */ public function status() { try { $response = \IPS\Http\Url::external( "https://api.vk.com/method/users.get?user_id={$this->member->vk_uid}&v=5.29&access_token={$this->member->vk_token}&fields=status" )->request()->get()->decodeJson(); if ( !empty( $response['response'][0]['status'] ) ) { $status = \IPS\core\Statuses\Status::createItem( $this->member, $this->member->ip_address, new \IPS\DateTime( ) ); $status->content = nl2br( $response['response'][0]['status'], FALSE ); return $status; } } catch ( \IPS\Http\Request\Exception $e ) { } return NULL; } /** * Disassociate * * @return void */ protected function _disassociate() { $this->member->vk_uid = 0; $this->member->vk_token = NULL; $this->member->save(); } }