[csw-devel] SF.net SVN: opencsw:[339] web/wordpresscsw/tools/statistics

wbonnet at users.sourceforge.net wbonnet at users.sourceforge.net
Sun Feb 27 17:44:57 CET 2011


Revision: 339
          http://opencsw.svn.sourceforge.net/opencsw/?rev=339&view=rev
Author:   wbonnet
Date:     2011-02-27 16:44:57 +0000 (Sun, 27 Feb 2011)

Log Message:
-----------
Add Statistics generation under web tree

Added Paths:
-----------
    web/wordpresscsw/tools/statistics/db-common.php
    web/wordpresscsw/tools/statistics/db-config.php.sample
    web/wordpresscsw/tools/statistics/monthlyPackageCount.php
    web/wordpresscsw/tools/statistics/monthlyPackageCreationUpdate.php

Copied: web/wordpresscsw/tools/statistics/db-common.php (from rev 321, utilities/packagesStatistics/tools/db-common.php)
===================================================================
--- web/wordpresscsw/tools/statistics/db-common.php	                        (rev 0)
+++ web/wordpresscsw/tools/statistics/db-common.php	2011-02-27 16:44:57 UTC (rev 339)
@@ -0,0 +1,310 @@
+<?php
+/*
+ * The contents of this file are subject to the COMMON DEVELOPMENT AND 
+ * DISTRIBUTION LICENSE (CDDL) (the "License"); you may not use this 
+ * file except in compliance with the License. 
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 3 or later (the "GPL"),
+ * in which case the provisions of the GPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL, and not to allow others to
+ * use your version of this file under the terms of the CDDL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the CDDL, or the GPL.
+
+ * Copyright 2009 OpenCSW (http://www.opencsw.org).  All rights reserved.
+ * Use is subject to license terms.
+ *
+ *
+ * Contributors list :
+ *
+ *    William Bonnet wbonnet at opencsw.org
+ *
+ *
+ * Version :
+ *
+ *  $Id: $
+ *
+ */
+
+// Includes db connection parameters (username, password, etc.)
+require("db-config.php");   
+
+//
+// Class mysqlDAO
+//
+//          provides basic DAO functions for mySQL
+//
+class mysqlDAO {
+
+    // Members variables
+    var $dbName;
+    var $dbHost;
+    var $dbUser;
+    var $dbPassword;
+    var $dbCnx;
+    var $linkDB;
+    var $result;
+    
+
+    // -----------------------------------------------------------------------------------------------------------------------
+    //
+    // Constructeur de la classe.
+    // Appelé automatiquement à l'instanciation de la classe.
+    //
+    // -----------------------------------------------------------------------------------------------------------------------
+    function mysqlDAO() {
+        $this->dbName       = DB_SCHEMA;
+        $this->dbHost       = DB_HOST;
+        $this->dbUser       = DB_USER;
+        $this->dbPassword   = DB_PASSWORD;
+    }
+
+    // -----------------------------------------------------------------------------------------------------------------------
+    //
+    // Connect to database
+    //
+    // -----------------------------------------------------------------------------------------------------------------------
+    function connect() {
+
+        // Connect to database
+        $this->linkDB = mysql_connect($this->dbHost, $this->dbUser, $this->dbPassword) 
+            or die("Unable to connect to db : " . mysql_error());
+
+        // Select default database
+        $this->dbCnx = mysql_select_db($this->dbName, $this->linkDB);
+        if (!$this->dbCnx) {
+            die ('Unable to use database ' . $this->dbName . ' : ' . mysql_error());
+        }
+    }
+
+    // -----------------------------------------------------------------------------------------------------------------------
+    //
+    // Disconnect from database
+    //
+    // -----------------------------------------------------------------------------------------------------------------------
+    function disconnect() {
+        mysql_close($this->linkDB);
+    }
+
+    // -----------------------------------------------------------------------------------------------------------------------
+    //
+    // Query execution
+    //
+    // -----------------------------------------------------------------------------------------------------------------------
+    function execQuery($sqlQuery) {
+
+        // Execute the query
+        $this->result = mysql_query(utf8_encode($sqlQuery), $this->linkDB);
+
+        // Check results. Display query and error
+        if (!$this->result) {
+            $message  = 'Invalid query : ' . mysql_error() . "\n";
+            $message .= 'Query used    : ' . $sqlQuery;
+            die($message);
+        }
+    }
+
+    // -----------------------------------------------------------------------------------------------------------------------
+    //
+    // Increase the number of download for a given package
+    //
+    // -----------------------------------------------------------------------------------------------------------------------
+    function increasePackageDownloadCounter($packageName, $packageOsVersion, $packageArch, $targetOsVersion, $packageSource, $columnName) {
+
+        // Get the current date components
+        $currentDay     = date('d');        // Retrieve current day
+        $currentMonth   = date('m');        // Retrieve current month
+        $currentYear    = date('Y');        // Retrieve current year
+
+        // Check that the package exist in the catalog. This is used to prevent from being polluted by non existing packages
+        $sqlQuery  = "select ID_PKG from PKG_STATS_PACKAGES where PKG_CATALOGNAME = '" . mysql_real_escape_string($packageName) . "'" ;
+
+        // Execute the query to retrieve the row to update
+        $this->execQuery($sqlQuery);
+
+        // Check if there is a result, if no return because this package does not exist
+        if (! $row = mysql_fetch_array($this->result)) {
+echo "Package $packageName does not exist<br>";
+            return;
+        }
+
+        // Define the query used to retrieve the packages from the database
+        $sqlQuery  = "select ID_DWN, $columnName from PKG_STATS_DOWNLOADS where DWN_YEAR = '$currentYear' and DWN_MONTH = '$currentMonth' " ; 
+        $sqlQuery .= "and DWN_DAY = '$currentDay' and DWN_NAME = '" . mysql_real_escape_string($packageName) . "' " ;
+        $sqlQuery .= "and DWN_ARCH = '" . mysql_real_escape_string($packageArch) . "' " ;
+        $sqlQuery .= "and DWN_PKG_OS_VERSION = '" . mysql_real_escape_string($packageOsVersion) . "' " ;
+        $sqlQuery .= "and DWN_TARGET_OS_VERSION = '" . mysql_real_escape_string($targetOsVersion) . "' " ;
+        $sqlQuery .= "and DWN_SOURCE = '" . mysql_real_escape_string($packageSource) . "' " ;
+
+        // Execute the query to retrieve the row to update
+        $this->execQuery($sqlQuery);
+
+        // Check if there is a result
+        if ($row = mysql_fetch_array($this->result)) {
+            // Yes there is a record, thus update it
+            $id            = $row[0];       // Retrieve the id of the record
+            $downloadCount = $row[1];       // Retrieve the current counter value
+
+            $downloadCount++;               // Increment download count
+
+            // Generate the query used to update the record
+            $sqlQuery  = "update PKG_STATS_DOWNLOADS set $columnName = '$downloadCount' where ID_DWN = '$id'";
+
+            // Execute the query
+            $this->execQuery($sqlQuery);
+
+        } else {
+
+            // No row means no resultats, thus we need to insert a record in the database
+            $sqlQuery  = "insert into PKG_STATS_DOWNLOADS (DWN_NAME, DWN_PKG_OS_VERSION, DWN_TARGET_OS_VERSION, DWN_SOURCE, DWN_ARCH, DWN_YEAR, DWN_MONTH, DWN_DAY, $columnName ) ";
+            $sqlQuery .= " values ('" . mysql_real_escape_string($packageName) . "',  '" ;
+            $sqlQuery .= mysql_real_escape_string($packageOsVersion) . "',  '" ;
+            $sqlQuery .= mysql_real_escape_string($targetOsVersion) . "',  '" ;
+            $sqlQuery .= mysql_real_escape_string($packageSource) . "', '" ;
+            $sqlQuery .= mysql_real_escape_string($packageArch) . "', " ;
+            $sqlQuery .= "'$currentYear', '$currentMonth', '$currentDay', 1)" ;
+
+            // Execute the query
+            $this->execQuery($sqlQuery);
+        }
+    }
+
+    // -----------------------------------------------------------------------------------------------------------------------
+    //
+    // Increase the number of installation for a given package "because it was directly downloaded"
+    //
+    // -----------------------------------------------------------------------------------------------------------------------
+    function increasePackageSelectCounter($packageName, $packageOsVersion, $packageArch, $targetOsVersion, $packageSource) {
+
+        // Call the function that will modify data in the db with the name of the column to inc
+        // Define the query used to retrieve the packages from the database
+        $this->increasePackageDownloadCounter($packageName, $packageOsVersion, $packageArch, $targetOsVersion, $packageSource, "DWN_SELECT_COUNT");
+    }
+
+    // -----------------------------------------------------------------------------------------------------------------------
+    //
+    // Increase the number of installation for a given package "because it was a dependency"
+    //
+    // -----------------------------------------------------------------------------------------------------------------------
+    function increasePackageFetchCounter($packageName, $packageOsVersion, $packageArch, $targetOsVersion, $packageSource) {
+
+        // Call the function that will modify data in the db with the name of the column to inc
+        // Define the query used to retrieve the packages from the database
+        $this->increasePackageDownloadCounter($packageName, $packageOsVersion, $packageArch, $targetOsVersion, $packageSource, "DWN_FETCH_COUNT");
+    }
+
+
+    // -----------------------------------------------------------------------------------------------------------------------
+    //
+    // Increase the number of download from a given mirror
+    //
+    // -----------------------------------------------------------------------------------------------------------------------
+    function increaseMirrorDownloadCounter($mirrorName, $mirrorArch, $mirrorOsVersion, $mirrorSource) {
+
+        // Get the current date components
+        $currentDay     = date('d');        // Retrieve current day
+        $currentMonth   = date('m');        // Retrieve current month
+        $currentYear    = date('Y');        // Retrieve current year
+
+        // Define the query used to retrieve the packages from the database
+        $sqlQuery  = "select ID_MIR, MIR_COUNT from PKG_STATS_MIRRORS where MIR_YEAR = '$currentYear' ";
+	    $sqlQuery .= "and MIR_MONTH = '$currentMonth' " ; 
+        $sqlQuery .= "and MIR_DAY = '$currentDay' " ;
+        $sqlQuery .= "and MIR_URL = '" . mysql_real_escape_string($mirrorName) . "' " ;
+        $sqlQuery .= "and MIR_ARCH = '" . mysql_real_escape_string($mirrorArch) . "' " ;
+        $sqlQuery .= "and MIR_SOURCE = '" . mysql_real_escape_string($mirrorSource) . "' " ;
+        $sqlQuery .= "and MIR_OS_VERSION = '" . mysql_real_escape_string($mirrorOsVersion) . "' " ;
+
+        // Execute the query to retrieve the row to update
+        $this->execQuery($sqlQuery);
+
+        // Check if there is a result
+        if ($row = mysql_fetch_array($this->result)) {
+            // Yes there is a record, thus update it
+            $id            = $row[0];       // Retrieve the id of the record
+            $downloadCount = $row[1];       // Retrieve the current counter value
+
+            $downloadCount++;               // Increment download count
+
+            // Generate the query used to update the record
+            $sqlQuery  = "update PKG_STATS_MIRRORS set MIR_COUNT = '$downloadCount' where ID_MIR = '$id'";
+
+            // Execute the query
+            $this->execQuery($sqlQuery);
+
+        } else {
+
+            // No row means no resultats, thus we need to insert a record in the database
+            $sqlQuery  = "insert into PKG_STATS_MIRRORS (MIR_URL, MIR_YEAR, MIR_MONTH, MIR_DAY, MIR_COUNT, ";
+            $sqlQuery .= "MIR_ARCH, MIR_SOURCE, MIR_OS_VERSION ) ";
+            $sqlQuery .= " values ('" . mysql_real_escape_string($mirrorName) ."', "; 
+            $sqlQuery .= "'$currentYear', '$currentMonth', '$currentDay', 1," ;
+            $sqlQuery .= "'" . mysql_real_escape_string($mirrorArch) ."'," ;
+            $sqlQuery .= "'" . mysql_real_escape_string($mirrorSource) ."'," ;
+            $sqlQuery .= "'" . mysql_real_escape_string($mirrorOsVersion) ."')" ;
+
+            // Execute the query
+            $this->execQuery($sqlQuery);
+        }
+    }
+
+    // -----------------------------------------------------------------------------------------------------------------------
+    //
+    // Get the monthly number of packages creations and updates for the last 12 rolling months
+    //
+    // -----------------------------------------------------------------------------------------------------------------------
+    function getMonthlyPackageCreationAndUpdateOverLastYear() {
+
+        // Initialize the variables
+	    $statCreationUpdate = array();							// array of data that will be returned to caller
+		$statIndex    		= 0; 								// current index
+
+        // Define the query used to retrieve the packages from the database
+        $sqlQuery  = "select STAT_CREATION_COUNT, STAT_UPDATE_COUNT, STAT_MONTH, STAT_YEAR from PKG_STATS_STATISTICS order by id_stat desc limit 0,12;" ;
+
+        // Execute the query to retrieve the row to update
+        $this->execQuery($sqlQuery);
+
+        // Check if there is a result
+        while ($row = mysql_fetch_array($this->result)) {
+            $statCreationUpdate[$statIndex++] = $row; 	        // Yes there is a record, thus copy it to the array
+        } 
+
+		return $statCreationUpdate ;
+    }
+
+    // -----------------------------------------------------------------------------------------------------------------------
+    //
+    // Get the monthly number of available packages for the last 12 rolling months
+    //
+    // -----------------------------------------------------------------------------------------------------------------------
+    function getMonthlyPackageCountOverLastYear() {
+
+        // Initialize the variables
+	    $statCreationUpdate = array();							// array of data that will be returned to caller
+		$statIndex    		= 0; 								// current index
+
+        // Define the query used to retrieve the packages from the database
+        $sqlQuery  = "select STAT_PACKAGE_COUNT, STAT_MONTH, STAT_YEAR from PKG_STATS_STATISTICS order by id_stat desc limit 0,12;" ;
+
+        // Execute the query to retrieve the row to update
+        $this->execQuery($sqlQuery);
+
+        // Check if there is a result
+        while ($row = mysql_fetch_array($this->result)) {
+            $statCreationUpdate[$statIndex++] = $row; 	        // Yes there is a record, thus copy it to the array
+        } 
+
+		return $statCreationUpdate ;
+    }
+}
+?>

