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,'')); } return $result; } function decodeXml($xml) { if( !function_exists('html_entity_decode') ){ function html_entity_decode($string) { // replace numeric entities $str = preg_replace('~([0-9a-f]+);~ei', 'chr(hexdec("\1"))', $str); $str = preg_replace('~([0-9]+);~e', 'chr(\1)', $str); // replace literal entities $transTable = get_html_translation_table(HTML_ENTITIES); $transTable = array_flip($transTable); return strtr($str, $transTable); } } $out = array(); $returnData = array(); preg_match_all ("/<(.*?)>(.*?)", $xml, $out, PREG_SET_ORDER); $search = array('<', '>', '"'); $replace = array('<', '>', '"'); $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
$returnAd
" : ''); } } ?>