initialize(); $text_link_ads_object->outputHtmlAds(); } function tla_shutdown() { global $text_link_ads_object; if(is_object($text_link_ads_object)) $text_link_ads_object->destruct(); } function tla_output_css() { echo " "; } function tla_initialize_rss() { global $text_link_ads_object; $text_link_ads_object = new TextLinkAdsObject; $text_link_ads_object->initialize(true); } function tla_initialize_rss_atom() { global $text_link_ads_object; tla_initialize_rss(); $text_link_ads_object->setRssExcerptOption(0); add_filter('the_content', 'tla_concat_rss_ad', 1); } function tla_initialize_rss_rdf() { global $text_link_ads_object; tla_initialize_rss(); $text_link_ads_object->setRssExcerptOption(0); add_filter('the_content', 'tla_concat_rss_ad', 1); } function tla_initialize_rss_rss1() { global $text_link_ads_object; tla_initialize_rss(); $text_link_ads_object->setRssExcerptOption(1); add_filter('the_excerpt_rss', 'tla_concat_rss_ad', 1); } function tla_initialize_rss_rss2() { global $text_link_ads_object; tla_initialize_rss(); $text_link_ads_object->setRssExcerptOption(0); add_filter('the_content', 'tla_concat_rss_ad', 1); } function tla_concat_rss_ad($content = '') { global $text_link_ads_object, $post; if(is_object($text_link_ads_object) && is_object($post)){ $content .= $text_link_ads_object->returnRssAd($post->ID, $post->post_date); } return $content; } class TextLinkAdsObject { var $websiteKey = "ISPBI1726I97C10B4PDL"; var $websiteId = 44565; // we do not recommend changing these values var $xmlRefreshTime = 900; var $connectionTimeout = 10; var $tlaDataTable = 'tla_data'; var $rssMapTable = 'tla_rss_map'; var $rssInstalledOption = 'tla_rss_installed'; var $lastUpdateOption = 'tla_last_update'; var $rssMaxAdsOption = 'tla_rss_max_ads'; var $rssIndexOption = 'tla_rss_index'; var $ads; var $rssActiveAds; var $rssStoredAds; var $rssMaxAds; var $rssCurrentIndex; var $rssInstalled; var $rssExcerptSetting; var $rssRestoreSettings = false; function TextLinkAdsObject() { global $table_prefix; $this->tlaDataTable = $table_prefix.$this->tlaDataTable; $this->rssMapTable = $table_prefix.$this->rssMapTable; } function installDatabase() { global $wpdb; require_once(ABSPATH . 'wp-admin/upgrade-functions.php'); $sql = "CREATE TABLE `$this->tlaDataTable` ( `id` INT( 10 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , `url` VARCHAR( 255 ) NOT NULL , `text` VARCHAR( 255 ) NOT NULL , `before_text` VARCHAR( 255 ) NOT NULL , `after_text` VARCHAR( 255 ) NOT NULL , `rss_text` VARCHAR( 255 ) NOT NULL , `rss_before_text` VARCHAR( 255 ) NOT NULL , `rss_after_text` VARCHAR( 255 ) NOT NULL , `rss_prefix` VARCHAR( 255 ) NOT NULL ) TYPE = MYISAM ;"; dbDelta($sql); $sql = "CREATE TABLE `$this->rssMapTable` ( `post_id` INT( 10 ) UNSIGNED NOT NULL DEFAULT '0', `advertisement` VARCHAR( 255 ) NOT NULL , PRIMARY KEY ( `post_id` ) ) TYPE = MYISAM ;"; dbDelta($sql); add_option($this->rssInstalledOption, date('Y-m-d H:i:s'), 'Stores the date that TLA feedvertising was installed.'); add_option($this->lastUpdateOption, '0000-00-00 00:00:00', 'Stores the date of the last TLA plugin data update.'); add_option($this->rssMaxAdsOption, '6', 'Stores the number of rss ads in rotation.'); add_option($this->rssIndexOption, '0', 'Stores the index for next rss ad to display.'); } function initialize($rss = false) { global $wpdb; if($wpdb->get_var("SHOW TABLES LIKE '$this->tlaDataTable'") != $this->tlaDataTable) { $this->installDatabase(); } if(get_option($this->lastUpdateOption) < date('Y-m-d H:i:s', time() - $this->xmlRefreshTime)) { $requestUri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : ""; $userAgent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : ""; $this->updateLocalAds("http://www.text-link-ads.com/xml.php?inventory_key=".$this->websiteKey."&referer=" . urlencode($request_uri) . "&user_agent=" . urlencode($user_agent) . ($rss ? '&rss_access=true' : '')); } $this->ads = $wpdb->get_results("SELECT * FROM $this->tlaDataTable"); if($rss){ $this->rssInstalled = get_option($this->rssInstalledOption); $this->rssMaxAds = get_option($this->rssMaxAdsOption); $this->rssCurrentIndex = get_option($this->rssIndexOption); $this->loadStoredRssAds(); $this->loadActiveRssAds(); } } function destruct() { update_option($this->rssIndexOption, $this->rssCurrentIndex); if($this->rssRestoreSettings){ update_option('rss_use_excerpt', $this->rssExcerptSetting); } } function setRssExcerptOption($val = 0) { $this->rssRestoreSettings = true; $this->rssExcerptSetting = get_option('rss_use_excerpt'); update_option('rss_use_excerpt', $val); } function updateLocalAds($url) { global $wpdb; update_option($this->lastUpdateOption, date('Y-m-d H:i:s')); if($xml = $this->fetchLiveXml($url)) { $xmlData = $this->decodeXml($xml); if( is_array($xmlData['URL']) ){ $query = "INSERT INTO $this->tlaDataTable ( `url`, `text`, `before_text`, `after_text`, `rss_text`, `rss_before_text`, `rss_after_text`, `rss_prefix`) VALUES "; for ($i = 0; $i < count($xmlData['URL']); $i++) { $query .= " ( '".mysql_escape_string($xmlData['URL'][$i])."', '".mysql_escape_string($xmlData['Text'][$i])."', '".mysql_escape_string($xmlData['BeforeText'][$i])."', '".mysql_escape_string($xmlData['AfterText'][$i])."', '".mysql_escape_string($xmlData['RssText'][$i])."', '".mysql_escape_string($xmlData['RssBeforeText'][$i])."', '".mysql_escape_string($xmlData['RssAfterText'][$i])."', '".mysql_escape_string($xmlData['RssPrefix'][$i])."' ),"; $this->rssMaxAds = $xmlData['RssMaxAds'][$i]; } $query = substr($query, 0, strlen($query)-1); $wpdb->query("TRUNCATE `$this->tlaDataTable`"); $wpdb->query($query); update_option($this->rssMaxAdsOption, $this->rssMaxAds); } } } function fetchLiveXml($url) { $result = ''; $url = parse_url($url); if ($handle = @fsockopen ($url["host"], 80)) { if(function_exists("socket_set_timeout")) { socket_set_timeout($handle, $this->connectionTimeout, 0); } else if(function_exists("stream_set_timeout")) { stream_set_timeout($handle, $this->connectionTimeout, 0); } fwrite ($handle, "GET $url[path]?$url[query] HTTP/1.0\r\nHost: $url[host]\r\nConnection: Close\r\n\r\n"); while (!feof($handle)) { $result .= @fread($handle, 40960); } fclose($handle); $result = substr($result, strpos($result,'(.*?)', '"'); $n = 0; while (isset($out[$n])) { $returnData[$out[$n][1]][] = str_replace($search, $replace, html_entity_decode(strip_tags($out[$n][0]))); $n++; } return $returnData; } function outputHtmlAds() { if( count($this->ads) > 0 ){ echo "\n"; } } function loadStoredRssAds() { global $wpdb; $this->rssStoredAds = array(); $rssAds = $wpdb->get_results("SELECT * FROM `$this->rssMapTable` ORDER BY post_id DESC LIMIT ".get_option('posts_per_rss')); if(is_array($rssAds)) foreach($rssAds as $ad) $this->rssStoredAds[$ad->post_id] = $ad->advertisement; } function loadActiveRssAds() { $this->rssActiveAds = array(); if(is_array($this->ads)) foreach($this->ads as $ad) { if($ad->rss_text == '' && $ad->rss_before_text == '' && $ad->rss_after_text == '') continue; $this->rssActiveAds[] = "$ad->rss_prefix: $ad->rss_before_text url\">$ad->rss_text $ad->rss_after_text
"; } } function returnRssAd($postId, $postDate) { global $wpdb; if($postDate < $this->rssInstalled) return; $returnAd = ''; if( isset($this->rssStoredAds[$postId]) ){ $returnAd = $this->rssStoredAds[$postId]; }else{ $this->rssCurrentIndex = $this->rssCurrentIndex % $this->rssMaxAds; $returnAd = isset($this->rssActiveAds[$this->rssCurrentIndex]) ? $this->rssActiveAds[$this->rssCurrentIndex] : ''; $wpdb->query("INSERT INTO `$this->rssMapTable` SET post_id = '$postId', advertisement = '".mysql_escape_string($returnAd)."'"); $this->rssStoredAds[$postId] = $returnAd; $this->rssCurrentIndex++; $this->rssCurrentIndex = $this->rssCurrentIndex % $this->rssMaxAds; } return ($returnAd != '' ? "

$returnAd

" : ''); } } ?>