Copied: web/wordpresscsw/tools/statistics/db-config.php.sample (from rev 321, utilities/packagesStatistics/tools/db-config.php)
===================================================================
--- web/wordpresscsw/tools/statistics/db-config.php.sample	                        (rev 0)
+++ web/wordpresscsw/tools/statistics/db-config.php.sample	2011-02-27 16:44:57 UTC (rev 339)
@@ -0,0 +1,42 @@
+<?php
+    /*
+     * The contents of this file are subject to the COMMON DEVELOPMENT AND 
+     * DISTRIBUTION LICENSE (CDDL) (the "License"); you may not use this 
+     * file except in compliance with the License. 
+     *
+     * Software distributed under the License is distributed on an "AS IS" basis,
+     * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+     * for the specific language governing rights and limitations under the
+     * License.
+     *
+     * Alternatively, the contents of this file may be used under the terms of
+     * either the GNU General Public License Version 3 or later (the "GPL"),
+     * in which case the provisions of the GPL are applicable instead
+     * of those above. If you wish to allow use of your version of this file only
+     * under the terms of either the GPL, and not to allow others to
+     * use your version of this file under the terms of the CDDL, indicate your
+     * decision by deleting the provisions above and replace them with the notice
+     * and other provisions required by the GPL. If you do not delete
+     * the provisions above, a recipient may use your version of this file under
+     * the terms of any one of the CDDL, or the GPL.
+     *    
+     * Copyright 2009 OpenCSW (http://www.opencsw.org).  All rights reserved.
+     * Use is subject to license terms.
+     *
+     *
+     * Contributors list :
+     *
+     *	William Bonnet wbonnet at opencsw.org
+     *
+     *
+     * Version :
+     *
+     *  $Id: $
+     *
+     */
+
+    define('DB_SCHEMA',   'schema');        // Defines the database name
+    define('DB_USER',     'user');          // Defines the user name
+    define('DB_PASSWORD', 'password');      // Defines the password  
+    define('DB_HOST',     'localhost');     // Defines the hostnameof the database
+?>

