]> git.sur5r.net Git - bacula/bacula/blobdiff - gui/bacula-web/bweb.inc.php
bacula-web: Removed useless .gitignore file in main folder
[bacula/bacula] / gui / bacula-web / bweb.inc.php
index 8ff3eb90f3d69c2e2f3af7b8691fd7bd62379b8f..d57090bedbe6fea1c0f5e2461c143127b4c2bb47 100644 (file)
 | GNU General Public License for more details.                            |
 +-------------------------------------------------------------------------+ 
 */
-// Last Err: 11
-define('CONFIG_DIR', "configs");
-define('CONFIG_FILE', "bacula.conf");
-define('BACULA_TYPE_BYTES_FILES', 1);
-define('BACULA_TYPE_FILES_JOBID', 2);
-define('BACULA_TYPE_BYTES_ENDTIME_ALLJOBS', 69);
-
-require_once "paths.php";
-require_once "DB.php";                                                                                                                  // Pear DB
 require_once "config.inc.php";
-require_once "bgraph.inc.php";
-require_once($smarty_path."Config_File.class.php");
-
-if (!function_exists('array_fill')) {                                                                                   // For PHP < 4.2.0 users 
-    require_once('array_fill.func.php');
-}
 
 class Bweb extends DB {
 
@@ -39,6 +24,7 @@ class Bweb extends DB {
        var $dbs;
        var $dbs_name;
        
+       public $tpl;
        public $db_link;                                                // Database link
        private $db_dsn;                                                // Data Source Name
        
@@ -52,50 +38,10 @@ class Bweb extends DB {
                
                // Loading configuration
                $this->config_file = getcwd() . '/configs/bacula.conf';
+               
                if( !$this->load_config() )
                        die( "Unable to load configuration");
                        
-               //echo "Number of catalog defined " . count($this->catalogs) . "<br />";
-               
-               /*
-               $conf = new Config_File (CONFIG_DIR);
-               $this->dbs = array();
-
-               $i = 2;
-               $sections = $conf->get(CONFIG_FILE,"DATABASE","host");
-               array_push($this->dbs, "DATABASE");
-
-               while ( !empty($sections) ) {                
-                       $sections = $conf->get(CONFIG_FILE,"DATABASE".$i,"host");
-                       if ( !empty($sections) )
-                               array_push($this->dbs,"DATABASE".$i);
-                       $i++;
-               }
-
-               if ( $i < 4)
-                       $sec = "DATABASE";
-               else {
-                       if ( !empty($_POST['sel_database']) ) {
-                               $_SESSION['DATABASE'] = $_POST['sel_database'];
-                               $sec = $_POST['sel_database'];
-                       } else {
-                               if (isset($_SESSION['DATABASE']) )
-                                       $sec = $_SESSION['DATABASE'];
-                               else
-                                       $sec = "DATABASE";
-                       }
-               }
-
-        $this->dsn['hostspec'] = $conf->get(CONFIG_FILE,$sec,"host");
-        $this->dsn['username'] = $conf->get(CONFIG_FILE,$sec,"login");
-        $this->dsn['password'] = $conf->get(CONFIG_FILE,$sec,"pass");
-        $this->dsn['database'] = $conf->get(CONFIG_FILE,$sec,"db_name");
-        $this->dsn['phptype']  = $conf->get(CONFIG_FILE,$sec,"db_type");   // mysql, pgsql
-        
-               if (  $conf->get(CONFIG_FILE,$sec,"db_port") )
-                       $this->dsn[port] = $conf->get(CONFIG_FILE,$sec,"db_port");
-               */
-               
                // Construct a valid dsn
         $this->db_dsn['hostspec'] = $this->catalogs[0]["host"];
         $this->db_dsn['username'] = $this->catalogs[0]["login"];
@@ -113,9 +59,51 @@ class Bweb extends DB {
             register_shutdown_function(array(&$this,'close'));
                        $this->dbs_name = $this->db_dsn['database'];
                }
+               
+               // Initialize smarty template classe
+               $this->init_tpl();
+               // Initialize smarty gettext function
+               $this->init_gettext();
        }
                 
-    function load_config()
+    // Initialize Smarty template classe
+       function init_tpl()
+       {
+               $this->tpl = new Smarty();
+               
+               $this->tpl->compile_check       = true;
+               $this->tpl->debugging           = false;
+               $this->tpl->force_compile       = true;
+
+               $this->tpl->template_dir        = "./templates";
+               $this->tpl->compile_dir         = "./templates_c";
+               $this->tpl->config_dir          = "./configs";
+       }
+       
+       function init_gettext()
+       {
+               global $smarty_gettext_path;
+               
+               if ( function_exists("gettext") ) {
+                       require_once( BW_SMARTY_GETTEXT . "smarty_gettext.php" );     
+                       $this->tpl->register_block('t','smarty_translate');
+        
+                       $language = $this->get_config_param("lang");
+                       $domain = "messages";   
+                       putenv("LANG=$language"); 
+                       setlocale(LC_ALL, $language);
+                       bindtextdomain($domain,"./locale");
+                       textdomain($domain);
+               }
+               else {
+                       function smarty_translate($params, $text, &$smarty) {
+                return $text;
+                       }
+                       $smarty->register_block('t','smarty_translate');
+               }
+       }
+       
+       function load_config()
        {
                $this->config = parse_ini_file( $this->config_file, true );
                
@@ -218,33 +206,35 @@ class Bweb extends DB {
                
                function GetDbSize() 
                {
-                       $database_size = 0;
-                       if ( $this->driver == "mysql") {
-                               $dbsize = $this->db_link->query("show table status") or die ("classes.inc: Error query: 3");
-                               
-                               if ( $dbsize->numRows() ) {
-                                       while ( $res = $dbsize->fetchRow(DB_FETCHMODE_ASSOC) )
-                                               $database_size += $res["Data_length"];
-                } else {
-                                       return 0;
-                               } // end if else
-            } // end if
-            else if ( $this->driver == "pgsql") {
-                               $dbsize = $this->db_link->query("select pg_database_size('$this->dbs_name')") or die ("classes.inc: Error query: 4");
-                               
-                               if (PEAR::isError($dbsize))
-                                       die($dbsize->getMessage());
-                    
-                               if ( $dbsize->numRows() ) {
-                                       while ( $res = $dbsize->fetchRow() )
-                                               $database_size += $res[0];
-                } else {
-                                       return 0;
-                               }
-            } // end if       
-                               
-                       $dbsize->free();
-               
+                       $database_size  = 0;
+                       $query                  = "";
+                       
+                       switch( $this->driver )
+                       {
+                               case 'mysql':
+                                       $query  = "SELECT table_schema AS 'database', sum( data_length + index_length) AS 'dbsize' ";
+                                       $query .= "FROM information_schema.TABLES ";
+                                       $query .= "WHERE table_schema = 'bacula' ";
+                                       $query .= "GROUP BY table_schema";
+                               break;
+                               case 'pgsql':
+                                       $query  = "SELECT pg_database_size('bacula') AS dbsize";
+                               break;
+                               case 'sqlite':
+                                       // Not yet implemented
+                                       return "0 MB";
+                               break;
+                       }
+                       
+                       $result = $this->db_link->query( $query );
+                       
+                       if(! PEAR::isError( $result ) )
+                       {
+                               $db = $result->fetchRow( DB_FETCHMODE_ASSOC );
+                               $database_size =+ $db['dbsize'];
+                       }else
+                               die( "Unable to get database size<br />" . $jobs->getMessage() );
+                       
                        return $this->human_file_size( $database_size );  
         } // end function GetDbSize()
                
@@ -277,11 +267,6 @@ class Bweb extends DB {
                                        switch( $this->driver )
                                        {
                                                case 'mysql':
-/*
-                                                       $query  = "SELECT Media.VolumeName, Media.VolBytes, Media.VolStatus, Pool.Name, Media.MediaType,Media.LastWritten, FROM_UNIXTIME(UNIX_TIMESTAMP(Media.LastWritten)+Media.VolRetention ) AS expire 
-                                                                          FROM Pool LEFT JOIN Media ON Media.PoolId=Pool.PoolId WHERE poolid='$pool[0]' 
-                                                                          ORDER BY Media.VolumeName";
-*/
                                                        $query  = "SELECT Media.volumename, Media.volbytes, Media.volstatus, Media.mediatype, Media.lastwritten, Media.volretention
                                                                           FROM Media LEFT JOIN Pool ON Media.poolid = Pool.poolid
                                                                       WHERE Media.poolid = '". $pool['poolid'] . "' ORDER BY Media.volumename";
@@ -290,11 +275,6 @@ class Bweb extends DB {
                                                        $query  = "SELECT media.volumename, media.volbytes, media.volstatus, media.mediatype, media.lastwritten, media.volretention
                                                                           FROM media LEFT JOIN pool ON media.poolid = pool.poolid
                                                                       WHERE media.poolid = '". $pool['poolid'] . "' ORDER BY media.volumename";
-                                                       /*
-                                                       $query  = "SELECT Media.VolumeName, Media.VolBytes,Media.VolStatus,Pool.Name,Media.MediaType,Media.LastWritten, Media.LastWritten + Media.VolRetention * interval '1 second' AS expire 
-                                                                          FROM Pool LEFT JOIN Media ON media.poolid=pool.poolid WHERE poolid='$pool[0]' 
-                                                                          ORDER BY Media.VolumeName";
-                                                       */
                                                break;
                                                case 'sqlite':
                                                        $query  = "";           // not yet implemented
@@ -303,7 +283,6 @@ class Bweb extends DB {
                                                break;
                                        } // end switch
                                        
-                                       //$this->db_link->setFetchMode(DB_FETCHMODE_ASSOC);
                                        $medias = $this->db_link->query( $query );
 
                                        if( PEAR::isError( $medias ) ) {
@@ -334,12 +313,16 @@ class Bweb extends DB {
                                                                                }
                                                                                // Media used bytes in a human format
                                                                                $media['volbytes'] = $this->human_file_size( $media['volbytes'] );
-                                                                               //echo "volume " . $media['volumename'] . 'vol bytes' .$media['volbytes'] . '<br />';
                                                                        } else {
                                                                                $media['lastwritten'] = "N/A";
                                                                                $media['expire']      = "N/A";
                                                                                $media['volbytes']        = "0 KB";
                                                                        }                                                               
+                                                               
+                                                               // Odd or even row
+                                                               if( count(  $volumes[ $pool['name'] ] ) % 2)
+                                                                       $media['class'] = 'odd';
+
                                                                // Add the media in pool array
                                                                array_push( $volumes[ $pool['name']], $media);
                                                        }
@@ -349,69 +332,80 @@ class Bweb extends DB {
                                return $volumes;
         } // end function GetVolumeList()
                
-               public function GetLastJobs( $delay = LAST_DAY )
+               public function CountJobsbyLevel( $delay = LAST_DAY, $level = 'F' )
                {
-                       $query          = "";
-                       $start_date = "";
-                       $end_date       = "";
+                       $end_date    = mktime();
+                       $start_date  = $end_date - $delay;
                        
-                       // Interval calculation
-                       $end_date   = mktime();
-                       $start_date = $end_date - $delay;
+                       $start_date  = date( "Y-m-d H:i:s", $start_date );
+                       $end_date    = date( "Y-m-d H:i:s", $end_date );
                        
-                       $start_date = date( "Y-m-d H:m:s", $start_date );
-                       $end_date   = date( "Y-m-d H:m:s", $end_date );
+                       $query   = "SELECT COUNT(JobId) as jobs FROM Job ";
+                       $query  .= "WHERE (EndTime BETWEEN '$start_date' AND '$end_date') AND ";
+                       $query  .= "Level = '$level' ";
                        
-                       switch( $this->driver )
-                       {
-                               case 'mysql':
-                                       $query  = 'SELECT COUNT(JobId) AS completed_jobs ';
-                                       $query .= 'FROM Job ';
-                                       $query .= "WHERE EndTime BETWEEN '$start_date' AND '$end_date' ";
-                                       $query .= "AND JobStatus = 'T'";
-                               break;
-                       }
-               
-                       $jobs = $this->db_link->query( $query );
-               
-                       if (PEAR::isError( $jobs ) ) {
-                               die( "Unable to get last completed jobs status from catalog<br />" . $status->getMessage() );
+                       $result  = $this->db_link->query( $query );
+                       
+                       if (PEAR::isError( $result ) ) {
+                               die( "Unable to get number of jobs with $level status from catalog <br />" . $result->getMessage() );
                        }else {
-                               return $jobs->fetchRow( DB_FETCHMODE_ASSOC );
+                               $jobs = $result->fetchRow( DB_FETCHMODE_ASSOC ); 
+                               return $jobs['jobs'];
                        }
-               } // end function GetLastJobStatus()
+                       
+               }
                
-               public function GetLastErrorJobs( $delay = LAST_DAY )
+               public function CountJobs( $delay = LAST_DAY, $status = 'any' )
                {
-                       $query          = "";
+                       $query                  = "SELECT COUNT(JobId) AS job_nb FROM Job ";
+                       $where_delay    = "";
+                       $where_status   = "";
                        
-                       // Interval calculation
-                       $end_date   = mktime();
-                       $start_date = $end_date - $delay;
+                       // Interval condition for SQL query
+                       if( $delay != ALL ) {
+                               $end_date    = mktime();
+                               $start_date  = $end_date - $delay;
                        
-                       $start_date = date( "Y-m-d H:m:s", $start_date );
-                       $end_date   = date( "Y-m-d H:m:s", $end_date );
+                               $start_date  = date( "Y-m-d H:i:s", $start_date );
+                               $end_date    = date( "Y-m-d H:i:s", $end_date );
                        
-                       //echo "start date: $start_date <br />";
-                       //echo "end date: $end_date <br />";
+                               $where_delay = "WHERE EndTime BETWEEN '$start_date' AND '$end_date' ";
+                       }
                        
-                       switch( $this->driver )
-                       {
-                               default:
-                                       $query  = 'SELECT COUNT(JobId) AS failed_jobs ';
-                                       $query .= 'FROM Job ';
-                                       $query .= "WHERE EndTime BETWEEN '$start_date' AND '$end_date' ";
-                                       $query .= "AND JobStatus = 'f'";
-                               break;
-                       }                               
-                       $result = $this->db_link->query( $query );
+                       if( $status != 'any' ) {
+                               switch( $status )
+                               {
+                                       case 'completed':
+                                               $where_status = "JobStatus = 'T' ";
+                                       break;
+                                       case 'failed':
+                                               $where_status = "JobStatus IN ('f','E') ";
+                                       break;
+                                       case 'canceled':
+                                               $where_status = "JobStatus = 'A' ";
+                                       break;
+                                       case 'waiting':
+                                               $where_status = "JobStatus IN ('F','S','M','m','s','j','c','d','t') ";
+                                       break;
+                               } // end switch
+                       }
                        
-                       if (PEAR::isError( $result ) ) {
-                               die( "Unable to get last failed jobs status from catalog<br />query = $query <br />" . $result->getMessage() );
+                       if( !empty($where_delay) )
+                               $query = $query . $where_delay . 'AND ' . $where_status;
+                       else {
+                               if( !empty($where_status) )
+                                       $query = $query . 'WHERE ' . $where_status;
+                       }
+                               
+                       $jobs = $this->db_link->query( $query );
+               
+                       if (PEAR::isError( $jobs ) ) {
+                               die( "Unable to get last $status jobs number from catalog <br />" . $jobs->getMessage() );
                        }else {
-                               return $result->fetchRow( DB_FETCHMODE_ASSOC );
-                       } // end if else
-               } // end function GetLastErrorJobs
+                               $jobs = $jobs->fetchRow( DB_FETCHMODE_ASSOC ); 
+                               return $jobs['job_nb'];
+                       }
+               }
                
                // Return the list of Pools in a array
                public function Get_Pools_List()
@@ -450,6 +444,27 @@ class Bweb extends DB {
                        }
                }
                
+               // Return elasped time string for a job
+               function Get_ElapsedTime( $start_time, $end_time ) 
+               { 
+                       $diff = $end_time - $start_time;
+                       
+                       $daysDiff = sprintf("%02d", floor($diff/60/60/24) );
+                       $diff -= $daysDiff*60*60*24;
+                       
+                       $hrsDiff = sprintf("%02d", floor($diff/60/60) );
+                       $diff -= $hrsDiff*60*60;
+                       
+                       $minsDiff = sprintf("%02d", floor($diff/60) );
+                       $diff -= $minsDiff*60;
+                       $secsDiff = sprintf("%02d", $diff );
+                       
+                       if( $daysDiff > 0 )
+                               return $daysDiff . 'day(s) ' . $hrsDiff.':' . $minsDiff . ':' . $secsDiff;
+                       else
+                               return $hrsDiff . ':' . $minsDiff . ':' . $secsDiff;
+               }
+               
                public function Get_ElapsedTime_Job( $delay = LAST_DAY )
                {
                        $query                  = "";
@@ -459,8 +474,8 @@ class Bweb extends DB {
                        $end_date   = mktime();
                        $start_date = $end_date - $delay;
                        
-                       $start_date = date( "Y-m-d H:m:s", $start_date );
-                       $end_date   = date( "Y-m-d H:m:s", $end_date );
+                       $start_date = date( "Y-m-d H:i:s", $start_date );
+                       $end_date   = date( "Y-m-d H:i:s", $end_date );
                        
                        switch( $this->driver )
                        {
@@ -479,10 +494,10 @@ class Bweb extends DB {
                                        $total_elapsed += $time['elapsed'];
                                }
                                // Verify if elapsed time is more than 1 day
-                               if ( $total_elapsed > 86400 ) {
-                                       return gmstrftime("%d days %H:%M:%S", $total_elapsed );
+                               if ( $total_elapsed > LAST_DAY ) {
+                                       return date("%d days H:i:s", $total_elapsed );
                                }else {
-                                       return gmstrftime("%H:%M:%S", $total_elapsed );
+                                       return date("H:i:s", $total_elapsed );
                                }
                        }
                }
@@ -504,47 +519,50 @@ class Bweb extends DB {
                        $end_date   = mktime();
                        $start_date = $end_date - $delay;
                        
-                       $start_date = date( "Y-m-d H:m:s", $start_date );
-                       $end_date   = date( "Y-m-d H:m:s", $end_date );
+                       $start_date = date( "Y-m-d H:i:s", $start_date );
+                       $end_date   = date( "Y-m-d H:i:s", $end_date );
+                       
+                       $interval_where = "(EndTime BETWEEN '$start_date' AND '$end_date') AND ";
                        
                        // Job status
                        switch( $type )
                        {
                                case 'completed':
-                                       $where = "AND JobStatus = 'T' ";
+                                       $where = $interval_where . "JobStatus = 'T' ";
                                        $label = "Completed";
                                break;
-                               case 'completed_errors':
-                                       $where = "AND JobStatus = 'E' ";
-                                       $label = "Completed with errors";
+                               case 'terminated_errors':
+                                       $where = $interval_where . "JobStatus = 'E' ";
+                                       $label = "Terminated with errors";
                                break;
                                case 'failed':
-                                       $where = "AND JobStatus = 'f' ";
+                                       $where = $interval_where . "JobStatus = 'f' ";
                                        $label = "Failed";
                                break;
                                case 'waiting':
-                                       $where = "AND JobStatus IN ('F','S','M','m','s','j','c','d','t') ";
+                                       $where = "JobStatus IN ('F','S','M','m','s','j','c','d','t') ";
                                        $label = "Waiting";
                                break;
                                case 'created':
-                                       $where = "AND JobStatus = 'C' ";
+                                       $where = "JobStatus = 'C' ";
                                        $label = "Created but not running";
                                break;
                                case 'running':
-                                       $where = "AND JobStatus = 'R' ";
+                                       $where = "JobStatus = 'R' ";
                                        $label = "Running";
                                break;
                                case 'error':
-                                       $where = "AND JobStatus IN ('e','f') ";
+                                       $where = $interval_where . "JobStatus IN ('e','f') ";
                                        $label = "Errors";
                                break;
                        }
                        
                        $query  = 'SELECT COUNT(JobId) AS ' . $type . ' ';
                        $query .= 'FROM Job ';
-                       $query .= "WHERE EndTime BETWEEN '$start_date' AND '$end_date' ";
-                       $query .= $where;
+                       $query .= "WHERE $where ";
                
+                       //echo 'query = ' . $query . '<br />';
+                       
                        $jobs = $this->db_link->query( $query );
                
                        if (PEAR::isError( $jobs ) ) {
@@ -573,19 +591,32 @@ class Bweb extends DB {
                        }
                }
                
-               public function GetStoredFiles()
+               public function GetStoredFiles( $delay = LAST_DAY )
                {
-                       $nbfiles = 0;
-                       $query = "SELECT COUNT(FilenameId) AS nbfiles FROM Filename";
+                       $totalfiles = 0;
+
+                       $query = "SELECT SUM(JobFiles) AS stored_files FROM Job ";
+                       
+                       // Interval calculation
+                       $end_date   = mktime();
+                       $start_date = $end_date - $delay;
+                       
+                       $start_date = date( "Y-m-d H:i:s", $start_date );
+                       $end_date   = date( "Y-m-d H:i:s", $end_date );                 
+
+                       if( $delay != ALL )
+                               $query .= "WHERE EndTime BETWEEN '$start_date' AND '$end_date'";
+                               
                        $result = $this->db_link->query( $query );
                        
                        if( !PEAR::isError($result) ) {
-                               $nbfiles = $result->fetchRow(DB_FETCHMODE_ASSOC);
-                               $nbfiles = $nbfiles['nbfiles'];
+                               $nbfiles        = $result->fetchRow(DB_FETCHMODE_ASSOC);
+                               $totalfiles = $totalfiles + $nbfiles['stored_files'];
                        }else{
-                               die("Unable to get protected files from catalog");
+                               die("Unable to get protected files from catalog <br />" . $result->getMessage() );
                        }
-                       return $nbfiles;
+                       
+                       return $totalfiles;
                }
                
                public function GetStoredBytes( $delay = LAST_DAY )
@@ -596,12 +627,11 @@ class Bweb extends DB {
                        $end_date   = mktime();
                        $start_date = $end_date - $delay;
                        
-                       $start_date = date( "Y-m-d H:m:s", $start_date );
-                       $end_date   = date( "Y-m-d H:m:s", $end_date );
+                       $start_date = date( "Y-m-d H:i:s", $start_date );
+                       $end_date   = date( "Y-m-d H:i:s", $end_date );
                        
-                       if( $delay != ALL ) {
+                       if( $delay != ALL )
                                $query .= "WHERE EndTime BETWEEN '$start_date' AND '$end_date'";
-                       }
                        
                        $result = $this->db_link->query( $query );
                        
@@ -624,7 +654,7 @@ class Bweb extends DB {
                                $stored_bytes = 0;
                                $tmp = $result->fetchRow( DB_FETCHMODE_ASSOC );
                                
-                               $day = date( "d/m", strtotime($end_date) );
+                               $day = date( "D d", strtotime($end_date) );
                                
                                if( isset( $tmp['stored_bytes'] ) ) {
                                        $hbytes = $this->human_file_size( $tmp['stored_bytes'], 3, 'GB');
@@ -635,5 +665,52 @@ class Bweb extends DB {
                                return array( $day, $stored_bytes );
                        }
                }
+               
+               public function GetStoredBytesByJob( $jobname, $start_date, $end_date )
+               {
+                       $query  = "SELECT SUM(JobBytes) as stored_bytes, EndTime FROM Job ";
+                       $query .= "WHERE ( EndTime BETWEEN '$start_date' AND '$end_date' ) AND ";
+                       $query .= "Name = '$jobname'";
+                       
+                       $result = $this->db_link->query( $query );
+                       
+                       if( PEAR::isError( $result ) ) {
+                               die( "Unable to get Job Bytes from catalog" );
+                       }else{
+                               $stored_bytes = 0;
+                               $tmp = $result->fetchRow( DB_FETCHMODE_ASSOC );
+                               
+                               $day = date( "D d", strtotime($end_date) );
+                               
+                               if( isset( $tmp['stored_bytes'] ) ) {
+                                       $hbytes = $this->human_file_size( $tmp['stored_bytes'], 3, 'GB');
+                                       $hbytes = explode( " ", $hbytes );
+                                       $stored_bytes = $hbytes[0];
+                               }
+                               
+                               return array( $day, $stored_bytes );
+                       }                       
+               }
+               
+               public function GetStoredFilesByJob( $jobname, $start_date, $end_date )
+               {
+                       $query  = "SELECT SUM(JobFiles) as stored_files, EndTime FROM Job ";
+                       $query .= "WHERE ( EndTime BETWEEN '$start_date' AND '$end_date' ) AND ";
+                       $query .= "Name = '$jobname'";
+                       
+                       $result = $this->db_link->query( $query );
+                       
+                       if( PEAR::isError( $result ) ) {
+                               die( "Unable to get Job Files from catalog" );
+                       }else{
+                               $stored_bytes = 0;
+                               $tmp = $result->fetchRow( DB_FETCHMODE_ASSOC );
+                               
+                               $day                    = date( "D d", strtotime($end_date) );
+                               $stored_files   = $tmp['stored_files'];
+                               
+                               return array( $day, $stored_files );
+                       }                       
+               }
 } // end class Bweb
 ?>