<?php
/**
 * EGroupware - TimeSheet - setup table updates
 *
 * @link http://www.egroupware.org
 * @author Ralf Becker <RalfBecker-AT-outdoor-training.de>
 * @package timesheet
 * @subpackage setup
 * @copyright (c) 2005-14 by Ralf Becker <RalfBecker-AT-outdoor-training.de>
 * @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
 * @version $Id$
 */

function timesheet_upgrade0_1_001()
{
	$GLOBALS['egw_setup']->oProc->AddColumn('egw_timesheet','pl_id',array(
		'type' => 'int',
		'precision' => '4',
		'default' => '0'
	));

	return $GLOBALS['setup_info']['timesheet']['currentver'] = '0.2.001';
}


function timesheet_upgrade0_2_001()
{
	$GLOBALS['egw_setup']->oProc->CreateTable('egw_timesheet_extra',array(
		'fd' => array(
			'ts_id' => array('type' => 'int','precision' => '4','nullable' => False),
			'ts_extra_name' => array('type' => 'varchar','precision' => '32','nullable' => False),
			'ts_extra_value' => array('type' => 'varchar','precision' => '255','nullable' => False,'default' => '')
		),
		'pk' => array('ts_id','ts_extra_name'),
		'fk' => array(),
		'ix' => array(),
		'uc' => array()
	));

	return $GLOBALS['setup_info']['timesheet']['currentver'] = '0.2.002';
}


function timesheet_upgrade0_2_002()
{
	return $GLOBALS['setup_info']['timesheet']['currentver'] = '1.4';
}


function timesheet_upgrade1_4()
{
	// delete empty cf's generated by 1.4
	$GLOBALS['egw_setup']->db->delete('egw_timesheet_extra',"ts_extra_value=''",__LINE__,__FILE__,'timesheet');

	return $GLOBALS['setup_info']['timesheet']['currentver'] = '1.6';
}


function timesheet_upgrade1_6()
{
	$GLOBALS['egw_setup']->oProc->AddColumn('egw_timesheet','ts_status',array(
		'type' => 'int',
		'precision' => '4'
	));

	$GLOBALS['egw_setup']->oProc->CreateIndex('egw_timesheet','ts_status');

	return $GLOBALS['setup_info']['timesheet']['currentver'] = '1.7.001';
}


function timesheet_upgrade1_7_001()
{
	return $GLOBALS['setup_info']['timesheet']['currentver'] = '1.8';
}


function timesheet_upgrade1_8()
{
	return $GLOBALS['setup_info']['timesheet']['currentver'] = '1.9.001';
}


/**
 * Change titel and project title to varchar(255) to not loose content when creating a timesheet eg. from an InfoLog
 *
 * Change description to varchar(16384) to not force full table-scan on search
 *
 * @return string
 */
function timesheet_upgrade1_9_001()
{
	$GLOBALS['egw_setup']->oProc->AlterColumn('egw_timesheet','ts_project',array(
		'type' => 'varchar',
		'precision' => '255',
		'comment' => 'project title'
	));
	$GLOBALS['egw_setup']->oProc->AlterColumn('egw_timesheet','ts_title',array(
		'type' => 'varchar',
		'precision' => '255',
		'nullable' => False,
		'comment' => 'title of the timesheet entry'
	));
	// change description to varchar(16384), if there is no longer content already
	$max_description_length = $GLOBALS['egw']->db->query('SELECT MAX(CHAR_LENGTH(ts_description)) FROM egw_timesheet')->fetchColumn();
	// returns NULL, if there are no rows!
	if ((int)$max_description_length <= 16384 && $GLOBALS['egw_setup']->oProc->max_varchar_length >= 16384)
	{
		$GLOBALS['egw_setup']->oProc->AlterColumn('egw_timesheet','ts_description',array(
			'type' => 'varchar',
			'precision' => '16384',
			'comment' => 'description of the timesheet entry'
		));
	}
	return $GLOBALS['setup_info']['timesheet']['currentver'] = '1.9.002';
}


function timesheet_upgrade1_9_002()
{
	// switch history / delete prevention on, like for new installs, so only admins can finally delete timesheets
	config::save_value('history', 'history', 'timesheet');

	return $GLOBALS['setup_info']['timesheet']['currentver'] = '14.1';
}