@ -1,5 +1,4 @@  
			
		
	
		
			
				
					< ? php  
			
		
	
		
			
				
					use  Abraham\TwitterOAuth\TwitterOAuth ;  
			
		
	
		
			
				
					use  IndieWeb\DateFormatter ;  
			
		
	
		
			
				
					
  
			
		
	
		
			
				
					function  require_login ( & $app ,  $redirect = true )  {  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -235,23 +234,6 @@ $app->get('/review', function() use($app) {  
			
		
	
		
			
				
					});  
			
		
	
		
			
				
					
  
			
		
	
		
			
				
					
  
			
		
	
		
			
				
					$app -> get ( '/twitter' ,  function ()  use ( $app )  {  
			
		
	
		
			
				
					  if ( $user = require_login ( $app ))  {   
			
		
	
		
			
				
					    $params  =  $app -> request () -> params ();   
			
		
	
		
			
				
					      
			
		
	
		
			
				
					    $tweet_url  =  '' ;   
			
		
	
		
			
				
					      
			
		
	
		
			
				
					    if ( array_key_exists ( 'tweet_url' ,  $params ))   
			
		
	
		
			
				
					      $tweet_url  =  $params [ 'tweet_url' ];   
			
		
	
		
			
				
					      
			
		
	
		
			
				
					    render ( 'twitter' ,  array (   
			
		
	
		
			
				
					      'title'  =>  'Import Tweet' ,   
			
		
	
		
			
				
					      'tweet_url'  =>  $tweet_url ,   
			
		
	
		
			
				
					      'authorizing'  =>  false   
			
		
	
		
			
				
					    ));   
			
		
	
		
			
				
					  }   
			
		
	
		
			
				
					});  
			
		
	
		
			
				
					
  
			
		
	
		
			
				
					$app -> get ( '/repost' ,  function ()  use ( $app )  {  
			
		
	
		
			
				
					  if ( $user = require_login ( $app ))  {   
			
		
	
		
			
				
					    $params  =  $app -> request () -> params ();   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -443,125 +425,14 @@ $app->get('/settings/html-content', function() use($app) {  
			
		
	
		
			
				
					  }   
			
		
	
		
			
				
					});  
			
		
	
		
			
				
					
  
			
		
	
		
			
				
					$app -> post ( '/twitter/preview' ,  function ()  use ( $app )  {  
			
		
	
		
			
				
					  if ( $user = require_login ( $app ))  {   
			
		
	
		
			
				
					    $params  =  $app -> request () -> params ();   
			
		
	
		
			
				
					      
			
		
	
		
			
				
					    if ( $user -> twitter_access_token )  {   
			
		
	
		
			
				
					      $xray_opts [ 'twitter_api_key' ]  =  Config :: $twitterClientID ;   
			
		
	
		
			
				
					      $xray_opts [ 'twitter_api_secret' ]  =  Config :: $twitterClientSecret ;   
			
		
	
		
			
				
					      $xray_opts [ 'twitter_access_token' ]  =  $user -> twitter_access_token ;   
			
		
	
		
			
				
					      $xray_opts [ 'twitter_access_token_secret' ]  =  $user -> twitter_token_secret ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					      
			
		
	
		
			
				
					    $tweet_url  =  $params [ 'tweet_url' ];   
			
		
	
		
			
				
					      
			
		
	
		
			
				
					    // Pass to X-Ray to download all the twitter data in a useful format
   
			
		
	
		
			
				
					    $xray  =  new  p3k\XRay ();   
			
		
	
		
			
				
					    $xray -> http  =  new  p3k\HTTP ( 'Quill (' . Config :: $base_url . ')' );   
			
		
	
		
			
				
					    $data  =  $xray -> parse ( $tweet_url ,  $xray_opts );   
			
		
	
		
			
				
					      
			
		
	
		
			
				
					    $postdata  =  tweet_to_micropub_request ( $data [ 'data' ]);   
			
		
	
		
			
				
					      
			
		
	
		
			
				
					    $response  =  [   
			
		
	
		
			
				
					      'json'  =>  json_encode ( $postdata ,  JSON_PRETTY_PRINT + JSON_UNESCAPED_SLASHES )   
			
		
	
		
			
				
					    ];   
			
		
	
		
			
				
					      
			
		
	
		
			
				
					    $app -> response ()[ 'Content-type' ]  =  'application/json' ;   
			
		
	
		
			
				
					    $app -> response () -> body ( json_encode ( $response ));   
			
		
	
		
			
				
					  }   
			
		
	
		
			
				
					});  
			
		
	
		
			
				
					
  
			
		
	
		
			
				
					$app -> post ( '/twitter' ,  function ()  use ( $app )  {  
			
		
	
		
			
				
					  if ( $user = require_login ( $app ))  {   
			
		
	
		
			
				
					    $params  =  $app -> request () -> params ();   
			
		
	
		
			
				
					
  
			
		
	
		
			
				
					    if ( $user -> twitter_access_token )  {   
			
		
	
		
			
				
					      $xray_opts [ 'twitter_api_key' ]  =  Config :: $twitterClientID ;   
			
		
	
		
			
				
					      $xray_opts [ 'twitter_api_secret' ]  =  Config :: $twitterClientSecret ;   
			
		
	
		
			
				
					      $xray_opts [ 'twitter_access_token' ]  =  $user -> twitter_access_token ;   
			
		
	
		
			
				
					      $xray_opts [ 'twitter_access_token_secret' ]  =  $user -> twitter_token_secret ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					      
			
		
	
		
			
				
					    $tweet_url  =  $params [ 'tweet_url' ];   
			
		
	
		
			
				
					      
			
		
	
		
			
				
					    // Pass to X-Ray to download all the twitter data in a useful format
   
			
		
	
		
			
				
					    $xray  =  new  p3k\XRay ();   
			
		
	
		
			
				
					    $xray -> http  =  new  p3k\HTTP ( 'Quill (' . Config :: $base_url . ')' );   
			
		
	
		
			
				
					    $data  =  $xray -> parse ( $tweet_url ,  $xray_opts );   
			
		
	
		
			
				
					      
			
		
	
		
			
				
					    $location  =  null ;   
			
		
	
		
			
				
					      
			
		
	
		
			
				
					    if ( isset ( $data [ 'data' ])  &&  $data [ 'data' ][ 'type' ]  ==  'entry' )  {   
			
		
	
		
			
				
					      $tweet  =  $data [ 'data' ];   
			
		
	
		
			
				
					        
			
		
	
		
			
				
					      $postdata  =  tweet_to_micropub_request ( $tweet );   
			
		
	
		
			
				
					
  
			
		
	
		
			
				
					      $r  =  micropub_post_for_user ( $user ,  $postdata ,  null ,  true );   
			
		
	
		
			
				
					
  
			
		
	
		
			
				
					      $app -> response ()[ 'Content-type' ]  =  'application/json' ;   
			
		
	
		
			
				
					      $app -> response () -> body ( json_encode ([   
			
		
	
		
			
				
					        'location'  =>  ( isset ( $r [ 'location' ])  &&  $r [ 'location' ]  ?  Mf2\resolveUrl ( $user -> micropub_endpoint ,  $r [ 'location' ])  :  null ),   
			
		
	
		
			
				
					        'error'  =>  $r [ 'error' ],   
			
		
	
		
			
				
					        'response'  =>  $r [ 'response' ]   
			
		
	
		
			
				
					      ]));   
			
		
	
		
			
				
					    }  else  {   
			
		
	
		
			
				
					      $app -> response ()[ 'Content-type' ]  =  'application/json' ;   
			
		
	
		
			
				
					
  
			
		
	
		
			
				
					      $app -> response () -> body ( json_encode ([   
			
		
	
		
			
				
					        'location'  =>  null ,   
			
		
	
		
			
				
					        'error'  =>  'Error fetching tweet' ,   
			
		
	
		
			
				
					      ]));   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					  }   
			
		
	
		
			
				
					});  
			
		
	
		
			
				
					
  
			
		
	
		
			
				
					function  tweet_to_micropub_request ( $tweet )  {  
			
		
	
		
			
				
					  // Convert to a micropub post
   
			
		
	
		
			
				
					  $postdata  =  [   
			
		
	
		
			
				
					    'type'  =>  [ 'h-entry' ],   
			
		
	
		
			
				
					    'properties'  =>  [   
			
		
	
		
			
				
					      'content'  =>  [ $tweet [ 'content' ][ 'text' ]],   
			
		
	
		
			
				
					      'published'  =>  [ $tweet [ 'published' ]],   
			
		
	
		
			
				
					      'syndication'  =>  [ $tweet [ 'url' ]],   
			
		
	
		
			
				
					    ]   
			
		
	
		
			
				
					  ];   
			
		
	
		
			
				
					  if ( isset ( $tweet [ 'in-reply-to' ]))   
			
		
	
		
			
				
					    $postdata [ 'properties' ][ 'in-reply-to' ]  =  $tweet [ 'in-reply-to' ];   
			
		
	
		
			
				
					  if ( isset ( $tweet [ 'category' ]))   
			
		
	
		
			
				
					    $postdata [ 'properties' ][ 'category' ]  =  $tweet [ 'category' ];   
			
		
	
		
			
				
					  if ( isset ( $tweet [ 'photo' ]))   
			
		
	
		
			
				
					    $postdata [ 'properties' ][ 'photo' ]  =  $tweet [ 'photo' ];   
			
		
	
		
			
				
					  if ( isset ( $tweet [ 'video' ]))   
			
		
	
		
			
				
					    $postdata [ 'properties' ][ 'video' ]  =  $tweet [ 'video' ];   
			
		
	
		
			
				
					      
			
		
	
		
			
				
					  return  $postdata ;   
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
  
			
		
	
		
			
				
					function  create_favorite ( & $user ,  $url )  {  
			
		
	
		
			
				
					
  
			
		
	
		
			
				
					  $tweet_id  =  false ;   
			
		
	
		
			
				
					  $twitter_syndication  =  false ;   
			
		
	
		
			
				
					
  
			
		
	
		
			
				
					  // POSSE favorites to Twitter
   
			
		
	
		
			
				
					  if ( $user -> twitter_access_token  &&  preg_match ( '/https?:\/\/(?:www\.)?twitter\.com\/[^\/]+\/status(?:es)?\/(\d+)/' ,  $url ,  $match ))  {   
			
		
	
		
			
				
					    $tweet_id  =  $match [ 1 ];   
			
		
	
		
			
				
					    $twitter  =  new  TwitterOAuth ( Config :: $twitterClientID ,  Config :: $twitterClientSecret ,   
			
		
	
		
			
				
					      $user -> twitter_access_token ,  $user -> twitter_token_secret );   
			
		
	
		
			
				
					    $result  =  $twitter -> post ( 'favorites/create' ,  array (   
			
		
	
		
			
				
					      'id'  =>  $tweet_id   
			
		
	
		
			
				
					    ));   
			
		
	
		
			
				
					    if ( property_exists ( $result ,  'id_str' ))  {   
			
		
	
		
			
				
					      $twitter_syndication  =  'https://twitter.com/' . $user -> twitter_username . '/status/' . $result -> id_str ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					  }   
			
		
	
		
			
				
					
  
			
		
	
		
			
				
					  $micropub_request  =  array (   
			
		
	
		
			
				
					    'like-of'  =>  $url   
			
		
	
		
			
				
					  );   
			
		
	
		
			
				
					  if ( $twitter_syndication )  {   
			
		
	
		
			
				
					    $micropub_request [ 'syndication' ]  =  $twitter_syndication ;   
			
		
	
		
			
				
					  }   
			
		
	
		
			
				
					  $r  =  micropub_post_for_user ( $user ,  $micropub_request );   
			
		
	
		
			
				
					
  
			
		
	
		
			
				
					  return  $r ;   
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -581,25 +452,9 @@ function edit_favorite(&$user, $post_url, $like_of) {  
			
		
	
		
			
				
					
  
			
		
	
		
			
				
					function  create_repost ( & $user ,  $url )  {  
			
		
	
		
			
				
					
  
			
		
	
		
			
				
					  $tweet_id  =  false ;   
			
		
	
		
			
				
					  $twitter_syndication  =  false ;   
			
		
	
		
			
				
					
  
			
		
	
		
			
				
					  if ( $user -> twitter_access_token  &&  preg_match ( '/https?:\/\/(?:www\.)?twitter\.com\/[^\/]+\/status(?:es)?\/(\d+)/' ,  $url ,  $match ))  {   
			
		
	
		
			
				
					    $tweet_id  =  $match [ 1 ];   
			
		
	
		
			
				
					    $twitter  =  new  TwitterOAuth ( Config :: $twitterClientID ,  Config :: $twitterClientSecret ,   
			
		
	
		
			
				
					      $user -> twitter_access_token ,  $user -> twitter_token_secret );   
			
		
	
		
			
				
					    $result  =  $twitter -> post ( 'statuses/retweet/' . $tweet_id );   
			
		
	
		
			
				
					    if ( property_exists ( $result ,  'id_str' ))  {   
			
		
	
		
			
				
					      $twitter_syndication  =  'https://twitter.com/' . $user -> twitter_username . '/status/' . $result -> id_str ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					  }   
			
		
	
		
			
				
					
  
			
		
	
		
			
				
					  $micropub_request  =  array (   
			
		
	
		
			
				
					    'repost-of'  =>  $url   
			
		
	
		
			
				
					  );   
			
		
	
		
			
				
					  if ( $twitter_syndication )  {   
			
		
	
		
			
				
					    $micropub_request [ 'syndication' ]  =  $twitter_syndication ;   
			
		
	
		
			
				
					  }   
			
		
	
		
			
				
					  $r  =  micropub_post_for_user ( $user ,  $micropub_request );   
			
		
	
		
			
				
					
  
			
		
	
		
			
				
					  return  $r ;   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -795,29 +650,10 @@ $app->get('/reply/preview', function() use($app) {  
			
		
	
		
			
				
					
  
			
		
	
		
			
				
					    $reply_url  =  trim ( $params [ 'url' ]);   
			
		
	
		
			
				
					
  
			
		
	
		
			
				
					    if ( preg_match ( '/twtr\.io\/([0-9a-z]+)/i' ,  $reply_url ,  $match ))  {   
			
		
	
		
			
				
					      $twtr  =  'https://twitter.com/_/status/'  .  sxg_to_num ( $match [ 1 ]);   
			
		
	
		
			
				
					      $ch  =  curl_init ( $twtr );   
			
		
	
		
			
				
					      curl_setopt ( $ch ,  CURLOPT_RETURNTRANSFER ,  true );   
			
		
	
		
			
				
					      curl_setopt ( $ch ,  CURLOPT_FOLLOWLOCATION ,  true );   
			
		
	
		
			
				
					      curl_exec ( $ch );   
			
		
	
		
			
				
					      $expanded_url  =  curl_getinfo ( $ch ,  CURLINFO_EFFECTIVE_URL );   
			
		
	
		
			
				
					      if ( $expanded_url )  $reply_url  =  $expanded_url ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
  
			
		
	
		
			
				
					    $entry  =  false ;   
			
		
	
		
			
				
					
  
			
		
	
		
			
				
					    $xray_opts  =  [];   
			
		
	
		
			
				
					
  
			
		
	
		
			
				
					    if ( preg_match ( '/twitter\.com\/(?:[^\/]+)\/statuse?s?\/(.+)/' ,  $reply_url ,  $match ))  {   
			
		
	
		
			
				
					      if ( $user -> twitter_access_token )  {   
			
		
	
		
			
				
					        $xray_opts [ 'twitter_api_key' ]  =  Config :: $twitterClientID ;   
			
		
	
		
			
				
					        $xray_opts [ 'twitter_api_secret' ]  =  Config :: $twitterClientSecret ;   
			
		
	
		
			
				
					        $xray_opts [ 'twitter_access_token' ]  =  $user -> twitter_access_token ;   
			
		
	
		
			
				
					        $xray_opts [ 'twitter_access_token_secret' ]  =  $user -> twitter_token_secret ;   
			
		
	
		
			
				
					      }   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
  
			
		
	
		
			
				
					    // Pass to X-Ray to see if it can expand the entry
   
			
		
	
		
			
				
					    $xray  =  new  p3k\XRay ();   
			
		
	
		
			
				
					    $xray -> http  =  new  p3k\HTTP ( 'Quill (' . Config :: $base_url . ')' );   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -870,7 +706,7 @@ $app->get('/reply/preview', function() use($app) {  
			
		
	
		
			
				
					      if ( isset ( $entry [ 'content' ])  &&  $entry [ 'content' ]  &&  isset ( $entry [ 'content' ][ 'text' ]))  {   
			
		
	
		
			
				
					        if ( preg_match_all ( '/(^|(?<=[\s\/]))@([a-z0-9_]+([a-z0-9_\.]*)?)/i' ,  $entry [ 'content' ][ 'text' ],  $matches ))  {   
			
		
	
		
			
				
					          foreach ( $matches [ 0 ]  as  $nick )  {   
			
		
	
		
			
				
					            if ( trim ( $nick , '@' )  !=  $user -> twitter_username  &&  trim ( $nick , '@' )  !=  display_url ( $user -> url ))   
			
		
	
		
			
				
					            if ( trim ( $nick , '@' )  !=  display_url ( $user -> url ))   
			
		
	
		
			
				
					              $mentions []  =  strtolower ( trim ( $nick , '@' ));   
			
		
	
		
			
				
					          }   
			
		
	
		
			
				
					        }   
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -884,12 +720,6 @@ $app->get('/reply/preview', function() use($app) {  
			
		
	
		
			
				
					      foreach ( $entry [ 'syndication' ]  as  $s )  {   
			
		
	
		
			
				
					        $host  =  parse_url ( $s ,  PHP_URL_HOST );   
			
		
	
		
			
				
					        switch ( $host )  {   
			
		
	
		
			
				
					          case  'twitter.com' :   
			
		
	
		
			
				
					          case  'www.twitter.com' :   
			
		
	
		
			
				
					            $icon  =  'twitter.ico' ;  break ;   
			
		
	
		
			
				
					          case  'facebook.com' :   
			
		
	
		
			
				
					          case  'www.facebook.com' :   
			
		
	
		
			
				
					            $icon  =  'facebook.ico' ;  break ;   
			
		
	
		
			
				
					          case  'github.com' :   
			
		
	
		
			
				
					          case  'www.github.com' :   
			
		
	
		
			
				
					            $icon  =  'github.ico' ;  break ;