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

use EGroupware\Api;

$GLOBALS['egw_info'] = array(
	'flags' => array(
		'noheader' => True,
		'nonavbar' => True,
		'currentapp' => 'home',
		'noapi' => True
));
include('./inc/functions.inc.php');

/* Check header and authentication */
if(!$GLOBALS['egw_setup']->auth('Config'))
{
	Header('Location: index.php');
	exit;
}
// Does not return unless user is authorized

$tpl_root = $GLOBALS['egw_setup']->html->setup_tpl_dir('setup');
$setup_tpl = CreateObject('phpgwapi.Template',$tpl_root);

$cancel   = $_REQUEST['cancel'];
if($cancel)
{
	Header('Location: applications.php');
	exit;
}
$apps     = $_REQUEST['apps'];
$download = $_REQUEST['download'];
$submit   = $_REQUEST['submit'];
$showall  = $_REQUEST['showall'];
$appname  = $_REQUEST['appname'];
if($download)
{
	$setup_tpl->set_file(array(
		'sqlarr'   => 'arraydl.tpl'
	));
	$setup_tpl->set_var('idstring',"/* \$Id" . ": tables_current.inc.php" . ",v 1.0" . " 2001/05/28 08:42:04 username " . "Exp \$ */");
	$setup_tpl->set_block('sqlarr','sqlheader','sqlheader');
	$setup_tpl->set_block('sqlarr','sqlbody','sqlbody');
	$setup_tpl->set_block('sqlarr','sqlfooter','sqlfooter');
}
else
{
	$setup_tpl->set_file(array(
		'T_head' => 'head.tpl',
		'T_footer' => 'footer.tpl',
		'T_alert_msg' => 'msg_alert_msg.tpl',
		'T_login_main' => 'login_main.tpl',
		'T_login_stage_header' => 'login_stage_header.tpl',
		'T_setup_main' => 'schema.tpl',
		'applist'  => 'applist.tpl',
		'sqlarr'   => 'sqltoarray.tpl',
		'T_head'   => 'head.tpl',
		'T_footer' => 'footer.tpl'
	));
	$setup_tpl->set_block('T_login_stage_header','B_multi_domain','V_multi_domain');
	$setup_tpl->set_block('T_login_stage_header','B_single_domain','V_single_domain');
	$setup_tpl->set_block('T_setup_main','header','header');
	$setup_tpl->set_block('applist','appheader','appheader');
	$setup_tpl->set_block('applist','appitem','appitem');
	$setup_tpl->set_block('applist','appfooter','appfooter');
	$setup_tpl->set_block('sqlarr','sqlheader','sqlheader');
	$setup_tpl->set_block('sqlarr','sqlbody','sqlbody');
	$setup_tpl->set_block('sqlarr','sqlfooter','sqlfooter');
}

$GLOBALS['egw_setup']->loaddb();

function parse_vars($table,$term)
{
	$GLOBALS['setup_tpl']->set_var('table', $table);
	$GLOBALS['setup_tpl']->set_var('term',$term);

	list($arr,$pk,$fk,$ix,$uc) = $GLOBALS['egw_setup']->process->sql_to_array($table);
	$GLOBALS['setup_tpl']->set_var('arr',$arr);

	foreach(array('pk','fk','ix','uc') as $kind)
	{
		$GLOBALS['setup_tpl']->set_var($kind.'s',_arr2str($$kind));
	}
	unset($pk,$fk,$ix,$uc);
}

function _arr2str($arr)
{
	if(!is_array($arr)) return $arr;

	$str = '';
	foreach($arr as $key => $val)
	{
		if($str) $str .= ',';

		if(!is_int($key))
		{
			$str .= "'$key' => ";
		}
		$str .= is_array($val) ? 'array('._arr2str($val).')' : "'$val'";
	}
	return $str;
}

