Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/pr-checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ jobs:
strategy:
matrix:
operating-system: [ubuntu-latest]
php-versions: ['8.0','8.2','8.3']
php-versions: ['8.0','8.2','8.3', '8.4']
steps:
- uses: actions/checkout@v3

Expand Down
4 changes: 3 additions & 1 deletion rector.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@
SimplifyEmptyCheckOnEmptyArrayRector::class,
])
->withSets([
SetList::PHP_80,
SetList::PHP_82,
SetList::PHP_83,
SetList::PHP_84,
SetList::DEAD_CODE,
SetList::CODE_QUALITY,
SetList::CODING_STYLE,
Expand Down
2 changes: 2 additions & 0 deletions src/Client/SugarApi.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
use Sugarcrm\REST\Endpoint\MLPackage;
use Sugarcrm\REST\Endpoint\ModuleLoader;
use Sugarcrm\REST\Endpoint\Ping;
use Sugarcrm\REST\Endpoint\Rest;
use Sugarcrm\REST\Endpoint\Smart;
use Sugarcrm\REST\Endpoint\SugarBean;
use Sugarcrm\REST\Endpoint\ModuleFilter;
Expand Down Expand Up @@ -48,6 +49,7 @@
* @method ModuleLoader moduleLoader() -
* @method MLPackage mlp(string $id = null)
* @method Integrate integrate(string $module = '', string $id = '')
* @method Rest rest(string $endpoint = '')
*/
class SugarApi extends AbstractClient implements PlatformAwareInterface
{
Expand Down
8 changes: 8 additions & 0 deletions src/Endpoint/Abstracts/AbstractSmartSugarEndpoint.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,13 @@

namespace Sugarcrm\REST\Endpoint\Abstracts;

use GuzzleHttp\Psr7\Request;
use MRussell\REST\Endpoint\Data\ValidatedEndpointData;
use MRussell\REST\Endpoint\SmartEndpoint;
use MRussell\REST\Traits\PsrLoggerTrait;
use Sugarcrm\REST\Endpoint\SugarEndpointInterface;
use Sugarcrm\REST\Endpoint\Traits\CompileRequestTrait;
use Sugarcrm\REST\Endpoint\Traits\CustomHeadersTrait;

/**
* Provide a smarter interface for Endpoints, to better manage passed in data
Expand All @@ -20,6 +22,12 @@ abstract class AbstractSmartSugarEndpoint extends SmartEndpoint implements Sugar
{
use CompileRequestTrait;
use PsrLoggerTrait;
use CustomHeadersTrait;

protected string $_dataInterface = ValidatedEndpointData::class;

protected function configureRequest(Request $request, $data): Request
{
return parent::configureRequest($this->addCustomHeadersToRequest($request), $data);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@

namespace Sugarcrm\REST\Endpoint\Abstracts;

use GuzzleHttp\Psr7\Request;
use Sugarcrm\REST\Endpoint\SugarBean;
use MRussell\REST\Endpoint\Abstracts\AbstractModelEndpoint;
use Sugarcrm\REST\Endpoint\Traits\CustomHeadersTrait;
use Sugarcrm\REST\Endpoint\Traits\FieldsDataTrait;
use Sugarcrm\REST\Endpoint\Traits\ModuleAwareTrait;

Expand All @@ -22,6 +24,7 @@ abstract class AbstractSugarBeanCollectionEndpoint extends AbstractSugarCollecti
{
use FieldsDataTrait;
use ModuleAwareTrait;
use CustomHeadersTrait;

public const SUGAR_ORDERBY_DATA_PROPERTY = 'order_by';

Expand Down Expand Up @@ -97,6 +100,11 @@ protected function configurePayload(): mixed
return $this->configureFieldsDataProps($data);
}

protected function configureRequest(Request $request, $data): Request
{
return parent::configureRequest($this->addCustomHeadersToRequest($request), $data);
}

/**
* Add module to url options
* @inheritdoc
Expand Down
4 changes: 3 additions & 1 deletion src/Endpoint/Abstracts/AbstractSugarBeanEndpoint.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
use Sugarcrm\REST\Endpoint\Integrate;
use Sugarcrm\REST\Endpoint\SugarEndpointInterface;
use Sugarcrm\REST\Endpoint\Traits\CompileRequestTrait;
use Sugarcrm\REST\Endpoint\Traits\CustomHeadersTrait;
use Sugarcrm\REST\Endpoint\Traits\FieldsDataTrait;
use Sugarcrm\REST\Endpoint\Traits\IntegrateSyncKeyTrait;
use Sugarcrm\REST\Endpoint\Traits\ModuleAwareTrait;
Expand Down Expand Up @@ -53,6 +54,7 @@ abstract class AbstractSugarBeanEndpoint extends ModelEndpoint implements SugarE
use FieldsDataTrait;
use FileUploadsTrait;
use IntegrateSyncKeyTrait;
use CustomHeadersTrait;

public const MODEL_ACTION_VAR = 'action';

Expand Down Expand Up @@ -173,7 +175,7 @@ protected function configureRequest(Request $request, $data): Request
$data = $this->configureFieldsDataProps($data);
}

return parent::configureRequest($request, $data);
return parent::configureRequest($this->addCustomHeadersToRequest($request), $data);
}

/**
Expand Down
8 changes: 8 additions & 0 deletions src/Endpoint/Abstracts/AbstractSugarCollectionEndpoint.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,15 @@

namespace Sugarcrm\REST\Endpoint\Abstracts;

use GuzzleHttp\Psr7\Request;
use MRussell\REST\Exception\Endpoint\InvalidRequest;
use GuzzleHttp\Psr7\Response;
use MRussell\REST\Endpoint\Data\AbstractEndpointData;
use MRussell\REST\Endpoint\CollectionEndpoint;
use MRussell\REST\Traits\PsrLoggerTrait;
use Sugarcrm\REST\Endpoint\SugarEndpointInterface;
use Sugarcrm\REST\Endpoint\Traits\CompileRequestTrait;
use Sugarcrm\REST\Endpoint\Traits\CustomHeadersTrait;

/**
* Provides access to a multi-bean collection retrieved from Sugar 7 REST Api
Expand All @@ -23,6 +25,7 @@ abstract class AbstractSugarCollectionEndpoint extends CollectionEndpoint implem
{
use CompileRequestTrait;
use PsrLoggerTrait;
use CustomHeadersTrait;

public const SUGAR_OFFSET_PROPERTY = 'offset';

Expand Down Expand Up @@ -82,6 +85,11 @@ protected function configurePayload(): mixed
return $data;
}

protected function configureRequest(Request $request, $data): Request
{
return parent::configureRequest($this->addCustomHeadersToRequest($request), $data);
}

/**
* Get the configured offset
*/
Expand Down
8 changes: 8 additions & 0 deletions src/Endpoint/Abstracts/AbstractSugarEndpoint.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,12 @@

namespace Sugarcrm\REST\Endpoint\Abstracts;

use GuzzleHttp\Psr7\Request;
use MRussell\REST\Endpoint\Endpoint;
use MRussell\REST\Traits\PsrLoggerTrait;
use Sugarcrm\REST\Endpoint\SugarEndpointInterface;
use Sugarcrm\REST\Endpoint\Traits\CompileRequestTrait;
use Sugarcrm\REST\Endpoint\Traits\CustomHeadersTrait;

/**
* Base Sugar API Endpoint for the simplest of REST functionality
Expand All @@ -19,4 +21,10 @@ abstract class AbstractSugarEndpoint extends Endpoint implements SugarEndpointIn
{
use CompileRequestTrait;
use PsrLoggerTrait;
use CustomHeadersTrait;

protected function configureRequest(Request $request, $data): Request
{
return parent::configureRequest($this->addCustomHeadersToRequest($request), $data);
}
}
27 changes: 27 additions & 0 deletions src/Endpoint/Data/Filters/AbstractPredefinedFilter.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?php

namespace Sugarcrm\REST\Endpoint\Data\Filters;

use Sugarcrm\REST\Endpoint\Data\Filters\Operator\AbstractOperator;

abstract class AbstractPredefinedFilter extends AbstractOperator
{
public function __construct(array $arguments = [])
{
if (!empty($arguments) && count($arguments) < 2) {
$arguments = [
$this->getOperator(),
$arguments[0] ?? '',
];
}

parent::__construct($arguments);
}

public function compile(): array
{
return [
$this->getOperator() => $this->getValue(),
];
}
}
8 changes: 8 additions & 0 deletions src/Endpoint/Data/Filters/Creator.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?php

namespace Sugarcrm\REST\Endpoint\Data\Filters;

class Creator extends AbstractPredefinedFilter
{
public const OPERATOR = '$creator';
}
86 changes: 50 additions & 36 deletions src/Endpoint/Data/Filters/Expression/AbstractExpression.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,12 @@

namespace Sugarcrm\REST\Endpoint\Data\Filters\Expression;

use Sugarcrm\REST\Endpoint\Data\Filters\Creator;
use Sugarcrm\REST\Endpoint\Data\Filters\Favorite;
use Sugarcrm\REST\Endpoint\Data\Filters\Following;
use Sugarcrm\REST\Endpoint\Data\Filters\Operator\Equals;
use Sugarcrm\REST\Endpoint\Data\Filters\Operator\InRadiusFromCoords;
use Sugarcrm\REST\Endpoint\Data\Filters\Operator\InRadiusFromZip;
use Sugarcrm\REST\Endpoint\Data\Filters\Operator\NotEquals;
use Sugarcrm\REST\Endpoint\Data\Filters\Operator\Starts;
use Sugarcrm\REST\Endpoint\Data\Filters\Operator\Ends;
Expand All @@ -22,48 +27,52 @@
use Sugarcrm\REST\Endpoint\Data\Filters\Operator\Between;
use Sugarcrm\REST\Endpoint\Data\Filters\Operator\DateBetween;
use Sugarcrm\REST\Endpoint\Data\Filters\FilterInterface;
use Sugarcrm\REST\Endpoint\Data\Filters\Owner;
use Sugarcrm\REST\Endpoint\Data\Filters\Tracker;
use Sugarcrm\REST\Exception\Filter\UnknownFilterOperator;

/**
* The default expression implementation provides an API for acess to all Sugar filter operators
* @package Sugarcrm\REST\Endpoint\Data\Filters\Expression
* @method AndExpression and()
* @method OrExpression or()
* @method DateExpression date($field)
* @method $this equals($field,$value)
* @method $this notEquals($field,$value)
* @method $this starts($field,$value)
* @method $this ends($field,$value)
* @method $this contains($field,$value)
* @method $this in($field,array $value)
* @method $this notIn($field,array $value)
* @method $this isNull($field)
* @method $this notNull($field)
* @method $this lt($field,$value)
* @method $this lessThan($field,$value)
* @method $this lte($field,$value)
* @method $this lessThanOrEqualTo($field,$value)
* @method $this lessThanOrEquals($field,$value)
* @method $this greaterThan($field,$value)
* @method $this gte($field,$value)
* @method $this greaterThanOrEqualTo($field,$value)
* @method $this greaterThanOrEquals($field,$value)
* @method $this between($field,$value)
* @method $this dateBetween($field,$value)
* @method DateExpression date(string $field)
* @method DistanceExpression distance(string $field)
* @method static equals(string $field, mixed $value)
* @method static notEquals(string $field, mixed $value)
* @method static starts(string $field,mixed $value)
* @method static ends(string $field, mixed $value)
* @method static contains(string $field, mixed $value)
* @method static in(string $field, array $value)
* @method static notIn(string $field, array $value)
* @method static isNull(string $field)
* @method static notNull(string $field)
* @method static lt(string $field,int|float $value)
* @method static lessThan(string $field, int|float $value)
* @method static lte(string $field, int|float $value)
* @method static lessThanOrEqualTo(string $field, int|float $value)
* @method static lessThanOrEquals(string $field, int|float $value)
* @method static greaterThan(string $field, int|float $value)
* @method static gte(string $field, int|float $value)
* @method static greaterThanOrEqualTo(string $field, int|float $value)
* @method static greaterThanOrEquals(string $field, int|float$value)
* @method static between(string $field, array $value)
* @method static dateBetween(string $field,array $value)
* @method static inRadiusFromCoords(string $field, array $coords, int|float $radius, string $unitType = 'km')
* @method static inRadiusFromZip(string $field, string $zip, int|float $radius, string $country, string $unitType = 'km')
* @method static favorite()
* @method static following()
* @method static owner()
* @method static creator()
* @method static tracker(string $interval)
*/
abstract class AbstractExpression implements FilterInterface, ExpressionInterface
{
/**
* @var array
*/
protected $filters = [];
protected array $filters = [];

private ?\Sugarcrm\REST\Endpoint\Data\Filters\Expression\AbstractExpression $parentExpression = null;
private AbstractExpression $parentExpression;

/**
* @var array
*/
protected $operators = [
protected array $operators = [
'equals' => Equals::class,
'notEquals' => NotEquals::class,
'starts' => Starts::class,
Expand All @@ -85,15 +94,20 @@ abstract class AbstractExpression implements FilterInterface, ExpressionInterfac
'greaterThanOrEquals' => GreaterThanOrEqual::class,
'between' => Between::class,
'dateBetween' => DateBetween::class,
'inRadiusFromCoords' => InRadiusFromCoords::class,
'inRadiusFromZip' => InRadiusFromZip::class,
'favorite' => Favorite::class,
'following' => Following::class,
'owner' => Owner::class,
'tracker' => Tracker::class,
'creator' => Creator::class,
];

/**
* @var array
*/
protected $expressions = [
protected array $expressions = [
'and' => AndExpression::class,
'or' => OrExpression::class,
'date' => DateExpression::class,
'distance' => DistanceExpression::class,
];

/**
Expand Down Expand Up @@ -126,7 +140,7 @@ public function __call($name, $arguments)
* Sets Parent Expression to allow for nested tree structure
* @return $this
*/
public function setParentExpression(AbstractExpression $Expression)
public function setParentExpression(AbstractExpression $Expression): static
{
$this->parentExpression = $Expression;
return $this;
Expand Down Expand Up @@ -156,7 +170,7 @@ public function compile(): array
/**
* @inheritDoc
*/
public function clear()
public function clear(): static
{
$this->filters = [];
return $this;
Expand Down
Loading
Loading