Switch back to the Twitter API for the Tweet widget
[WebKit.git] / Websites / webkit.org / wp-content / plugins / tweet-listener.php
1 <?php
2 /*
3 Plugin Name: Tweet Listener
4 Description: Listens for Tweets from @webkit
5 Version:     1.0
6 Author:      Jonathan Davis
7 Author URI:  http://webkit.org
8 */
9
10 TweetListener::object();
11
12 class TweetListener {
13
14     private static $object = null;
15
16     const AUTH_TOKEN = TWITTER_LISTENER_AUTH;
17     const DATA_KEY = 'recent_tweet';
18
19     public static function object() {
20         if (self::$object === null)
21             self::$object = new self();
22         return self::$object;
23     }
24
25     private function __construct() {
26         add_action('wp_ajax_nopriv_tweet', array($this, 'listen'));
27         add_action('wp_ajax_tweet', array($this, 'listen'));
28     }
29
30     public function listen() {
31
32         if (!isset($_POST['token']) || $_POST['token'] != TWITTER_LISTENER_AUTH)
33             wp_die();
34
35         $defaults = array(
36             'text' => '',
37             'username' => '@webkit',
38             'link' => '',
39             'created' => '',
40             'embed' => ''
41         );
42         $data = array_merge($defaults, $_POST);
43
44         update_option(self::DATA_KEY, $data);
45         wp_die();
46     }
47
48     public function tweet() {
49         $data = (object)get_option(self::DATA_KEY);
50
51         // Setup compatible Tweet structure
52
53         $Tweet = new StdClass();
54         $Tweet->id = substr($data->link, strrpos($data->link, '/') + 1);
55         $Tweet->text = stripslashes($data->text);
56
57         $Tweet->entities = new StdClass();
58         $Tweet->entities->urls = array();
59         $Tweet->entities->media = array();
60
61         // Search for embedded images
62         if ( preg_match_all('/<a href="([^"]+)">(.*?)<\/a>/', stripslashes($data->embed), $matches, PREG_SET_ORDER) ) {
63             foreach ($matches as $embedlink) {
64                 $URL = new StdClass();
65                 $URL->expanded_url = $URL->display_url = $URL->url =$embedlink[1];
66                 $URL->display_url = str_replace(array('https://','http://'), '', $URL->display_url);
67                 $Tweet->entities->urls[] = $URL;
68             }
69         }
70
71         return $Tweet;
72     }
73
74 } // end class TweetListener