PDA

View Full Version : switch off and on plugin via php upon condition


saltedm8
08-26-2009, 11:52 AM
I have this script

<?php
class myTwit{
var $user = false; // User to show public posts
var $cacheFile = 'twitcache.txt'; // File to save local cache of Twitter update
var $cachExpire = 300; // Seconds that cache is classed as "old"
var $myTwitHeader = true;
var $postLimit = 20; // 20 = max
var $debug = false;

function printError($message){
print htmlspecialchars($message);
exit;
}
function debugMsg($message){
if ($this->debug == true) print htmlspecialchars($message).'<br />';
}
function formatDays($val, $qty){
if ($val > 1) return $val.' '.$qty.'s ago';
else return $val.' '.$qty.' ago';
}

function intoRelativeTime($seconds){
if (($seconds / 60 / 60 / 24) > 1) return $this->formatDays(round($seconds / 60 / 60 / 24), 'day');
elseif (($seconds / 60 / 60) > 1) return 'about '.$this->formatDays(round($seconds / 60 / 60), 'hour');
else if (($seconds / 60 ) > 1) return 'about '.$this->formatDays(round($seconds / 60), 'minute');
else return 'about '.round($seconds).' seconds ago';
}

function linkURLs($text){
$in=array( '`((?:https?|ftp)://\S+[[:alnum:]]/?)`si', '`((?<!//)(www\.\S+[[:alnum:]]/?))`si' );
$out=array( '<a href="$1" target="_blank">$1</a> ', '<a href="http://$1" target="_blank">$1</a>' );
$text = preg_replace($in,$out,$text);
$text = preg_replace('/@([a-zA-Z0-9-]+)/','@<a href="http://twitter.com/$1" target="_blank">$1</a>',$text);
return $text;
}

function checkCacheFile(){
if ( (@filemtime($this->cacheFile) < (mktime() - $this->cachExpire) ) || (!is_file($this->cacheFile)) ){
$this->debugMsg('Cache file outdated');
$this->updateCache();
} else {
$this->debugMsg('Cache file still valid');
}
}

function updateCache(){
$uri = 'http://twitter.com/statuses/user_timeline/'.$this->user.'.json';
$req = new HTTPRequest($uri);
$tmpdata = $req->DownloadToString();
$resp = json_decode($tmpdata, true);
if (isset($resp['error'])) $this->printError('Error getting information from Twitter ['.$resp['error'].']. Please check the username ('.$this->user.')');
elseif (!is_array($resp)) $this->printError('Error getting information from Twitter. File is not JSON.');
$handle = @fopen($this->cacheFile, 'w');
if (!$handle) $this->printError('Could not write to cache file: '.$this->cacheFile.'. Please check read/write permissions.');
fwrite($handle, $tmpdata);
fclose($handle);
$this->debugMsg('Updated cache file: '.$this->cacheFile);
}

function readCache(){
if( false == ($this->jsonData = @file_get_contents( $this->cacheFile )))
$this->printError('Could not read cache file: '.$this->cacheFile);
}

function initMyTwit(){
if (!is_string($this->user)) $this->printError('Please set a user.');
$this->checkCacheFile();
$this->readCache();
$this->jsonArray = json_decode($this->jsonData, true);
$output = '<ul class="twitbox">';
if ($this->myTwitHeader && isset($this->jsonArray[0])){
$output .= ' <li class="mytwitHead"><img src="'.$this->jsonArray[0]['user']['profile_image_url'].'" alt="'.$this->user.'" />
<div><a href="http://twitter.com/'.$this->user.'" target="_blank">'.$this->user.'</a><br />
'.$this->jsonArray[0]['user']['followers_count'].' followers</div>
</li>';
}
for($x=0; $x < count($this->jsonArray) && $x < $this->postLimit; $x++){
$seconds_ago = mktime() - strtotime($this->jsonArray[$x]['created_at']);
$ts = strtotime($this->jsonArray[$x]['created_at'])+$this->jsonArray[$x]['user']['utc_offset'];
$cur_ts = mktime();
$output .= '<li class="twit">'.$this->linkURLs(htmlspecialchars($this->jsonArray[$x]['text'])).
' <span class="twhen">by <a href="http://twitter.com/'.$this->jsonArray[$x]['user']['screen_name'].'" target="_blank">'.$this->jsonArray[$x]['user']['screen_name'].'</a> '.
$this->intoRelativeTime($seconds_ago)."</span></li>\n";
}
$output .= '</ul>';
$this->myTwitData = $output;
}
}


class HTTPRequest{
var $_fp; // HTTP socket
var $_url; // full URL
var $_host; // HTTP host
var $_protocol; // protocol (HTTP/HTTPS)
var $_uri; // request URI
var $_port; // port
// scan url
function _scan_url(){
$req = $this->_url;
$pos = strpos($req, '://');
$this->_protocol = strtolower(substr($req, 0, $pos));
$req = substr($req, $pos+3);
$pos = strpos($req, '/');
if($pos === false)
$pos = strlen($req);
$host = substr($req, 0, $pos);
if(strpos($host, ':') !== false) {
list($this->_host, $this->_port) = explode(':', $host);
}else{
$this->_host = $host;
$this->_port = ($this->_protocol == 'https') ? 443 : 80;
}
$this->_uri = substr($req, $pos);
if($this->_uri == '')
$this->_uri = '/';
}
// constructor
function HTTPRequest($url){
$this->_url = $url;
$this->_scan_url();
}
// download URL to string
function DownloadToString(){
$crlf = "\r\n";
// generate request
$req = 'GET ' . $this->_uri . ' HTTP/1.0' . $crlf
. 'Host: ' . $this->_host . $crlf
. 'User-Agent: PHP' . $crlf
. $crlf;
// fetch
$this->_fp = @fsockopen(($this->_protocol == 'https' ? 'ssl://' : '') . $this->_host, $this->_port);
if ($this->_fp){
fwrite($this->_fp, $req);
$response = "";
while(is_resource($this->_fp) && $this->_fp && !feof($this->_fp))
$response .= fread($this->_fp, 1024);
fclose($this->_fp);
// split header and body
$pos = strpos($response, $crlf . $crlf);
if($pos === false)
return($response);
$header = substr($response, 0, $pos);
$body = substr($response, $pos + 2 * strlen($crlf));
// parse headers
$headers = array();
$lines = explode($crlf, $header);
foreach($lines as $line)
if(($pos = strpos($line, ':')) !== false)
$headers[strtolower(trim(substr($line, 0, $pos)))] = trim(substr($line, $pos+1));
// redirection?
if(isset($headers['location'])){
$http = new HTTPRequest($headers['location']);
return($http->DownloadToString($http));
} else{
return($body);
}
} else {
return false;
}
}
}
?>

and I am calling it using this

ob_start();
include(DIR . '/twittercall.php');
$twitter = new myTwit();
$twitter->user = 'webprocafe';
$twitter->cacheFile = 'twitcache.txt';
$twitter->postLimit = 5;
$twitter->initMyTwit();
print $twitter->myTwitData;
$latest_twit = ob_get_contents();
ob_end_clean();

when it cant get the json file for any reason it displays

Error getting information from Twitter. File is not JSON.

but unfortunately its making the homepage blank with only that text..

I was wondering if anyone can work out how to make it switch off the plugin instead if it goes down, and then when it comes back up again to switch the plugin on

or.. more preferred would be to make it so it does not make the homepage blank, and only display that message in the section that the feed is sitting in... - it should be under 'latest tweets' on our homepage - link in signature

thank you

saltedm8
08-30-2009, 09:10 AM
B.U.M.P

please give me some suggestions, thanks