--- a/busui/owa/modules/base/handlers/refererHandlers.php +++ b/busui/owa/modules/base/handlers/refererHandlers.php @@ -1,1 +1,162 @@ - + + * @copyright Copyright © 2006 Peter Adams + * @license http://www.gnu.org/copyleft/gpl.html GPL v2.0 + * @category owa + * @package owa + * @version $Revision$ + * @since owa 1.0.0 + */ + +class owa_refererHandlers extends owa_observer { + + /** + * Notify Event Handler + * + * @param unknown_type $event + * @access public + */ + function notify($event) { + + if (!$event->get('external_referer')) { + return; + } + + // Make entity + $r = owa_coreAPI::entityFactory('base.referer'); + + $r->load( $r->generateId( $event->get( 'HTTP_REFERER' ) ) ); + + if ( ! $r->wasPersisted() ) { + + // set referer url + $r->set('url', $event->get('HTTP_REFERER')); + + // check for search engine + $se_info = $this->lookupSearchEngine($event->get('HTTP_REFERER')); + if (!empty($se_info)) { + $r->set('is_searchengine', true); + $r->set('site_name', $se_info->name); + } + + // Set site + $url = parse_url($event->get('HTTP_REFERER')); + $r->set('site', $url['host']); + + if ($event->get('source') === 'organic-search') { + $r->set('is_searchengine', true); + } + + // set title. this will be updated later by the crawler. + $r->set('page_title', '(not set)'); + // Set id + $r->set('id', owa_lib::setStringGuid($event->get('HTTP_REFERER'))); + + // Crawl and analyze refering page + if (owa_coreAPI::getSetting('base', 'fetch_refering_page_info')) { + //owa_coreAPI::debug('hello from logReferer'); + $crawler = new owa_http; + //$crawler->fetch($this->params['HTTP_REFERER']); + $res = $crawler->getRequest($event->get('HTTP_REFERER')); + owa_coreAPI::debug('http request response: '.print_r($res, true)); + //Extract Title + + $title = trim($crawler->extract_title()); + + if ($title) { + + $r->set('page_title', owa_lib::utf8Encode( $title ) ); + } + + $se = $r->get('is_searchengine'); + //Extract anchortext and page snippet but not if it's a search engine... + if ($se != true) { + + $snippet = $crawler->extract_anchor_snippet($event->get('inbound_page_url')); + + if ($snippet) { + if (function_exists('iconv')) { + $snippet = iconv('UTF-8','UTF-8//TRANSLIT',$snippet); + } + $r->set('snippet', $snippet); + } + + $anchortext = $crawler->anchor_info['anchor_text']; + + if ($anchortext) { + + $r->set('refering_anchortext', owa_lib::utf8Encode( $anchortext ) ); + } + } + } + + // Persist to database + $ret = $r->create(); + + if ( $ret ) { + return OWA_EHS_EVENT_HANDLED; + } else { + return OWA_EHS_EVENT_FAILED; + } + + } else { + owa_coreAPI::debug('Not Persisting. Referrer already exists.'); + return OWA_EHS_EVENT_HANDLED; + } + } + + /** + * Lookup info about referring domain + * + * @param string $referer + * @return object + * @access private + */ + function lookupSearchEngine($referer) { + + /* Look for match against Search engine groups */ + $db = new ini_db(owa_coreAPI::getSetting('base', 'search_engines.ini'), $sections = true); + + $se_info = $db->fetch($referer); + + if (!empty($se_info->name)): + return $se_info; + else: + return false; + endif; + + } + +} + +?>