156 lines
5.3 KiB
PHP
156 lines
5.3 KiB
PHP
<?php
|
|
/************************************************************************
|
|
* This file is part of EspoCRM.
|
|
*
|
|
* EspoCRM - Open Source CRM application.
|
|
* Copyright (C) 2014-2018 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
|
|
* Website: http://www.espocrm.com
|
|
*
|
|
* EspoCRM 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 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* EspoCRM 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 EspoCRM. If not, see http://www.gnu.org/licenses/.
|
|
*
|
|
* The interactive user interfaces in modified source and object code versions
|
|
* of this program must display Appropriate Legal Notices, as required under
|
|
* Section 5 of the GNU General Public License version 3.
|
|
*
|
|
* In accordance with Section 7(b) of the GNU General Public License version 3,
|
|
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
|
|
************************************************************************/
|
|
|
|
namespace Espo\Core\Utils\Api;
|
|
|
|
class Slim extends \Slim\Slim
|
|
{
|
|
public function __construct(array $userSettings = array())
|
|
{
|
|
// Setup IoC container
|
|
$this->container = new \Slim\Helper\Set();
|
|
$this->container['settings'] = array_merge(static::getDefaultSettings(), $userSettings);
|
|
|
|
// Default environment
|
|
$this->container->singleton('environment', function ($c) {
|
|
/* ESPOCRM: change Environment class */
|
|
//return \Slim\Environment::getInstance();
|
|
return \Espo\Core\Utils\Api\Slim\Environment::getInstance();
|
|
/* ESPOCRM: end */
|
|
});
|
|
|
|
// Default request
|
|
$this->container->singleton('request', function ($c) {
|
|
return new \Slim\Http\Request($c['environment']);
|
|
});
|
|
|
|
// Default response
|
|
$this->container->singleton('response', function ($c) {
|
|
return new \Slim\Http\Response();
|
|
});
|
|
|
|
// Default router
|
|
$this->container->singleton('router', function ($c) {
|
|
return new \Slim\Router();
|
|
});
|
|
|
|
// Default view
|
|
$this->container->singleton('view', function ($c) {
|
|
$viewClass = $c['settings']['view'];
|
|
$templatesPath = $c['settings']['templates.path'];
|
|
|
|
$view = ($viewClass instanceOf \Slim\View) ? $viewClass : new $viewClass;
|
|
$view->setTemplatesDirectory($templatesPath);
|
|
return $view;
|
|
});
|
|
|
|
// Default log writer
|
|
$this->container->singleton('logWriter', function ($c) {
|
|
$logWriter = $c['settings']['log.writer'];
|
|
|
|
return is_object($logWriter) ? $logWriter : new \Slim\LogWriter($c['environment']['slim.errors']);
|
|
});
|
|
|
|
// Default log
|
|
$this->container->singleton('log', function ($c) {
|
|
$log = new \Slim\Log($c['logWriter']);
|
|
$log->setEnabled($c['settings']['log.enabled']);
|
|
$log->setLevel($c['settings']['log.level']);
|
|
$env = $c['environment'];
|
|
$env['slim.log'] = $log;
|
|
|
|
return $log;
|
|
});
|
|
|
|
// Default mode
|
|
$this->container['mode'] = function ($c) {
|
|
$mode = $c['settings']['mode'];
|
|
|
|
if (isset($_ENV['SLIM_MODE'])) {
|
|
$mode = $_ENV['SLIM_MODE'];
|
|
} else {
|
|
$envMode = getenv('SLIM_MODE');
|
|
if ($envMode !== false) {
|
|
$mode = $envMode;
|
|
}
|
|
}
|
|
|
|
return $mode;
|
|
};
|
|
|
|
// Define default middleware stack
|
|
$this->middleware = array($this);
|
|
$this->add(new \Slim\Middleware\Flash());
|
|
$this->add(new \Slim\Middleware\MethodOverride());
|
|
|
|
// Make default if first instance
|
|
if (is_null(static::getInstance())) {
|
|
$this->setName('default');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Redefine the run method
|
|
*
|
|
* We no need to use a Slim handler
|
|
*/
|
|
public function run()
|
|
{
|
|
$this->middleware[0]->call();
|
|
|
|
list($status, $headers, $body) = $this->response->finalize();
|
|
|
|
\Slim\Http\Util::serializeCookies($headers, $this->response->cookies, $this->settings);
|
|
|
|
if (headers_sent() === false) {
|
|
if (strpos(PHP_SAPI, 'cgi') === 0) {
|
|
header(sprintf('Status: %s', \Slim\Http\Response::getMessageForCode($status)));
|
|
} else {
|
|
header(sprintf('HTTP/%s %s', $this->config('http.version'), \Slim\Http\Response::getMessageForCode($status)));
|
|
}
|
|
|
|
foreach ($headers as $name => $value) {
|
|
$hValues = explode("\n", $value);
|
|
foreach ($hValues as $hVal) {
|
|
header("$name: $hVal", false);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!$this->request->isHead()) {
|
|
echo $body;
|
|
}
|
|
}
|
|
|
|
public function printError($error, $status)
|
|
{
|
|
echo static::generateTemplateMarkup($status, '<p>'.$error.'</p><a href="' . $this->request->getRootUri() . '/">Visit the Home Page</a>');
|
|
}
|
|
|
|
} |