Merge commit '8e4cc94994' as 'public/legacy'

This commit is contained in:
Dillon-Brown 2021-03-31 15:37:32 +01:00
commit 11be803da2
9769 changed files with 1617695 additions and 0 deletions

View file

@ -0,0 +1,208 @@
<?php
/**
* SugarCRM Community Edition is a customer relationship management program developed by
* SugarCRM, Inc. Copyright (C) 2004-2013 SugarCRM Inc.
*
* SuiteCRM is an extension to SugarCRM Community Edition developed by SalesAgility Ltd.
* Copyright (C) 2011 - 2018 SalesAgility Ltd.
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU Affero General Public License version 3 as published by the
* Free Software Foundation with the addition of the following permission added
* to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
* IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
* OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
*
* 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 Affero General Public License for more
* details.
*
* You should have received a copy of the GNU Affero General Public License along with
* this program; if not, see http://www.gnu.org/licenses or write to the Free
* Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA.
*
* You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
* SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
*
* 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 Affero General Public License version 3.
*
* In accordance with Section 7(b) of the GNU Affero General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "Powered by
* SugarCRM" logo and "Supercharged by SuiteCRM" logo. If the display of the logos is not
* reasonably feasible for technical reasons, the Appropriate Legal Notices must
* display the words "Powered by SugarCRM" and "Supercharged by SuiteCRM".
*/
namespace SuiteCRM\Log;
if (!defined('sugarEntry') || !sugarEntry) {
die('Not A Valid Entry Point');
}
use Monolog\Formatter\FormatterInterface;
use Monolog\Logger;
/**
* CliLoggerFormatter for CliLoggerHandler.
*/
class CliLoggerFormatter implements FormatterInterface
{
/** @var array a list of the available colours for quicker usage */
private $colors = [];
/** @var string the format of the log line */
private $format;
/** @var string string used for padding new lines */
private $padding;
/** @var bool if set to false only warning with levels >= warn will be colour formatted */
private $alwaysColourLine = true;
/**
* Creates the colours and initializes the format.
*/
public function __construct()
{
$this->colors = $this->getColors();
$color = &$this->colors;
$this->format = "[{$color['bold']}%s{$color['reset']}][%s] {$color['bold']}%s" . PHP_EOL;
$this->padding =
PHP_EOL
. $color['reset']
. $color['gray-dark']
. str_repeat(' ~', 4)
. $color['reset']
. str_repeat(' ', 2);
}
/**
* Formats a set of log records.
*
* @param array $records A set of records to format
*
* @return mixed The formatted set of records
*/
public function formatBatch(array $records)
{
$formatted = [];
foreach ($records as $record) {
$formatted = $this->format($record);
}
return $formatted;
}
/**
* Formats a log record.
*
* @param array $record A record to format
*
* @return mixed The formatted record
*/
public function format(array $record)
{
$level = $record['level'];
$message = $record['message'];
list($color, $code) = $this->getColourAndCode($level);
if ($level >= Logger::WARNING || $this->alwaysColourLine) {
$message = $color . $message . $this->colors['reset'];
}
$message = preg_replace("/\n\s*/", $this->padding . $color, $message);
$time = (new \DateTime())->format('H:i:s');
return sprintf($this->format, $color . $code, $time, $message);
}
/**
* Creates an array with the available colours.
*
* @return array
*/
protected function getColors()
{
return [
'white' => $this->code(97),
'gray' => $this->code(37),
'gray-dark' => $this->code(90),
'cyan' => $this->code(36),
'cyan-light' => $this->code(96),
'blue' => $this->code(34),
'blue-light' => $this->code(94),
'green' => $this->code(32),
'green-light' => $this->code(92),
'yellow' => $this->code(33),
'yellow-light' => $this->code(93),
'purple' => $this->code(95),
'red' => $this->code(31),
'red-light' => $this->code(91),
'bg-red' => $this->code(41),
'bg-red-light' => $this->code(101),
'bold' => $this->code(1), // this will also make colours lighter
'reverse' => $this->code(7),
'reset' => $this->code(0),
];
}
/**
* Utility to make a unix terminal escape sequence given the code.
*
* @param int $code
*
* @return string
*/
protected function code($code)
{
return "\e[{$code}m";
}
/**
* Retrieves the right colour formatting and symbol to show in brackets.
*
* @param int $level
*
* @return string[]
*/
protected function getColourAndCode($level)
{
switch ($level) {
case Logger::INFO:
$color = $this->colors['cyan'];
$code = '=';
break;
case Logger::NOTICE:
$color = $this->colors['green'];
$code = '?';
break;
case Logger::WARNING:
$color = $this->colors['yellow'];
$code = '*';
break;
case Logger::ERROR:
$color = $this->colors['red'];
$code = '!';
break;
case Logger::CRITICAL:
$color = $this->colors['bg-red-light'];
$code = '!';
break;
case Logger::EMERGENCY:
$color = $this->colors['bg-red'];
$code = '!';
break;
case Logger::DEBUG:
default:
$color = $this->colors['blue'];
$code = '@';
break;
}
return [$color, $code];
}
}