Copied: web/wordpresscsw/tools/statistics/monthlyPackageCount.php (from rev 321, utilities/packagesStatistics/tools/monthlyPackageCount.php)
===================================================================
--- web/wordpresscsw/tools/statistics/monthlyPackageCount.php	                        (rev 0)
+++ web/wordpresscsw/tools/statistics/monthlyPackageCount.php	2011-02-27 16:44:57 UTC (rev 339)
@@ -0,0 +1,88 @@
+<?php
+
+	// Includes the graphics library
+	require_once "Artichow/LinePlot.class.php";
+
+    // Include the database parameters
+    require("db-common.php"); 
+
+	// Defines the function to call for label output
+	function setMonth($value) {
+	    global $stats;
+	
+		date_default_timezone_set('Europe/Paris');
+		$str  = date('M', mktime(0,0,0, $stats[11 - $value][1], 1)) . " '";
+		$str .= date('y', mktime(0,0,0,0,1, $stats[11 - $value][2] + 1));
+
+		return $str;
+	}
+
+	function setNumber($value) {
+	    return round($value);
+	}
+
+	function labelFormat($value) {
+	    return $value;
+	}
+
+	// Initialization of the graphics
+	$graph = new Graph(800, 480);
+	$graph->setAntiAliasing(FALSE);
+
+	$group = new PlotGroup;
+	$group->grid->setType(Line::DASHED);
+
+	$group->setPadding(40, NULL, 20, NULL);
+
+	$group->axis->left->setLabelNumber(8);
+	$group->axis->left->setLabelPrecision(1);
+	$group->axis->left->setTickStyle(Tick::OUT);
+
+	// Statistics array population
+    $statPackage = array();											// Initialize the number of packages array
+
+	// Create the DAO object
+    $statDAO = new mysqlDAO();				                        
+
+	// Connect to database
+    $statDAO->connect();												    
+
+	// Retrieve the statistics from the database   
+    $stats = $statDAO->getMonthlyPackageCountOverLastYear();	
+	
+    // Disconnect from database
+    $statDAO->disconnect();
+
+    for ($idxCounter = 11 ; $idxCounter >= 0 ; $idxCounter--) {			// Loop used to copy data 
+        $statPackage[$idxCounter] 	= $stats[11 - $idxCounter][0];  	// into the creation array
+	}
+
+	$plot = new LinePlot($statPackage);
+
+    $plot->label->setFont(new Tuffy(7));
+    $plot->label->setPadding(1, 1, 1, 1);
+    $plot->label->setCallbackFunction("labelFormat");
+	$plot->label->setBackgroundColor(
+	    new Color(227, 223, 241, 15)
+	);
+	$plot->setColor(new Green());
+	$plot->setFillColor(new LightGreen(80));
+
+	$plot->mark->setType(Mark::CIRCLE);
+	$plot->mark->setFill(new MidGreen);
+	$plot->mark->setSize(6);
+
+	$group->legend->add($plot, "Number of available packages", Legend::MARK);
+	$group->legend->setPosition(0.35, 0.15);
+	$group->add($plot);
+
+	$x = array(NULL, NULL, NULL, 10, 12, 14, 18, 26, 42);
+
+	$group->axis->bottom->label->setCallbackFunction('setMonth');
+	$group->axis->left->label->setCallbackFunction('setNumber');
+
+	$graph->add($group);
+
+	$graph->draw();
+
+?>

