function getArrayDetail($a, $id, $table, $offset = 0, $nbElementsToDisplay = NB_ELEMENTS_TO_DISPLAY) { $return = array(); foreach ($a as $key => $value) { if ($key == $id) { // printTime('1', true); $sum = $value['pmv_sum']; unset($value['pmv_sum']); $a2 = $this->getArrayIdToName(getArrayOffsetLimit($value, $offset, $nbElementsToDisplay), $table); // printDebug($a2); // printTime('2', true); foreach ($a2 as $name => $hits) { if ($table === 'keyword') { $name = urldecode($name); } $return[] = array('data' => $name, 'sum' => $hits, 'percent' => 100 * $this->_secureDiv($hits, $sum)); } // printTime('3', true); break; } } // printTime('4', true); //printDebug($return); usort($return, "sortingDataInfo"); // printTime('5', true); return $return; }
function sortAndLimitToRecord() { $doNotSort = array('vis_st', 'vis_lt', 'pag_st', 'pag_lt', 'vis_lth', 'vis_nb_pag', 'vis_nb_vis'); foreach ($this->arrayOneDimToSum as $name) { if (!in_array($name, $doNotSort)) { arsort($this->toRecord[$name]); } $this->toRecord[$name] = getArrayOffsetLimit($this->toRecord[$name], 0, MAX_DISTINCT_ELEMENTS); } foreach ($this->arrayPmvSumToSum as $name) { uasort($this->toRecord[$name], "sortingPmv"); $this->toRecord[$name] = getArrayOffsetLimit($this->toRecord[$name], 0, MAX_DISTINCT_ELEMENTS); } foreach ($this->arrayIntToSum as $name) { uasort($this->toRecord[$name], "sortingInterest"); $this->toRecord[$name] = getArrayOffsetLimit($this->toRecord[$name], 0, MAX_DISTINCT_INTEREST_ELEMENTS); } }
/** * Computes all info relative to referer * Detects for each different referer URL (or each entry page, when no referer URLs), the name (and keyword), * the domain, the precise page, the partner, the newsletter * * Saves in var toRecord all precomputed values. Isn't that great ? */ function computeReferer() { // Init $hits = 0; $vis_listing = array('vis_search_engine', 'vis_keyword', 'vis_newsletter', 'vis_partner', 'vis_site'); foreach ($vis_listing as $value) { $this->toRecord[$value] = array(); } $resDirect = 0; $int_sum = array(); $int_sum['search_engine'] = array(); $int_sum['keyword'] = array(); $int_sum['site'] = array(); $int_sum['partner_name'] = array(); $int_sum['newsletter'] = array(); $int_sum['type'][REF_TYPE_DIRECT_ENTRY] = array(); $int_sum['type'][REF_TYPE_NEWSLETTER] = array(); $int_sum['type'][REF_TYPE_PARTNER] = array(); $int_sum['type'][REF_TYPE_SEARCH_ENGINE] = array(); $int_sum['type'][REF_TYPE_SITE] = array(); // query that selects all distinct referer URLs $r = query("SELECT count(*) as s, referer as r" . $GLOBALS['test'] . " FROM " . T_VISIT . " WHERE server_date= '" . $this->date->get() . "' " . " AND idsite = " . $this->site->getId() . " " . " AND referer IS NOT NULL" . " GROUP BY r\n\t\t\t\t\t"); while ($l = mysql_fetch_assoc($r)) { // different types : // - partner identified as it is // - search engines that give keywords // - direct access, url belongs to the site // - other misc websites $hits = $l['s']; $refererUrl = $l['r']; // now... lets go in identifying ! // and don't go back it's so important ! $refererUrlParse = parse_url($refererUrl); // if referer exists (and not 'blockedReferer' or other) if (isset($refererUrlParse['host'])) { $refererHost = $refererUrlParse['host']; $refererSH = $refererUrlParse['scheme'] . '://' . $refererUrlParse['host']; //printDebug("<b>".$refererHost." </b> "); /* * search engine */ if (array_key_exists($refererHost, $GLOBALS['searchEngines'])) { // which search engine ? $sname = $GLOBALS['searchEngines'][$refererHost][0]; $vname = $GLOBALS['searchEngines'][$refererHost][1]; // id base logs to id base archives $ids = $this->objects['search_engine']->getId($sname); // init if (!isset($this->toRecord['vis_search_engine'][$ids])) { $this->toRecord['vis_search_engine'][$ids]['pmv_sum'] = 0; $int_sum['search_engine'][$ids] = array(); } $this->toRecord['vis_search_engine'][$ids]['pmv_sum'] += $hits; // interest for current engine $int_sum['search_engine'][$ids] = $this->getInterestValuesSum($int_sum['search_engine'][$ids], $l['s'], $l['sumpage'], $l['onepage'], $l['sumtime']); // interest for the type search_engine $int_sum['type'][REF_TYPE_SEARCH_ENGINE] = $this->getInterestValuesSum($int_sum['type'][REF_TYPE_SEARCH_ENGINE], $l['s'], $l['sumpage'], $l['onepage'], $l['sumtime']); // if there is a query, there may be a keyword... if (isset($refererUrlParse['query'])) { /* * keyword ? */ $query = $refererUrlParse['query']; // for google image take the prev variable // and take the q var in this variable once urldecoded // but sometimes we have images.google.fr/search which is exactly like www.google.fr/search.... if (ereg("^images.google.", $refererHost)) { //print("befo = ".$query); $query = getUrlParamValue($query, "prev"); // case images.google.com/search we replace in the host images by www if ($query === false) { $refererHost = str_replace("images", "www", $refererHost); $vname = $GLOBALS['searchEngines'][$refererHost][1]; } else { $query = urldecode($query); // we want the query from "/images?q=+logo+designs&start=360&ndsp=20&svnum=10&hl=en&lr=&sa=N" $query = substr($query, strpos($query, "?") + 1); // getUrlParam need htmlentitied $query = htmlentities($query); //print("<br> after = ".$query); } } // search for keywords now &vname=keyword $key = strtolower(getUrlParamValue($query, $vname)); // for search engines that don't use utf-8 if (function_exists('iconv') && isset($GLOBALS['searchEngines'][$refererHost][2])) { $charset = trim($GLOBALS['searchEngines'][$refererHost][2]); if (!empty($charset)) { $key = urlencode(@iconv($charset, 'utf-8//TRANSLIT', urldecode($key))); } } //print($refererUrlParse['query'].",". $vname." : ".$key."<br>"); // base logs => base archives $idk = $this->objects['keyword']->getId($key); /* * init */ if (!isset($this->toRecord['vis_search_engine'][$ids][$idk])) { $this->toRecord['vis_search_engine'][$ids][$idk] = 0; } if (!isset($this->toRecord['vis_keyword'][$idk][$ids])) { $this->toRecord['vis_keyword'][$idk][$ids] = 0; $int_sum['keyword'][$idk] = array(); } if (!isset($this->toRecord['vis_keyword'][$idk]['pmv_sum'])) { $this->toRecord['vis_keyword'][$idk]['pmv_sum'] = 0; } $this->toRecord['vis_search_engine'][$ids][$idk] += $hits; $this->toRecord['vis_keyword'][$idk][$ids] += $hits; $this->toRecord['vis_keyword'][$idk]['pmv_sum'] += $hits; $int_sum['keyword'][$idk] = $this->getInterestValuesSum($int_sum['keyword'][$idk], $l['s'], $l['sumpage'], $l['onepage'], $l['sumtime']); } } else { if ($this->site->isUrlIn($refererUrl)) { //printDebug("<br>directentry<br>"); $resDirect += $hits; // interest for the type 'direct_entry' $int_sum['type'][REF_TYPE_DIRECT_ENTRY] = $this->getInterestValuesSum($int_sum['type'][REF_TYPE_DIRECT_ENTRY], $l['s'], $l['sumpage'], $l['onepage'], $l['sumtime']); } else { if ($this->site->isPartner($refererUrl)) { //printDebug("<br>partner<br>"); // comments are not necessary here, code is so clear :-D $url = array_search($refererHost, $this->site->getPartnerUrlsFlat()); $pname = $this->site->getPartnerName(); $idp = $this->objects['partner_name']->getId($pname); $idpu = $this->objects['partner_url']->getId($refererUrl); // init if (!isset($this->toRecord['vis_partner'][$idp]['pmv_sum'])) { $this->toRecord['vis_partner'][$idp]['pmv_sum'] = 0; $int_sum['partner_name'][$idp] = array(); } $this->toRecord['vis_partner'][$idp][$idpu] = $hits; $this->toRecord['vis_partner'][$idp]['pmv_sum'] += $hits; //printDebug($this->toRecord['vis_partner']); $int_sum['partner_name'][$idp] = $this->getInterestValuesSum($int_sum['partner_name'][$idp], $l['s'], $l['sumpage'], $l['onepage'], $l['sumtime']); $int_sum['type'][REF_TYPE_PARTNER] = $this->getInterestValuesSum($int_sum['type'][REF_TYPE_PARTNER], $l['s'], $l['sumpage'], $l['onepage'], $l['sumtime']); } else { //printDebug(" misc site | "); $idmsh = $this->objects['site']->getId($refererHost); $idms = $this->objects['site']->getId($refererUrl); // init if (!isset($this->toRecord['vis_site'][$idmsh]['pmv_sum'])) { $this->toRecord['vis_site'][$idmsh]['pmv_sum'] = 0; $int_sum['site'][$idmsh] = array(); } $this->toRecord['vis_site'][$idmsh]['pmv_sum'] += $hits; $this->toRecord['vis_site'][$idmsh][$idms] = $hits; $int_sum['site'][$idmsh] = $this->getInterestValuesSum($int_sum['site'][$idmsh], $l['s'], $l['sumpage'], $l['onepage'], $l['sumtime']); $int_sum['type'][REF_TYPE_SITE] = $this->getInterestValuesSum($int_sum['type'][REF_TYPE_SITE], $l['s'], $l['sumpage'], $l['onepage'], $l['sumtime']); } } } } else { // direct entry $resDirect += $hits; //printDebug("<br>directentry<br>"); $int_sum['type'][REF_TYPE_DIRECT_ENTRY] = $this->getInterestValuesSum($int_sum['type'][REF_TYPE_DIRECT_ENTRY], $l['s'], $l['sumpage'], $l['onepage'], $l['sumtime']); } } // query that selects entry pages, when there are no referer URls // it allows detection of partners, newsletters and direct entries $r = query("SELECT count(distinct idvisit) as sp, pu.idpage_url as p, \n\t\t\t\t\t\t\tpu.url as u" . $GLOBALS['test'] . " FROM " . T_VISIT . " as v, " . T_PAGE_URL . " as pu \n\t\t\t\t WHERE v.entry_idpageurl = pu.idpage_url \n\t\t\t\t AND v.server_date= '" . $this->date->get() . "' \n\t\t\t\t AND v.idsite = " . $this->site->getId() . " \n\t\t\t\t AND v.referer IS NULL\n\t\t\t\t GROUP by entry_idpageurl\n\t\t\t\t\t"); while ($l = mysql_fetch_assoc($r)) { // different types : // - partner identified by ID in URL // - newsletter identified by ID in URL // - direct entries $hits = $l['sp']; $idPageEntry = $l['p']; // useless // url parsing can fail when for example its value is "/translate... etc." // we count it as a direct entry $urlParse = @parse_url($l['u']); // if referer exists (and not blockedReferer or other) if (isset($urlParse['query'])) { //printDebug($l['p']." "); $urlQuery = $urlParse['query']; // print($urlQuery); exit; /* * partner */ if ($pid = getUrlParamValue($urlQuery, PARAM_URL_PARTNER)) { //printDebug("<br><b>PID $pid detected !</b>"); //printDebug("<br>partner</br>"); $pname = $this->site->getPartnerNameFromId($pid); $idp = $this->objects['partner_name']->getId($pname); // init if (!isset($this->toRecord['vis_partner'][$idp]['pmv_sum'])) { $this->toRecord['vis_partner'][$idp]['pmv_sum'] = 0; $int_sum['partner_name'][$idp] = array(); } $this->toRecord['vis_partner'][$idp]['pmv_sum'] += $hits; //printDebug($this->toRecord['vis_partner']); $int_sum['partner_name'][$idp] = $this->getInterestValuesSum($int_sum['partner_name'][$idp], $l['s'], $l['sumpage'], $l['onepage'], $l['sumtime']); $int_sum['type'][REF_TYPE_PARTNER] = $this->getInterestValuesSum($int_sum['type'][REF_TYPE_PARTNER], $l['s'], $l['sumpage'], $l['onepage'], $l['sumtime']); } else { if ($nid = getUrlParamValue($urlQuery, PARAM_URL_NEWSLETTER)) { //print("NID to searc = $nid"); if (defined("NEWSLETTER_ID_MAX_AUTO") && defined("NEWSLETTER_FORCE_CREATE") && (NEWSLETTER_ID_MAX_AUTO == -1 || $nid <= NEWSLETTER_ID_MAX_AUTO)) { $nname = $this->site->getNewsletterName($nid, NEWSLETTER_FORCE_CREATE); } else { $nname = $this->site->getNewsletterName($nid); } // if newsletter exists if (!$nname) { print "Newsletter name not found! Maybe it's an empty name in phpmv_newsletter ? (for " . PARAM_URL_NEWSLETTER . " = {$nid})"; //exit; } else { // print("<br><b>NID $nid detected !</b>"); // print("<br>newsletter</br>"); $idn = $this->objects['newsletter']->getId($nname); // init if (!isset($this->toRecord['vis_newsletter'][$idn])) { $this->toRecord['vis_newsletter'][$idn] = 0; $int_sum['newsletter'][$idn] = array(); } $this->toRecord['vis_newsletter'][$idn] += $hits; //printDebug($this->toRecord['vis_newsletter']); $int_sum['newsletter'][$idn] = $this->getInterestValuesSum($int_sum['newsletter'][$idn], $l['s'], $l['sumpage'], $l['onepage'], $l['sumtime']); $int_sum['type'][REF_TYPE_NEWSLETTER] = $this->getInterestValuesSum($int_sum['type'][REF_TYPE_NEWSLETTER], $l['s'], $l['sumpage'], $l['onepage'], $l['sumtime']); } } else { $resDirect += $hits; $int_sum['type'][REF_TYPE_DIRECT_ENTRY] = $this->getInterestValuesSum($int_sum['type'][REF_TYPE_DIRECT_ENTRY], $l['s'], $l['sumpage'], $l['onepage'], $l['sumtime']); } } } else { $resDirect += $hits; $int_sum['type'][REF_TYPE_DIRECT_ENTRY] = $this->getInterestValuesSum($int_sum['type'][REF_TYPE_DIRECT_ENTRY], $l['s'], $l['sumpage'], $l['onepage'], $l['sumtime']); } } /* * developed interest average */ // database-interest-field-name => interestsum-array-keyname $int_sum_to_avg = array('int_search_engine' => 'search_engine', 'int_keyword' => 'keyword', 'int_site' => 'site', 'int_partner' => 'partner_name', 'int_newsletter' => 'newsletter', 'int_referer_type' => 'type'); foreach ($int_sum_to_avg as $int_name => $value) { uasort($int_sum[$value], "sortingInterest"); $this->toRecord[$int_name] = $int_sum[$value]; } /* * sum by referer type */ $nbSearchEngine = 0; foreach ($this->toRecord['vis_search_engine'] as $key => $value) { $nbSearchEngine += $value['pmv_sum']; } $nbSite = 0; foreach ($this->toRecord['vis_site'] as $key => $value) { $nbSite += $value['pmv_sum']; } $nbUniqSite = sizeof($this->toRecord['vis_site']); $nbNewsletter = array_sum($this->toRecord['vis_newsletter']); $nbPartner = 0; foreach ($this->toRecord['vis_partner'] as $key => $value) { $nbPartner += $value['pmv_sum']; } $this->toRecord['nb_direct'] = $resDirect; $this->toRecord['nb_search_engine'] = $nbSearchEngine; $this->toRecord['nb_site'] = $nbSite; $this->toRecord['nb_newsletter'] = $nbNewsletter; $this->toRecord['nb_partner'] = $nbPartner; /*printDebug("<br><br><b>Access types </b><br> Direct : $nbDirect <br>Search engines : $nbSearchEngine " . "<br> By site : $nbSite <br> Unique sites : $nbUniqSite <br>" . "Partner : $nbPartner <br> Newsletter : $nbNewsletter <br>"); */ foreach ($vis_listing as $value) { if ($value != 'vis_newsletter') { if (is_array($this->toRecord[$value])) { foreach ($this->toRecord[$value] as $key2 => $value2) { if (is_array($this->toRecord[$value][$key2])) { arsort($this->toRecord[$value][$key2]); } $this->toRecord[$value][$key2] = getArrayOffsetLimit($this->toRecord[$value][$key2], 0, MAX_DISTINCT_DETAILS_ELEMENTS); } } else { arsort($this->toRecord[$value]); } } } }