View file

@ -0,0 +1,68 @@
<?php
/**
* SugarCRM Community Edition is a customer relationship management program developed by
* SugarCRM, Inc. Copyright (C) 2004-2013 SugarCRM Inc.
*
* SuiteCRM is an extension to SugarCRM Community Edition developed by SalesAgility Ltd.
* Copyright (C) 2011 - 2018 SalesAgility Ltd.
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU Affero General Public License version 3 as published by the
* Free Software Foundation with the addition of the following permission added
* to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
* IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
* OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
*
* 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 Affero General Public License for more
* details.
*
* You should have received a copy of the GNU Affero General Public License along with
* this program; if not, see http://www.gnu.org/licenses or write to the Free
* Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA.
*
* You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
* SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
*
* 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 Affero General Public License version 3.
*
* In accordance with Section 7(b) of the GNU Affero General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "Powered by
* SugarCRM" logo and "Supercharged by SuiteCRM" logo. If the display of the logos is not
* reasonably feasible for technical reasons, the Appropriate Legal Notices must
* display the words "Powered by SugarCRM" and "Supercharged by SuiteCRM".
*/
namespace SuiteCRM\Log;
if (!defined('sugarEntry') || !sugarEntry) {
die('Not A Valid Entry Point');
}
use Monolog\Handler\StreamHandler;
use Monolog\Logger;
/**
* This class extends the base Monolog StreamHandler to perform logging on CLI output.
*
* This logger is ideal for CLIs as it is minimal and offers nice colour formatting.
*/
class CliLoggerHandler extends StreamHandler
{
/**
* CliLoggerHandler constructor.
*
* @param int $level
*
* @throws \Exception
*/
public function __construct($level = Logger::DEBUG)
{
parent::__construct('php://stderr', $level);
$this->setFormatter(new CliLoggerFormatter());
}
}

View file

@ -0,0 +1,102 @@
<?php
/**
* SugarCRM Community Edition is a customer relationship management program developed by
* SugarCRM, Inc. Copyright (C) 2004-2013 SugarCRM Inc.
*
* SuiteCRM is an extension to SugarCRM Community Edition developed by SalesAgility Ltd.
* Copyright (C) 2011 - 2018 SalesAgility Ltd.
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU Affero General Public License version 3 as published by the
* Free Software Foundation with the addition of the following permission added
* to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
* IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
* OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
*
* 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 Affero General Public License for more
* details.
*
* You should have received a copy of the GNU Affero General Public License along with
* this program; if not, see http://www.gnu.org/licenses or write to the Free
* Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA.
*
* You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
* SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
*
* 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 Affero General Public License version 3.
*
* In accordance with Section 7(b) of the GNU Affero General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "Powered by
* SugarCRM" logo and "Supercharged by SuiteCRM" logo. If the display of the logos is not
* reasonably feasible for technical reasons, the Appropriate Legal Notices must
* display the words "Powered by SugarCRM" and "Supercharged by SuiteCRM".
*/
namespace SuiteCRM\Log;
if (!defined('sugarEntry') || !sugarEntry) {
die('Not A Valid Entry Point');
}
use LoggerManager;
use Monolog\Handler\AbstractProcessingHandler;
/**
* Integrates Monolog with the LoggerManager.
*/
class SugarLoggerHandler extends AbstractProcessingHandler
{
/**
* Writes the record down to the log of the implementing handler
*
* @param array $record
* @return void
*/
protected function write(array $record)
{
$logger = LoggerManager::getLogger();
$message = $record['message'];
$level = $record['level'];
$channel = $record['channel'];
$level = $this->psrToSugarLevel($level);
$logger->$level("[$channel] $message");
}
/**
* Converts a Monolog logging level to the corresponding level string as specified in the LoggerManager class.
*
* @param int $level
* @return string
*/
protected function psrToSugarLevel($level)
{
$level = intval($level);
switch ($level) {
case 100:
return 'debug';
case 200:
return 'info';
case 300:
return 'warn';
case 400:
return 'error';
case 500:
return 'fatal';
case 600:
case 550:
return 'security';
default:
return 'debug';
}
}
}