function printout($template)
{
	$download = $_REQUEST['download'];
	$appname  = $_REQUEST['appname'];
	$showall  = $_REQUEST['showall'];
	$apps     = $GLOBALS['apps'] ? $GLOBALS['apps'] : '';

	if($download)
	{
		$GLOBALS['setup_tpl']->set_var('appname',$appname);
		$GLOBALS['setup_tpl']->set_var('apps',$apps);
		$string = $GLOBALS['setup_tpl']->parse('out',$template);
	}
	else
	{
//			$url = $GLOBALS['appname'] ? 'applications.php' : 'sqltoarray.php';
		$GLOBALS['setup_tpl']->set_var('appname',$appname);
		$GLOBALS['setup_tpl']->set_var('lang_download',lang('Download'));
		$GLOBALS['setup_tpl']->set_var('lang_cancel',lang('Cancel'));
		$GLOBALS['setup_tpl']->set_var('showall',$showall);
		$GLOBALS['setup_tpl']->set_var('apps',$apps);
		$GLOBALS['setup_tpl']->set_var('action_url','sqltoarray.php');
		$GLOBALS['setup_tpl']->pfp('out',$template);
	}
	return $string;
}

function download_handler($dlstring,$fn='tables_current.inc.php')
{
	Api\Header\Content::type($fn);
	echo $dlstring;
	exit;
}

if($submit || $showall)
{
	$dlstring = '';
	$term = '';

	if(!$download)
	{
		$GLOBALS['egw_setup']->html->show_header();
	}

	if($showall)
	{
		$table = $appname = '';
	}

	if(!$table && !$appname)
	{
		$term = ',';
		$dlstring .= printout('sqlheader');

		$GLOBALS['egw_setup']->db->connect();
		foreach($GLOBALS['egw_setup']->db->Link_ID->MetaTables() as $table)
		{
			parse_vars($table,$term);
			$dlstring .= printout('sqlbody');
		}
		$dlstring .= printout('sqlfooter');

	}
	elseif($appname)
	{
		$dlstring .= printout('sqlheader');
		$term = ',';

		if(!$setup_info[$appname]['tables'])
		{
			$f = EGW_SERVER_ROOT . '/' . $appname . '/setup/setup.inc.php';
			if(file_exists($f))
			{
				include($f);
			}
		}

		//$tables = explode(',',$setup_info[$appname]['tables']);
		$tables = $setup_info[$appname]['tables'];
		$i = 0;
		$tbls = count($tables);
		foreach($tables as $key => $table)
		{
			$i++;
			if($i == $tbls)
			{
				$term = '';
			}
			parse_vars($table,$term);
			$dlstring .= printout('sqlbody');
			/* $i++; */
		}
		$dlstring .= printout('sqlfooter');
	}
	elseif($table)
	{
		$term = ';';
		parse_vars($table,$term);
		$dlstring .= printout('sqlheader');
		$dlstring .= printout('sqlbody');
		$dlstring .= printout('sqlfooter');
	}
	if($download)
	{
		download_handler($dlstring);
	}
}
else
{
	$GLOBALS['egw_setup']->html->show_header();

	$setup_tpl->set_var('action_url','sqltoarray.php');
	$setup_tpl->set_var('lang_submit','Show selected');
	$setup_tpl->set_var('lang_showall','Show all');
	$setup_tpl->set_var('title','SQL to schema_proc array util');
	$setup_tpl->set_var('lang_applist','Applications');
	$setup_tpl->set_var('select_to_download_file',lang('Select to download file'));
	$setup_tpl->pfp('out','appheader');

	$d = dir(EGW_SERVER_ROOT);
	while($entry = $d->read())
	{
		$f = EGW_SERVER_ROOT . '/' . $entry . '/setup/setup.inc.php';
		if(file_exists($f))
		{
			include($f);
		}
	}

	foreach($setup_info as $key => $data)
	{
		if($data['tables'])
		{
			$setup_tpl->set_var('appname',$data['name']);
			$setup_tpl->set_var('apptitle',$data['title']);
			$setup_tpl->pfp('out','appitem');
		}
	}
	$setup_tpl->pfp('out','appfooter');
}