From 3dbc0730c3b79b6e451dd64e6483080c9f032807 Mon Sep 17 00:00:00 2001 From: sebastian Date: Mon, 15 Feb 2010 15:54:47 +0000 Subject: [PATCH] #2662 twitter --- .../modules/htmlUI/var/html/ui_browser.php | 6 + .../modules/htmlUI/var/html/ui_handler.php | 5 + .../htmlUI/var/html/ui_twitter-cron.php | 22 ++ .../modules/htmlUI/var/lib/twitter.class.php | 287 +++++++++++++++++ .../htmlUI/var/templates/masterpanel.tpl | 4 + .../src/modules/htmlUI/var/templates/menu.tpl | 1 + .../htmlUI/var/templates/statusbar.tpl | 26 +- .../htmlUI/var/templates/twitter/settings.tpl | 10 + .../src/modules/htmlUI/var/ui_base.inc.php | 4 +- .../modules/htmlUI/var/ui_scheduler.class.php | 2 +- .../modules/htmlUI/var/ui_twitter.class.php | 302 ++++++++++++++++++ 11 files changed, 662 insertions(+), 7 deletions(-) create mode 100644 campcaster/src/modules/htmlUI/var/html/ui_twitter-cron.php create mode 100644 campcaster/src/modules/htmlUI/var/lib/twitter.class.php create mode 100644 campcaster/src/modules/htmlUI/var/templates/twitter/settings.tpl create mode 100644 campcaster/src/modules/htmlUI/var/ui_twitter.class.php diff --git a/campcaster/src/modules/htmlUI/var/html/ui_browser.php b/campcaster/src/modules/htmlUI/var/html/ui_browser.php index 876fe6c42..9097aeda7 100644 --- a/campcaster/src/modules/htmlUI/var/html/ui_browser.php +++ b/campcaster/src/modules/htmlUI/var/html/ui_browser.php @@ -410,6 +410,12 @@ if ($uiBrowser->userid) { case "SCHEDULER.export": $Smarty->assign('act', $action); break; + + case "twitter.settings": + $Smarty->assign('dynform', $uiBrowser->TWITTER->getSettingsForm()); + $Smarty->assign('twitter', array('samplefeed' => $uiBrowser->TWITTER->getFeed())); + $Smarty->assign('act', $action); + break; } if ($action != 'SCHEDULER') { diff --git a/campcaster/src/modules/htmlUI/var/html/ui_handler.php b/campcaster/src/modules/htmlUI/var/html/ui_handler.php index 5c8e0af62..346509d75 100644 --- a/campcaster/src/modules/htmlUI/var/html/ui_handler.php +++ b/campcaster/src/modules/htmlUI/var/html/ui_handler.php @@ -436,6 +436,11 @@ switch ($_REQUEST['act']) { $_SESSION = array(); die(); break; + + case 'twitter.saveSettings': + $uiHandler->TWITTER->saveSettings(); + $uiHandler->redirUrl = UI_BROWSER.'?act=twitter.settings'; + break; case NULL: if ($uiHandler->userid) { diff --git a/campcaster/src/modules/htmlUI/var/html/ui_twitter-cron.php b/campcaster/src/modules/htmlUI/var/html/ui_twitter-cron.php new file mode 100644 index 000000000..48bc67cc6 --- /dev/null +++ b/campcaster/src/modules/htmlUI/var/html/ui_twitter-cron.php @@ -0,0 +1,22 @@ +TWITTER->getFeed()) { + if ($uiHandler->TWITTER->needsUpdate()) { + print "Prepare for update...\n"; + if ($res = $uiHandler->TWITTER->sendFeed($feed)) { + print "Feed id {$res->id}\n $feed"; + } else { + print "Update failed, check auth data."; + } + } else { + print "Update interval not reached."; + } +} else { + print "No playlist found."; +} \ No newline at end of file diff --git a/campcaster/src/modules/htmlUI/var/lib/twitter.class.php b/campcaster/src/modules/htmlUI/var/lib/twitter.class.php new file mode 100644 index 000000000..0098bfba5 --- /dev/null +++ b/campcaster/src/modules/htmlUI/var/lib/twitter.class.php @@ -0,0 +1,287 @@ +publicTimeline(); +// if($res===false){ +// echo "ERROR
"; +// echo "
";
+//   print_r($t->responseInfo);
+//     echo "
"; +// }else{ +// echo "SUCCESS
"; +// echo "
";
+//   print_r($res);
+//     echo "
"; +// } +// +// +// Example 2: +// +// $t= new twitter(); +// $t->username='username'; +// $t->password='password'; +// $res = $t->update('i am testing twitter.class.php'); +// if($res===false){ +// echo "ERROR
"; +// echo "
";
+//   print_r($t->responseInfo);
+//     echo "
"; +// }else{ +// echo "SUCCESS
Status Posted"; +// } +// +// +////////////////////////////////////////// + +class twitter{ + var $username=''; + var $password=''; + var $user_agent=''; + + /////////////// + // + // I don't know if these headers have become standards yet + // but I would suggest using them. + // more discussion here. + // http://tinyurl.com/3xtx66 + // + /////////////// + var $headers=array('X-Twitter-Client: ', + 'X-Twitter-Client-Version: ', + 'X-Twitter-Client-URL: '); + + var $responseInfo=array(); + + + function twitter(){} + + + + + + ///////////////////////////////////////// + // + // Twitter API calls + // + // $this->update($status) + // $this->publicTimeline($sinceid=false) + // $this->friendsTimeline($id=false,$since=false) + // $this->userTimeline($id=false,$count=20,$since=false) + // $this->showStatus($id) + // $this->friends($id=false) + // $this->followers() + // $this->featured() + // $this->showUser($id) + // $this->directMessages($since=false) + // $this->sendDirectMessage($user,$text) + // + // If SimpleXMLElement exists the results will be returned as a SimpleXMLElement + // otherwise the raw XML will be returned for a successful request. If the request + // fails a FALSE will be returned. + // + // + ///////////////////////////////////////// + + + // Updates the authenticating user's status. + // Requires the status parameter specified below. + // + // status. (string) Required. The text of your status update. Must not be + // more than 160 characters and should not be + // more than 140 characters to ensure optimal display. + // + function update($status){ + $request = 'http://twitter.com/statuses/update.xml'; + $postargs = 'status='.urlencode($status); + return $this->process($request,$postargs); + } + + // Returns the 20 most recent statuses from non-protected users who have + // set a custom user icon. Does not require authentication. + // + // sinceid. (int) Optional. Returns only public statuses with an ID greater + // than (that is, more recent than) the specified ID. + // + function publicTimeline($sinceid=false){ + $qs=''; + if($sinceid!==false) + $qs='?since_id='.intval($sinceid); + $request = 'http://twitter.com/statuses/public_timeline.xml'.$qs; + return $this->process($request); + } + + // Returns the 20 most recent statuses posted in the last 24 hours from the + // authenticating user and that user's friends. It's also possible to request + // another user's friends_timeline via the id parameter below. + // + // id. (string OR int) Optional. Specifies the ID or screen name of the user for whom + // to return the friends_timeline. (set to false if you + // want to use authenticated user). + // since. (HTTP-formatted date) Optional. Narrows the returned results to just those + // statuses created after the specified date. + // + function friendsTimeline($id=false,$since=false){ + $qs=''; + if($since!==false) + $qs='?since='.urlencode($since); + + if($id===false) + $request = 'http://twitter.com/statuses/friends_timeline.xml'.$qs; + else + $request = 'http://twitter.com/statuses/friends_timeline/'.urlencode($id).'.xml'.$qs; + + return $this->process($request); + } + + // Returns the 20 most recent statuses posted in the last 24 hours from the + // authenticating user. It's also possible to request another user's timeline + // via the id parameter below. + // + // id. (string OR int) Optional. Specifies the ID or screen name of the user for whom + // to return the user_timeline. + // count. (int) Optional. Specifies the number of statuses to retrieve. May not be + // greater than 20 for performance purposes. + // since. (HTTP-formatted date) Optional. Narrows the returned results to just those + // statuses created after the specified date. + // + function userTimeline($id=false,$count=20,$since=false){ + $qs='?count='.intval($count); + if($since!==false) + $qs .= '&since='.urlencode($since); + + if($id===false) + $request = 'http://twitter.com/statuses/user_timeline.xml'.$qs; + else + $request = 'http://twitter.com/statuses/user_timeline/'.urlencode($id).'.xml'.$qs; + + return $this->process($request); + } + + // Returns a single status, specified by the id parameter below. The status's author + // will be returned inline. + // + // id. (int) Required. Returns status of the specified ID. + // + function showStatus($id){ + $request = 'http://twitter.com/statuses/show/'.intval($id).'.xml'; + return $this->process($request); + } + // Returns the authenticating user's friends, each with current status inline. It's + // also possible to request another user's friends list via the id parameter below. + // + // id. (string OR int) Optional. The ID or screen name of the user for whom to request + // a list of friends. + // + function friends($id=false){ + if($id===false) + $request = 'http://twitter.com/statuses/friends.xml'; + else + $request = 'http://twitter.com/statuses/friends/'.urlencode($id).'.xml'; + return $this->process($request); + } + + // Returns the authenticating user's followers, each with current status inline. + // + function followers(){ + $request = 'http://twitter.com/statuses/followers.xml'; + return $this->process($request); + } + + // Returns a list of the users currently featured on the site with their current statuses inline. + function featured(){ + $request = 'http://twitter.com/statuses/featured.xml'; + return $this->process($request); + } + + // Returns extended information of a given user, specified by ID or screen name as per the required + // id parameter below. This information includes design settings, so third party developers can theme + // their widgets according to a given user's preferences. + // + // id. (string OR int) Required. The ID or screen name of a user. + // + function showUser($id){ + $request = 'http://twitter.com/users/show/'.urlencode($id).'.xml'; + return $this->process($request); + } + + // Returns a list of the direct messages sent to the authenticating user. + // + // since. (HTTP-formatted date) Optional. Narrows the resulting list of direct messages to just those + // sent after the specified date. + // + function directMessages($since=false){ + $qs=''; + if($since!==false) + $qs='?since='.urlencode($since); + $request = 'http://twitter.com/direct_messages.xml'.$qs; + return $this->process($request); + } + + // Sends a new direct message to the specified user from the authenticating user. Requires both the user + // and text parameters below. + // + // user. (string OR int) Required. The ID or screen name of the recipient user. + // text. (string) Required. The text of your direct message. Be sure to URL encode as necessary, and keep + // it under 140 characters. + // + function sendDirectMessage($user,$text){ + $request = 'http://twitter.com/direct_messages/new.xml'; + $postargs = 'user='.urlencode($user).'&text='.urlencode($text); + return $this->process($request,$postargs); + } + + + + + + // internal function where all the juicy curl fun takes place + // this should not be called by anything external unless you are + // doing something else completely then knock youself out. + function process($url,$postargs=false){ + + $ch = curl_init($url); + + if($postargs !== false){ + curl_setopt ($ch, CURLOPT_POST, true); + curl_setopt ($ch, CURLOPT_POSTFIELDS, $postargs); + } + + if($this->username !== false && $this->password !== false) + curl_setopt($ch, CURLOPT_USERPWD, $this->username.':'.$this->password); + + curl_setopt($ch, CURLOPT_VERBOSE, 1); + curl_setopt($ch, CURLOPT_NOBODY, 0); + curl_setopt($ch, CURLOPT_HEADER, 0); + curl_setopt($ch, CURLOPT_USERAGENT, $this->user_agent); + curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($ch, CURLOPT_HTTPHEADER, $this->headers); + + $response = curl_exec($ch); + + $this->responseInfo=curl_getinfo($ch); + curl_close($ch); + + + if(intval($this->responseInfo['http_code'])==200){ + if(class_exists('SimpleXMLElement')){ + $xml = new SimpleXMLElement($response); + return $xml; + }else{ + return $response; + } + }else{ + return false; + } + } +} diff --git a/campcaster/src/modules/htmlUI/var/templates/masterpanel.tpl b/campcaster/src/modules/htmlUI/var/templates/masterpanel.tpl index 44a29a4ef..47d7f8fa0 100644 --- a/campcaster/src/modules/htmlUI/var/templates/masterpanel.tpl +++ b/campcaster/src/modules/htmlUI/var/templates/masterpanel.tpl @@ -73,6 +73,10 @@ {include file="scheduler/import.tpl"} {/if} + {if $act === 'twitter.settings'} + {include file="twitter/settings.tpl"} + {/if} +
{if $simpleSearchForm} {include file="library/simpleSearchForm.tpl"} diff --git a/campcaster/src/modules/htmlUI/var/templates/menu.tpl b/campcaster/src/modules/htmlUI/var/templates/menu.tpl index 493da973e..49dfabc1d 100644 --- a/campcaster/src/modules/htmlUI/var/templates/menu.tpl +++ b/campcaster/src/modules/htmlUI/var/templates/menu.tpl @@ -70,6 +70,7 @@ if (window.attachEvent) window.attachEvent("onload", sfHover);