#!/usr/bin/env php
<?php
/**
 * @package Newscoop
 *
 * @author Mugur Rus <mugur.rus@gmail.com>
 * @copyright 2008 MDLF, Inc.
 * @license http://www.gnu.org/licenses/gpl.txt
 * @version $Revision$
 * @link http://www.campware.org
 */

require_once dirname(__FILE__) . '/newscoop_bootstrap.php';

function clean_statistics($p_confDir)
{
    db_connect($p_confDir);

    $sessionDiff = 3600 * 48;
    $requestTimeDiff = 3600;
    // select sections older than 48 hours
    $sql = 'SELECT ss.id, TIME_TO_SEC(TIMEDIFF(NOW(), ss.start_time)) AS session_time_diff,'
        . ' MIN(TIME_TO_SEC(TIMEDIFF(NOW(), rq.last_request_time))) AS last_update_diff'
        . ' FROM Sessions AS ss LEFT JOIN Requests AS rq ON ss.id = rq.session_id'
        . " WHERE TIME_TO_SEC(TIMEDIFF(NOW(), ss.start_time)) >= $sessionDiff GROUP BY ss.id";
    $sessRes = mysql_query($sql);
    if (empty($sessRes)) {
        return;
    }

    while ($sessRow = mysql_fetch_array($sessRes, MYSQL_ASSOC)) {
        if ($sessRow['last_update_diff'] < $requestTimeDiff) {
            // if there was a request for this session less than one hour ago
            // do not process the session
            continue;
        }

        // delete the session requests
        $sql = "DELETE FROM Requests WHERE session_id = '" . mysql_escape_string($sessRow['Id']) . "'";
        mysql_query($sql);

        // delete the session
        $sql = "DELETE FROM Sessions WHERE id = '" . mysql_escape_string($sessRow['Id']) . "'";
        mysql_query($sql);
    }
}


function db_connect($p_conf_dir)
{
    is_valid_conf_dir($p_conf_dir);

    require_once($p_conf_dir . '/database_conf.php');
    mysql_connect($Campsite['DATABASE_SERVER_ADDRESS'],
                  $Campsite['DATABASE_USER'],
                  $Campsite['DATABASE_PASSWORD']) or
        die('Could not connect: ' . mysql_error());
    mysql_select_db($Campsite['DATABASE_NAME']);
    mysql_query("SET NAMES 'utf8'");
}


function is_valid_conf_dir($p_conf_dir)
{
    try {
        if (!is_dir($p_conf_dir)) {
            throw new Exception('Invalid configuration directory ' . $p_conf_dir);
        }
        return true;
    } catch (Exception $e) {
        print('Error: ' . $e->getMessage() . "\n");
        exit(1);
    }
}


// runs the script
clean_statistics(WWW_DIR . '/conf');
