<?php
/*
* phpMyVisites : website statistics and audience measurements
* Copyright (C) 2002 - 2006
* http://www.phpmyvisites.net/
* phpMyVisites is free software (license GNU/GPL)
* Authors : phpMyVisites team
*/
// $Id: Archive.functions.php 107 2006-10-02 09:40:54Z matthieu_ $
/**
* Sums values in the pages/groups/files two arrays of N dimensions that can be very different
*
* @param array $a1
* @param array $a2
*
* @return array
*/
function getPagGrpArrayMultiDimSum($a1, $a2)
{
if(!empty($a2) && is_array($a2))
{
foreach($a2 as $key=>$value)
{
if(!isset($a1[$key]))
{
$a1[$key] = $value;
}
else
{
if(substr($key, 0, 1) === 'c')
{
$a1[$key] = getPagGrpArrayMultiDimSum($value, $a1[$key]);
}
else
{
$a1[$key] = sumArray($value, $a1[$key], true);
}
}
}
}
return $a1;
}
/**
* Sum 2 arrays
*
* @param array $a1
* @param array $a2
*
* @return array
*/
function sumArray($a1, $a2, $specialCasePageExcludeSum = false)
{
return getArrayOneDimVeryVeryVerySpecialSum($a1, $a2, "sum", $specialCasePageExcludeSum);
}
/**
* Performs a complete sum
*
* @param int $a
* @param int $b
*
* @return int a+b
*/
function sum($a, $b)
{
if(is_numeric($a) && is_numeric($b))
{
return $a + $b;
}
else
{
return $b;
}
}
/**
* Sums with a VeryVeryVery special arithmetic
* (!)
*
* @param array $a1
* @param array $a2
* @param string VeryVeryVery special name of the VeryVeryVery special function to call for the sum
*
* @return array The VeryVeryVery special array resulting from all the VeryVeryVery special process
*/
function getArrayOneDimVeryVeryVerySpecialSum($a1, $a2, $veryVeryVerySpecialSumOperation, $specialCasePageExcludeSum = false)
{
if(!empty($a2) && is_array($a2))
{
foreach($a2 as $key=>$value)
{
if(
$specialCasePageExcludeSum === false
||
($key != ARRAY_INDEX_IDPAGE
&& $key != ARRAY_INDEX_IDCATEGORY)
)
{
if(!isset($a1[$key]))
{
$a1[$key] = $value;
}
else
{
$a1[$key] = call_user_func_array($veryVeryVerySpecialSumOperation, array($value, $a1[$key]));
}
}
}
}
return $a1;
}
function getNumberOfDaysBetween( $s_date1, $s_date2)
{
return sizeof(getDaysBetween($s_date1, $s_date2));
}
/**
* returns an array containing the days between the 2 days
*
* @param string $s_date1
* @param string $s_date2
*
* @return array
*/
function getDaysBetween($s_date1, $s_date2)
{
$date1 = new Date($s_date1);
$date2 = new Date($s_date2);
$ts1 = $date1->getTimestamp();
$ts2 = $date2->getTimestamp();
//print("(".$date1->get()." > ".$date2->get().")");
if($ts1 > $ts2)
{
trigger_error("For the period statistic, Day 1 is AFTER Day 2 (".$date1->get()." > ".$date2->get()."). It's impossible, sorry.", E_USER_ERROR);
}
$return = array();
while($ts1 <= $ts2)
{
$return[] = getDateFromTimestamp($ts1);
$ts1 = mktime(23, 59, 59, date("m", $ts1), date("d", $ts1) + 1, date("Y", $ts1));
}
return $return;
}
/**
* returns the value of a GET parameter $param in an URL query $urlQuery
*
* @param string $urlQuery result of parse_url()['query'] and htmlentitied (& is &)
* @param string $param
*
* @return string|bool param value (ex : keyword in google url) if found, false else
*/
function getUrlParamValue($urlQuery, $param)
{
$refererQuery = '&'.databaseEscape(trim(str_replace(array('%20'), ' ', '&'.$urlQuery)));
$word = '&'.$param.'=';
// print($urlQuery." param=".$param);
if( $off = strpos($refererQuery, $word))
{
$off += strlen($word); // &q=
$str = substr($refererQuery, $off);
$len = strpos($str, '&');
if($len === false)
{
$len = strlen($str);
}
$toReturn = substr($refererQuery, $off, $len);
return $toReturn;
}
else
{
return false;
}
}
/**
* Used in the sort function for N-dimensionnal arrays
*/
function sortingAllPageInfo($a_id1,$a_id2)
{
@$elt1 = $a_id1[ARRAY_INDEX_LEVEL];
@$elt2 = $a_id2[ARRAY_INDEX_LEVEL];
return ($elt1 > $elt2) ? -1 : 1;
}
function sortingInterest($a_id1,$a_id2)
{
@$elt1 = $a_id1[0];
@$elt2 = $a_id2[0];
return ($elt1 > $elt2) ? -1 : 1;
}
function sortingPmv($a1,$a2)
{
@$elt1 = $a1['pmv_sum'];
@$elt2 = $a2['pmv_sum'];
return ($elt1 > $elt2) ? -1 : 1;
}
?>