[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