Copied: web/wordpresscsw/tools/statistics/monthlyPackageCreationUpdate.php (from rev 321, utilities/packagesStatistics/tools/monthlyPackageCreationUpdate.php)
===================================================================
--- web/wordpresscsw/tools/statistics/monthlyPackageCreationUpdate.php	                        (rev 0)
+++ web/wordpresscsw/tools/statistics/monthlyPackageCreationUpdate.php	2011-02-27 16:44:57 UTC (rev 339)
@@ -0,0 +1,139 @@
+<?php
+
+	// Includes the graphics library
+	require_once "Artichow/BarPlot.class.php";
+
+    // Include the database parameters
+    require("db-common.php"); 
+
+	// Defines the function to call for label output
+	function labelFormat($value) {
+	    return $value;
+	}
+
+	function setMonth($value) {
+	    global $stats;
+
+		date_default_timezone_set('Europe/Paris');
+		$str  = date('M', mktime(0,0,0, $stats[11 - $value][2], 1)) . " '";
+		$str .= date('y', mktime(0,0,0,0,1, $stats[11 - $value][3] + 1));
+
+		return $str;
+	}
+
+	// Initialization of the graphics
+	$graph = new Graph(800, 480);
+	$graph->setAntiAliasing(FALSE);
+
+	$group = new PlotGroup;
+	$group->setSpace(5, 5, 5, 0);
+	$group->setPadding(40, 20);
+
+	$group->axis->left->setLabelPrecision(0);
+
+	$colors = array(
+    	new Color(80, 105, 190, 10),
+    	new Color(105, 190, 80, 10)
+	);
+
+	$darkColor = array(
+    	new Color(40, 55, 120, 10),
+	    new Color(55, 120, 40, 10)
+	);
+
+	$axis = array(
+    	Plot::LEFT,
+	);
+
+	$group->axis->left->setColor($darkColor[0]);
+	$group->axis->left->label->setColor($darkColor[0]);
+
+	$group->setBackgroundGradient(
+	    new LinearGradient(
+	        new Color(225, 225, 225),
+	        new Color(255, 255, 255),
+	        0
+	    )
+	);
+
+	// Statistics array population
+    $statCreation = array();											// Initialize the creation data array
+    $statUpdate   = array();											// Initialize the update data array
+
+	// Create the DAO object
+    $statDAO = new mysqlDAO();				                        
+
+	// Connect to database
+    $statDAO->connect();												    
+
+	// Retrieve the statistics from the database   
+    $stats = $statDAO->getMonthlyPackageCreationAndUpdateOverLastYear();	
+	
+    // Disconnect from database
+    $statDAO->disconnect();
+
+    for ($idxCounter = 11 ; $idxCounter >= 0 ; $idxCounter--) {			// Loop used to copy data 
+        $statCreation[$idxCounter] 	= $stats[11 - $idxCounter][0];  	// into the creation array
+        $statUpdate[$idxCounter] 	= $stats[11 - $idxCounter][1];  	// into the update array
+	}
+
+	// Add the "creations" serie on the graphic
+    $plot = new BarPlot($statCreation, 1, 2);
+    $plot->barBorder->setColor(new Color(0, 0, 0, 30));
+    
+    $plot->setBarPadding(0.1, 0.1);
+    $plot->setBarSpace(5);
+    
+    $plot->barShadow->setSize(2);
+    $plot->barShadow->setPosition(Shadow::RIGHT_TOP);
+    $plot->barShadow->setColor(new Color(180, 180, 180, 10));
+    $plot->barShadow->smooth(TRUE);
+
+    $plot->label->set($statCreation);
+    $plot->label->move(0, -6);
+    $plot->label->setFont(new Tuffy(7));
+    $plot->label->setAngle(0);
+    $plot->label->setAlign(NULL, Label::TOP);
+    $plot->label->setPadding(3, 1, 0, 6);
+    $plot->label->setCallbackFunction("labelFormat");
+
+    $plot->setBarColor($colors[0]);    
+    $plot->setYAxis($axis[0]);
+
+    $group->legend->add($plot, "Packages creations", Legend::BACKGROUND);
+    $group->legend->setPosition(0.30, 0.15);
+    $group->legend->shadow->smooth(TRUE);
+    
+    $group->add($plot);
+
+	// Add the "updates" serie on the graphic
+    $plot = new BarPlot($statUpdate, 2, 2);
+    $plot->barBorder->setColor(new Color(0, 0, 0, 30));
+    
+    $plot->setBarPadding(0.1, 0.1);
+    $plot->setBarSpace(5);
+    
+    $plot->barShadow->setSize(2);
+    $plot->barShadow->setPosition(Shadow::RIGHT_TOP);
+    $plot->barShadow->setColor(new Color(180, 180, 180, 10));
+    $plot->barShadow->smooth(TRUE);
+
+    $plot->label->set($statUpdate);
+    $plot->label->move(0, -6);
+    $plot->label->setFont(new Tuffy(7));
+    $plot->label->setAngle(0);
+    $plot->label->setAlign(NULL, Label::TOP);
+    $plot->label->setPadding(3, 1, 0, 6);
+    $plot->label->setCallbackFunction("labelFormat");
+
+    $plot->setBarColor($colors[1]);    
+    $plot->setYAxis($axis[0]);
+    
+    $group->legend->add($plot, "Packages updates", Legend::BACKGROUND);
+    $group->add($plot);
+  
+	$group->axis->bottom->label->setCallbackFunction('setMonth');
+
+	$graph->add($group);
+	$graph->draw();
+?>


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.


More information about the devel mailing list