173 lines
4.4 KiB
PHP
Executable File
173 lines
4.4 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* EGroupware index page
|
|
*
|
|
* Starts all Egw\Applications using $_GET[menuaction]
|
|
*
|
|
* @link http://www.egroupware.org
|
|
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
|
* @package api
|
|
* @version $Id$
|
|
*/
|
|
|
|
use EGroupware\Api;
|
|
use EGroupware\Api\Framework;
|
|
use EGroupware\Api\Egw;
|
|
|
|
// Rocket.Chat desktop clients ignore /rocketchat/ path in URL and use just /
|
|
// --> redirect them back to /rocketchat/
|
|
if (strpos($_SERVER['HTTP_USER_AGENT'] ?? '', 'Rocket.Chat') !== false)
|
|
{
|
|
header('Location: /rocketchat/');
|
|
exit;
|
|
}
|
|
|
|
// support of Mac or iPhone trying to autodetect CalDAV or CardDAV support
|
|
// if EGroupware is not installed in the docroot, you need either this code in the index.php there,
|
|
// or an uncoditional redirect to this file or copy groupdav.htaccess to your docroot as .htaccess
|
|
if ($_SERVER['REQUEST_METHOD'] == 'PROPFIND' || $_SERVER['REQUEST_METHOD'] == 'OPTIONS')
|
|
{
|
|
header('Location: groupdav.php/');
|
|
exit;
|
|
}
|
|
|
|
// forward for not existing or empty header to setup
|
|
if(!file_exists('header.inc.php') || !filesize('header.inc.php'))
|
|
{
|
|
Header('Location: setup/index.php');
|
|
exit;
|
|
}
|
|
|
|
if(isset($_GET['hasupdates']) && $_GET['hasupdates'] == 'yes')
|
|
{
|
|
$hasupdates = True;
|
|
}
|
|
|
|
/*
|
|
This is the menuaction driver for the multi-layered design
|
|
*/
|
|
if(isset($_GET['menuaction']) && preg_match('/^[A-Za-z0-9_]+\.[A-Za-z0-9_\\\\]+\.[A-Za-z0-9_]+$/',$_GET['menuaction']))
|
|
{
|
|
list($app,$class,$method) = explode('.',$_GET['menuaction']);
|
|
|
|
// check if autoloadable class belongs to given app
|
|
if (substr($class, 0, 11) == 'EGroupware\\')
|
|
{
|
|
list(,$app_from_class) = explode('\\', strtolower($class));
|
|
}
|
|
elseif(strpos($class, '_') !== false)
|
|
{
|
|
list($app_from_class) = explode('_', $class);
|
|
}
|
|
if(!$app || !$class || !$method || isset($app_from_class) &&
|
|
isset($GLOBALS['egw_info']['apps'][$app_from_class]) && $app_from_class != $app)
|
|
{
|
|
$invalid_data = True;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$app = 'api';
|
|
$invalid_data = True;
|
|
}
|
|
//error_log(__METHOD__."$app,$class,$method");
|
|
if($app == 'phpgwapi')
|
|
{
|
|
$app = 'api';
|
|
$api_requested = True;
|
|
}
|
|
|
|
$GLOBALS['egw_info'] = array(
|
|
'flags' => array(
|
|
'noheader' => True,
|
|
'nonavbar' => True,
|
|
'currentapp' => $app
|
|
)
|
|
);
|
|
include('./header.inc.php');
|
|
|
|
// user changed timezone
|
|
if (isset($_GET['tz']))
|
|
{
|
|
Api\DateTime::setUserPrefs($_GET['tz']); // throws exception, if tz is invalid
|
|
|
|
$GLOBALS['egw']->preferences->add('common','tz',$_GET['tz']);
|
|
$GLOBALS['egw']->preferences->save_repository();
|
|
|
|
if (($referer = Api\Header\Referer::get()))
|
|
{
|
|
Egw::redirect_link($referer);
|
|
}
|
|
}
|
|
|
|
if($app == 'api' && !$class && !$api_requested && !($_GET['cd'] === 'yes' && !Api\Header\UserAgent::mobile()) && $GLOBALS['egw_info']['user']['preferences']['common']['template_set'] == 'idots')
|
|
{
|
|
if ($GLOBALS['egw_info']['server']['force_default_app'] && $GLOBALS['egw_info']['server']['force_default_app'] != 'user_choice')
|
|
{
|
|
$GLOBALS['egw_info']['user']['preferences']['common']['default_app'] = $GLOBALS['egw_info']['server']['force_default_app'];
|
|
}
|
|
if($GLOBALS['egw_info']['user']['preferences']['common']['default_app'] && !$hasupdates)
|
|
{
|
|
Egw::redirect(Framework::index($GLOBALS['egw_info']['user']['preferences']['common']['default_app']),$GLOBALS['egw_info']['user']['preferences']['common']['default_app']);
|
|
}
|
|
else
|
|
{
|
|
Egw::redirect_link('/home/index.php?cd=yes');
|
|
}
|
|
}
|
|
|
|
if ($_GET['cd'] == 'yes' || empty($class))
|
|
{
|
|
$GLOBALS['egw_info']['flags'] = array(
|
|
'noheader' => False,
|
|
'nonavbar' => False,
|
|
'currentapp' => 'eGroupWare'
|
|
);
|
|
echo $GLOBALS['egw']->framework->header();
|
|
echo $GLOBALS['egw']->framework->footer();
|
|
}
|
|
else
|
|
{
|
|
if($api_requested)
|
|
{
|
|
$app = 'phpgwapi';
|
|
}
|
|
|
|
if (class_exists($class))
|
|
{
|
|
$obj = new $class;
|
|
}
|
|
else
|
|
{
|
|
$obj = CreateObject($app.'.'.$class);
|
|
}
|
|
if((is_array($obj->public_functions) && $obj->public_functions[$method]) && !$invalid_data)
|
|
{
|
|
$obj->$method();
|
|
unset($app);
|
|
unset($class);
|
|
unset($method);
|
|
unset($invalid_data);
|
|
unset($api_requested);
|
|
}
|
|
else
|
|
{
|
|
if(!$app || !$class || !$method || $invalid_data)
|
|
{
|
|
error_log(__FILE__.": missing or bad menuaction '$_GET[menuaction]'!");
|
|
}
|
|
|
|
if(!is_array($GLOBALS[$class]->public_functions) || !$GLOBALS[$class]->public_functions[$method] && $method)
|
|
{
|
|
error_log(__FILE__.": invalid menuaction '$_GET[menuaction]', not in public_functions!");
|
|
}
|
|
|
|
$GLOBALS['egw']->redirect_link('/home/index.php');
|
|
}
|
|
|
|
if(!isset($GLOBALS['egw_info']['nofooter']))
|
|
{
|
|
echo $GLOBALS['egw']->framework->footer();
|
|
}
|
|
}
|