You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							367 lines
						
					
					
						
							10 KiB
						
					
					
				
			
		
		
	
	
							367 lines
						
					
					
						
							10 KiB
						
					
					
				<?php
 | 
						|
/* For licensing terms, see /license.txt */
 | 
						|
/**
 | 
						|
*	This is the statistic utility functions library for Chamilo.
 | 
						|
*	Include/require it in your code to use its functionality.
 | 
						|
*	@package chamilo.library
 | 
						|
*/
 | 
						|
/* FUNCTIONS */
 | 
						|
/**
 | 
						|
 * @author Sebastien Piraux <piraux_seb@hotmail.com>
 | 
						|
 * @param sql : a sql query (as a string)
 | 
						|
 * @desc return one result from a sql query (1 single result)
 | 
						|
 */
 | 
						|
function getOneResult($sql) {
 | 
						|
	$query = Database::query($sql);
 | 
						|
	if ($query !== false) {
 | 
						|
		$res = @Database::fetch_array($query, 'NUM');
 | 
						|
	} else {
 | 
						|
		$res = array();
 | 
						|
	}
 | 
						|
	return $res[0];
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * @author Sebastien Piraux <piraux_seb@hotmail.com>
 | 
						|
 * @param sql : a sql query (as a string)
 | 
						|
 * @desc Return many results of a query in a 1 column tab
 | 
						|
 */
 | 
						|
function getManyResults1Col($sql) {
 | 
						|
	$res = Database::query($sql);
 | 
						|
	if ($res !== false) {
 | 
						|
		$i = 0;
 | 
						|
		while ($resA = Database::fetch_array($res, 'NUM')) {
 | 
						|
			$resu[$i++] = $resA[0];
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return $resu;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * @author Sebastien Piraux <piraux_seb@hotmail.com>
 | 
						|
 * @param sql : a sql query (as a string)
 | 
						|
 * @desc Return many results of a query
 | 
						|
 */
 | 
						|
function getManyResults2Col($sql) {
 | 
						|
	$res = Database::query($sql);
 | 
						|
	if ($res !== false) {
 | 
						|
		$i = 0;
 | 
						|
		while ($resA = Database::fetch_array($res, 'NUM')) {
 | 
						|
			$resu[$i][0] = $resA[0];
 | 
						|
			$resu[$i][1] = $resA[1];
 | 
						|
			$i++;
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return $resu;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * @author Sebastien Piraux <piraux_seb@hotmail.com>
 | 
						|
 * @param sql : a sql query (as a string)
 | 
						|
 * @desc Return many results of a query in a 3 column tab
 | 
						|
         in $resu[$i][0], $resu[$i][1],$resu[$i][2]
 | 
						|
 */
 | 
						|
function getManyResults3Col($sql) {
 | 
						|
	$res = Database::query($sql);
 | 
						|
	if ($res !== false) {
 | 
						|
		$i = 0;
 | 
						|
		while ($resA = Database::fetch_array($res, 'NUM')) {
 | 
						|
			$resu[$i][0] = $resA[0];
 | 
						|
			$resu[$i][1] = $resA[1];
 | 
						|
			$resu[$i][2] = $resA[2];
 | 
						|
			$i++;
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return $resu;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * @author Sebastien Piraux <piraux_seb@hotmail.com>
 | 
						|
 * @param sql : a sql query (as a string)
 | 
						|
 * @desc Return many results of a query in a X column tab
 | 
						|
         in $resu[$i][0], $resu[$i][1],$resu[$i][2],...
 | 
						|
         this function is more 'standard' but use a little
 | 
						|
         more ressources
 | 
						|
         So I encourage to use the dedicated for 1, 2 or 3
 | 
						|
         columns of results
 | 
						|
 */
 | 
						|
function getManyResultsXCol($sql, $X) {
 | 
						|
	$res = Database::query($sql);
 | 
						|
	if ($res !== false) {
 | 
						|
		$i = 0;
 | 
						|
		while ($resA = Database::fetch_array($res, 'NUM')) {
 | 
						|
			for ($j = 0; $j < $X ; $j++) {
 | 
						|
				$resu[$i][$j] = $resA[$j];
 | 
						|
			}
 | 
						|
			$i++;
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return $resu;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 | 
						|
 * @author Sebastien Piraux <piraux_seb@hotmail.com>
 | 
						|
 * @param sql : a sql query (as a string)
 | 
						|
 * @return hours_array
 | 
						|
 * @desc        Return an assoc array.  Keys are the hours, values are
 | 
						|
                the number of time this hours was found.
 | 
						|
                key 'total' return the sum of all number of time hours
 | 
						|
                appear
 | 
						|
 */
 | 
						|
function hoursTab($sql) {
 | 
						|
	$hours_array = array('total' => 0);
 | 
						|
	$res = Database::query($sql);
 | 
						|
	if ($res !== false) {
 | 
						|
		while ($row = Database::fetch_row($res)) {
 | 
						|
			$date_array = getdate($row[0]);
 | 
						|
			if ($date_array['hours'] == $last_hours) {
 | 
						|
				$hours_array[$date_array['hours']]++;
 | 
						|
			} else {
 | 
						|
				$hours_array[$date_array['hours']] = 1;
 | 
						|
				$last_hours = $date_array['hours'];
 | 
						|
			}
 | 
						|
			$hours_array['total']++;
 | 
						|
		}
 | 
						|
		Database::free_result($res);
 | 
						|
	}
 | 
						|
	return $hours_array;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 | 
						|
 * @author Sebastien Piraux <piraux_seb@hotmail.com>
 | 
						|
 * @param sql : a sql query (as a string)
 | 
						|
 * @return days_array
 | 
						|
 * @desc        Return an assoc array.  Keys are the days, values are
 | 
						|
                the number of time this hours was found.
 | 
						|
                key "total" return the sum of all number of time days
 | 
						|
                appear
 | 
						|
 */
 | 
						|
function daysTab($sql) {
 | 
						|
	$MonthsShort = api_get_months_short();
 | 
						|
	$days_array = array('total' => 0);
 | 
						|
	$res = Database::query($sql);
 | 
						|
	if ($res !== false) {
 | 
						|
		while ($row = Database::fetch_row($res)) {
 | 
						|
			$date_array = getdate($row[0]);
 | 
						|
			$display_date = $date_array['mday'].' '.$MonthsShort[$date_array['mon'] - 1].' '.$date_array['year'];
 | 
						|
			if ($date_array['mday'] == $last_day) {
 | 
						|
				$days_array[$display_date]++;
 | 
						|
			} else {
 | 
						|
				$days_array[$display_date] = 1;
 | 
						|
				$last_day = $display_date;
 | 
						|
			}
 | 
						|
			$days_array['total']++;
 | 
						|
		}
 | 
						|
		Database::free_result($res);
 | 
						|
	}
 | 
						|
	return $days_array;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 | 
						|
 * @author Sebastien Piraux <piraux_seb@hotmail.com>
 | 
						|
 * @param sql : a sql query (as a string)
 | 
						|
 * @return month_array
 | 
						|
 * @desc        Return an assoc array.  Keys are the days, values are
 | 
						|
                the number of time this hours was found.
 | 
						|
                key "total" return the sum of all number of time days
 | 
						|
                appear
 | 
						|
 */
 | 
						|
function monthTab($sql) {
 | 
						|
	$MonthsLong = api_get_months_long();
 | 
						|
    $month_array = array('total' => 0);
 | 
						|
	$res = Database::query($sql);
 | 
						|
	if ($res !== false) {
 | 
						|
		// init tab with all months
 | 
						|
		for($i = 0; $i < 12; $i++) {
 | 
						|
			$month_array[$MonthsLong[$i]] = 0;
 | 
						|
		}
 | 
						|
		while ($row = Database::fetch_row($res)) {
 | 
						|
			$date_array = getdate($row[0]);
 | 
						|
			$month_array[$MonthsLong[$date_array['mon'] - 1]]++;
 | 
						|
			$month_array['total']++;
 | 
						|
		}
 | 
						|
		Database::free_result($res);
 | 
						|
	}
 | 
						|
	return $month_array;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 | 
						|
 * @author Sebastien Piraux <piraux_seb@hotmail.com>
 | 
						|
 * @param period_array : an array provided by hoursTab($sql) or daysTab($sql)
 | 
						|
 * @param periodTitle : title of the first column, type of period
 | 
						|
 * @param linkOnPeriod :
 | 
						|
 * @desc        Display a 4 column array
 | 
						|
                Columns are : hour of day, graph, number of hits and %
 | 
						|
                First line are titles
 | 
						|
                next are informations
 | 
						|
                Last is total number of hits
 | 
						|
 */
 | 
						|
function makeHitsTable($period_array, $periodTitle, $linkOnPeriod = '???') {
 | 
						|
	echo "<table width='100%' cellpadding='0' cellspacing='1' border='0' align=center class='minitext'>";
 | 
						|
	// titles
 | 
						|
	echo "<tr bgcolor='#E6E6E6' align='center'>
 | 
						|
	        <td width='15%' >
 | 
						|
	            <b>$periodTitle</b>
 | 
						|
	        </td>
 | 
						|
	        <td width='60%'>
 | 
						|
	             
 | 
						|
	        </td>
 | 
						|
	        <td width='10%'>
 | 
						|
	            <b>".get_lang('Hits')."</b>
 | 
						|
	        </td>
 | 
						|
	        <td width='15%'>
 | 
						|
	            <b>%</b>
 | 
						|
	        </td>
 | 
						|
        </tr>
 | 
						|
	";
 | 
						|
	$factor = 4;
 | 
						|
	$maxSize = $factor * 100; //pixels
 | 
						|
	while (list($periodPiece, $cpt) = each($period_array)) {
 | 
						|
		if ($periodPiece != 'total') {
 | 
						|
			$pourcent = round(100 * $cpt / $period_array['total']);
 | 
						|
			$barwidth = $factor * $pourcent ;
 | 
						|
			echo "<tr>
 | 
						|
				<td align='center' width='15%'>";
 | 
						|
			echo $periodPiece;
 | 
						|
			echo "</td>
 | 
						|
				<td width='60%' style='padding-top: 3px;' align='center'>"
 | 
						|
				// display hitbar
 | 
						|
				."<img src='../img/bar_1.gif' width='1' height='12' alt='$periodPiece : $cpt hits – $pourcent %' />";
 | 
						|
			if($pourcent != 0)
 | 
						|
				echo "<img src='../img/bar_1u.gif' width='$barwidth' height='12' alt='$periodPiece : $cpt hits – $pourcent %' />";
 | 
						|
				// display 100% bar
 | 
						|
			if($pourcent != 100 && $pourcent != 0)
 | 
						|
				echo "<img src='../img/bar_1m.gif' width='1' height='12' alt='$periodPiece : $cpt hits – $pourcent %' />";
 | 
						|
			if($pourcent != 100)
 | 
						|
				echo "<img src='../img/bar_1r.gif' width='".($maxSize-$barwidth)."' height='12' alt='$periodPiece : $cpt hits – $pourcent %' />";
 | 
						|
			echo "<img src='../img/bar_1.gif' width='1' height='12' alt='$periodPiece : $cpt hits – $pourcent %' />
 | 
						|
				</td>
 | 
						|
				<td align='center' width='10%'>
 | 
						|
					$cpt
 | 
						|
				</td>
 | 
						|
				<td align='center' width='15%'>
 | 
						|
					$pourcent %
 | 
						|
				</td>
 | 
						|
				</tr>
 | 
						|
			";
 | 
						|
		}
 | 
						|
	}
 | 
						|
	echo "<tr bgcolor='#E6E6E6'>
 | 
						|
	        <td width='15%' align='center'>
 | 
						|
	            ".get_lang('Total')."
 | 
						|
	        </td>
 | 
						|
	        <td align='right' width='60%'>
 | 
						|
	             
 | 
						|
	        </td>
 | 
						|
	        <td align='center' width='10%'>
 | 
						|
	            ".$period_array['total']."
 | 
						|
	        </td>
 | 
						|
	        <td width='15%'>
 | 
						|
                 
 | 
						|
	        </td>
 | 
						|
	    </tr>
 | 
						|
	";
 | 
						|
	echo "</table>";
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 | 
						|
 * @author Sebastien Piraux <piraux_seb@hotmail.com>
 | 
						|
 * @param array_of_results : a 2 columns array
 | 
						|
 * @param title1 : string, title of the first column
 | 
						|
 * @param title2 : string, title of the ... second column
 | 
						|
 * @desc        display a 2 column tab from an array
 | 
						|
                titles of columns are title1 and title2
 | 
						|
 */
 | 
						|
function buildTab2col($array_of_results, $title1, $title2) {
 | 
						|
	echo "<table cellpadding='2' cellspacing='1' border='1' align='center'>\n";
 | 
						|
	echo "<tr>
 | 
						|
	        <td bgcolor='#E6E6E6'>
 | 
						|
	        $title1
 | 
						|
	        </td>
 | 
						|
	        <td bgcolor='#E6E6E6'>
 | 
						|
	        $title2
 | 
						|
	        </td>
 | 
						|
	    </tr>\n";
 | 
						|
 | 
						|
	if (is_array($array_of_results)) {
 | 
						|
		for ($j = 0 ; $j < count($array_of_results) ; $j++) {
 | 
						|
			echo '<tr>';
 | 
						|
			echo '<td bgcolor="#eeeeee">'.$array_of_results[$j][0].'</td>';
 | 
						|
			echo '<td align="right">'.$array_of_results[$j][1].'</td>';
 | 
						|
			echo "</tr>\n";
 | 
						|
		}
 | 
						|
	} else {
 | 
						|
		echo '<tr>';
 | 
						|
		echo '<td colspan="2" align="center">'.get_lang('NoResult').'</td>';
 | 
						|
		echo "</tr>\n";
 | 
						|
	}
 | 
						|
	echo "</table>\n";
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 | 
						|
 * @author Sebastien Piraux <piraux_seb@hotmail.com>
 | 
						|
 * @param array_of_results : a 2 columns array
 | 
						|
 * @desc        display a 2 column tab from an array
 | 
						|
                this tab has no title
 | 
						|
 */
 | 
						|
function buildTab2ColNoTitle($array_of_results) {
 | 
						|
	echo "<table cellpadding='3' cellspacing='1' border='0' align='center'>\n";
 | 
						|
 | 
						|
	if (is_array($array_of_results)) {
 | 
						|
		for ($j = 0 ; $j < count($array_of_results) ; $j++) {
 | 
						|
			echo '<tr>';
 | 
						|
			echo '<td bgcolor="#eeeeee">'.$array_of_results[$j][0].'</td>';
 | 
						|
			echo '<td align="right">  '.$array_of_results[$j][1].'</td>';
 | 
						|
			echo "</tr>\n";
 | 
						|
		}
 | 
						|
	} else {
 | 
						|
		echo '<tr>';
 | 
						|
		echo '<td colspan="2" align="center">'.get_lang('NoResult').'</td>';
 | 
						|
		echo "</tr>\n";
 | 
						|
	}
 | 
						|
	echo "</table>\n";
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 | 
						|
 * @author Sebastien Piraux <piraux_seb@hotmail.com>
 | 
						|
 * @param array_of_results : a 2 columns array
 | 
						|
 * @desc        this function is used to display
 | 
						|
                integrity errors in the platform
 | 
						|
                if array_of_results is not an array there is
 | 
						|
                no error, else errors are displayed
 | 
						|
 */
 | 
						|
function buildTabDefcon($array_of_results) {
 | 
						|
	echo "<table width='60%' cellpadding='2' cellspacing='1' border='0' align=center class='minitext'>\n";
 | 
						|
 | 
						|
	if (is_array($array_of_results)) {
 | 
						|
		// there are some strange cases...
 | 
						|
		echo '<tr>';
 | 
						|
		echo '<td colspan="2" align="center" bgcolor="#eeeeee"><font color="#ff0000">'.get_lang('Defcon').'</font></td>';
 | 
						|
		echo "</tr>\n";
 | 
						|
 | 
						|
		for ($j = 0 ; $j < count($array_of_results) ; $j++) {
 | 
						|
			if($array_of_results[$j][0] == "") {
 | 
						|
				$key = get_lang('NULLValue');
 | 
						|
			} else {
 | 
						|
				$key = $array_of_results[$j][0];
 | 
						|
			}
 | 
						|
			echo '<tr>';
 | 
						|
			echo '<td width="70%" class="content">'.$key.'</td>';
 | 
						|
			echo '<td width="30%" align="right">'.$array_of_results[$j][1].'</td>';
 | 
						|
			echo "</tr>\n";
 | 
						|
		}
 | 
						|
	} else {
 | 
						|
		// all right
 | 
						|
		echo '<tr>';
 | 
						|
		echo '<td colspan="2" align="center"><font color="#00ff00">'.get_lang('AllRight').'</font></td>';
 | 
						|
		echo "</tr>\n";
 | 
						|
	}
 | 
						|
	echo "</table>\n";
 | 
						|
}
 | 
						|
 |