<?php
/*
 * Gallery - a web based photo album viewer and editor
 * Copyright (C) 2000-2008 Bharat Mediratta
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or (at
 * your option) any later version.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA  02110-1301, USA.
 */

/**
 * A set of helper methods for adding entries to the event log.
 *
 * @package GalleryCore
 * @subpackage Helpers
 * @author Bharat Mediratta <bharat@menalto.com>
 * @version $Revision: 17580 $
 * @static
 */
class GalleryEventLogHelper_medium {

    /**
     * @see GalleryCoreApi::addEventLogEntry
     */
    function addEventLogEntry($type, $summary, $details) {
	global $gallery;
	$phpVm = $gallery->getPhpVm();
	$storage =& $gallery->getStorage();
	$urlGenerator =& $gallery->getUrlGenerator();

	/** @todo make the log size configurable */
	$logSize = 1000;

	/*
	 * We update the event log table in a round robin fashion so that we have a max of
	 * $logSize rows at any given time.  When a new row comes in, first try overwriting an
	 * existing row, and if that fails because the row didn't exist, insert a new row.
	 */

	list ($ret, $sequenceId) = $storage->getUniqueId(DATABASE_SEQUENCE_EVENT_LOG);
	if ($ret) {
	    return $ret;
	}
	$id = $sequenceId % $logSize;

	$requestVariables = GalleryUtilities::getAllRequestVariables();
	if (!empty($requestVariables)) {
	    $details .= "\nRequest variables: " . print_r($requestVariables, true);
	}

	$rowData = array(
	    'userId' => $gallery->getActiveUserId(),
	    'type' => $type,
	    'summary' => $summary,
	    'details' => $details,
	    'location' => $urlGenerator->getCurrentUrl(),
	    'client' => GalleryUtilities::getRemoteHostAddress(),
	    'timestamp' => $phpVm->time(),
	    'referer' => GalleryUtilities::getServerVar('HTTP_REFERER'));

	$ret = GalleryCoreApi::updateMapEntry(
	    'EventLogMap', array('id' => $id), $rowData, true);
	if ($ret) {
	    return $ret;
	}

	list ($ret, $affectedRows) = $storage->getAffectedRows(true);
	if ($ret) {
	    return $ret;
	}

	if ($affectedRows == 0) {
	    $rowData['id'] = $id;
	    $ret = GalleryCoreApi::addMapEntry('EventLogMap', $rowData, true);
	    if ($ret) {
		return $ret;
	    }
	}

	return null;
    }
}
?>
