Initial commit

This commit is contained in:
gustavooth
2026-07-23 22:56:30 -03:00
commit 22a1006598
1816 changed files with 410742 additions and 0 deletions
@@ -0,0 +1,103 @@
<?php
namespace FluentCrm\App\Http\Controllers;
use FluentCrm\App\App;
use FluentCrm\Framework\Validator\ValidationException;
use FluentCrm\Framework\Validator\Validator;
/**
* abstract REST API Controller Class
*
* REST API Handler
*
* @package FluentCrm\App\Http
*
* @version 1.0.0
*/
abstract class Controller
{
/**
* @var \FluentCrm\App\App
*/
protected $app = null;
/**
* @var \FluentCrm\Framework\Http\Request\Request
*/
protected $request = null;
/**
* @var \FluentCrm\Framework\Http\Response\Response
*/
protected $response = null;
public function __construct()
{
$this->app = App::getInstance();
$this->request = $this->app['request'];
$this->response = $this->app['response'];
}
public function validate($data, $rules, $messages = [])
{
$validator = new Validator($data, $rules, $messages);
if ($validator->validate()->fails()) {
// Sanitize validation error messages before returning them
$errors = $validator->errors();
if (is_array($errors)) {
array_walk_recursive($errors, function (&$value) {
if (is_string($value)) {
$value = sanitize_text_field($value);
}
});
}
// phpcs:ignore WordPress.Security.EscapeOutput.ExceptionNotEscaped -- Sanitization is already done above
throw new ValidationException(
esc_html__('Unprocessable Entity!', 'fluent-crm'),
422,
null,
$errors
);
}
return $data;
}
public function send($data = null, $code = 200)
{
return $this->response->send($data, $code);
}
public function sendSuccess($data = null, $code = 200)
{
return $this->response->sendSuccess($data, $code);
}
public function sendError($data = null, $code = 422)
{
return $this->response->sendError($data, $code);
}
public function validationErrors($data = null, $code = 422)
{
if ($data instanceof ValidationException) {
$data = $data->errors();
}
// Sanitize error payload before sending the response to prevent unescaped output
if (is_array($data)) {
array_walk_recursive($data, function (&$value) {
if (is_string($value)) {
$value = sanitize_text_field($value);
}
});
} elseif (is_string($data)) {
$data = sanitize_text_field($data);
}
return $this->sendError($data, $code);
}
}