diff --git a/.gitignore b/.gitignore index c90ef404..c2f6e62b 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ composer.phar composer.lock .idea examples/.env +.phpunit.result.cache /.DS_Store diff --git a/composer.json b/composer.json index f4d78e5b..069a9cfa 100644 --- a/composer.json +++ b/composer.json @@ -19,11 +19,10 @@ "amocrm" ], "require": { - "php": ">=7.1", + "php": ">=7.1 || >=8.0", "ext-json": "*", "amocrm/oauth2-amocrm": "^2.0", "guzzlehttp/guzzle": "6.* || 7.*", - "illuminate/support": "5.* || 6.* || 7.* || 8.* || 9.*", "symfony/dotenv": "3.* || 4.* || 5.* || 6.*", "fig/http-message-util": "1.*", "ramsey/uuid": "^3 || ^4", @@ -31,7 +30,7 @@ "nesbot/carbon": "^2.52" }, "require-dev": { - "phpunit/phpunit": "7.*.* || 9.*.*", + "phpunit/phpunit": "7.* || 8.* || 9.*", "squizlabs/php_codesniffer": "3.5.*" }, "autoload": { @@ -45,7 +44,9 @@ "AmoCRM\\Models\\": "src/AmoCRM/Models", "AmoCRM\\Collections\\": "src/AmoCRM/Collections", "AmoCRM\\Filters\\": "src/AmoCRM/Filters", - "AmoCRM\\Helpers\\": "src/AmoCRM/Helpers" + "AmoCRM\\Helpers\\": "src/AmoCRM/Helpers", + "AmoCRM\\Contracts\\": "src/AmoCRM/Contracts", + "AmoCRM\\Support\\": "src/AmoCRM/Support" } }, "scripts": { diff --git a/src/AmoCRM/Collections/BaseApiCollection.php b/src/AmoCRM/Collections/BaseApiCollection.php index 6ea275a6..2371301d 100644 --- a/src/AmoCRM/Collections/BaseApiCollection.php +++ b/src/AmoCRM/Collections/BaseApiCollection.php @@ -5,7 +5,7 @@ use AmoCRM\Models\BaseApiModel; use ArrayAccess; use ArrayIterator; -use Illuminate\Support\Str; +use AmoCRM\Support\Str; use InvalidArgumentException; use IteratorAggregate; use JsonSerializable; diff --git a/src/AmoCRM/Contracts/Support/Arrayable.php b/src/AmoCRM/Contracts/Support/Arrayable.php new file mode 100644 index 00000000..1bdf458a --- /dev/null +++ b/src/AmoCRM/Contracts/Support/Arrayable.php @@ -0,0 +1,13 @@ +<?php + +namespace AmoCRM\Contracts\Support; + +interface Arrayable +{ + /** + * Get the instance as an array. + * + * @return array + */ + public function toArray(); +} diff --git a/src/AmoCRM/Models/AccountSettings/AmojoRights.php b/src/AmoCRM/Models/AccountSettings/AmojoRights.php index 94ca2c99..7215e58f 100644 --- a/src/AmoCRM/Models/AccountSettings/AmojoRights.php +++ b/src/AmoCRM/Models/AccountSettings/AmojoRights.php @@ -2,7 +2,7 @@ namespace AmoCRM\Models\AccountSettings; -use Illuminate\Contracts\Support\Arrayable; +use AmoCRM\Contracts\Support\Arrayable; class AmojoRights implements Arrayable { diff --git a/src/AmoCRM/Models/AccountSettings/DateTimeSettings.php b/src/AmoCRM/Models/AccountSettings/DateTimeSettings.php index 3ef6c14f..b5e94051 100644 --- a/src/AmoCRM/Models/AccountSettings/DateTimeSettings.php +++ b/src/AmoCRM/Models/AccountSettings/DateTimeSettings.php @@ -2,7 +2,7 @@ namespace AmoCRM\Models\AccountSettings; -use Illuminate\Contracts\Support\Arrayable; +use AmoCRM\Contracts\Support\Arrayable; class DateTimeSettings implements Arrayable { diff --git a/src/AmoCRM/Models/AccountSettings/InvoicesSettings.php b/src/AmoCRM/Models/AccountSettings/InvoicesSettings.php index f5548bfd..3156382c 100644 --- a/src/AmoCRM/Models/AccountSettings/InvoicesSettings.php +++ b/src/AmoCRM/Models/AccountSettings/InvoicesSettings.php @@ -2,7 +2,7 @@ namespace AmoCRM\Models\AccountSettings; -use Illuminate\Contracts\Support\Arrayable; +use AmoCRM\Contracts\Support\Arrayable; class InvoicesSettings implements Arrayable { diff --git a/src/AmoCRM/Models/AccountSettings/TaskType.php b/src/AmoCRM/Models/AccountSettings/TaskType.php index bf5d7ac9..333d1d9f 100644 --- a/src/AmoCRM/Models/AccountSettings/TaskType.php +++ b/src/AmoCRM/Models/AccountSettings/TaskType.php @@ -3,7 +3,7 @@ namespace AmoCRM\Models\AccountSettings; use AmoCRM\Models\BaseApiModel; -use Illuminate\Contracts\Support\Arrayable; +use AmoCRM\Contracts\Support\Arrayable; class TaskType extends BaseApiModel implements Arrayable { diff --git a/src/AmoCRM/Models/AccountSettings/UsersGroup.php b/src/AmoCRM/Models/AccountSettings/UsersGroup.php index 48c2519b..6642c06e 100644 --- a/src/AmoCRM/Models/AccountSettings/UsersGroup.php +++ b/src/AmoCRM/Models/AccountSettings/UsersGroup.php @@ -3,7 +3,7 @@ namespace AmoCRM\Models\AccountSettings; use AmoCRM\Models\BaseApiModel; -use Illuminate\Contracts\Support\Arrayable; +use AmoCRM\Contracts\Support\Arrayable; class UsersGroup extends BaseApiModel implements Arrayable { diff --git a/src/AmoCRM/Models/BaseApiModel.php b/src/AmoCRM/Models/BaseApiModel.php index 569fb260..da2b2695 100644 --- a/src/AmoCRM/Models/BaseApiModel.php +++ b/src/AmoCRM/Models/BaseApiModel.php @@ -2,7 +2,7 @@ namespace AmoCRM\Models; -use Illuminate\Support\Str; +use AmoCRM\Support\Str; use function is_callable; diff --git a/src/AmoCRM/Models/Chats/Templates/Buttons/AbstractButtonModel.php b/src/AmoCRM/Models/Chats/Templates/Buttons/AbstractButtonModel.php index 4e4af6e0..76ec8be1 100644 --- a/src/AmoCRM/Models/Chats/Templates/Buttons/AbstractButtonModel.php +++ b/src/AmoCRM/Models/Chats/Templates/Buttons/AbstractButtonModel.php @@ -7,7 +7,7 @@ use AmoCRM\Enum\Chats\Templates\Buttons\ButtonsEnums; use AmoCRM\Exceptions\InvalidArgumentException; use AmoCRM\Models\BaseApiModel; -use Illuminate\Contracts\Support\Arrayable; +use AmoCRM\Contracts\Support\Arrayable; /** * Class AbstractButtonModel diff --git a/src/AmoCRM/Models/CustomFields/EnumModel.php b/src/AmoCRM/Models/CustomFields/EnumModel.php index c81b3f8b..80f48f9c 100644 --- a/src/AmoCRM/Models/CustomFields/EnumModel.php +++ b/src/AmoCRM/Models/CustomFields/EnumModel.php @@ -3,7 +3,7 @@ namespace AmoCRM\Models\CustomFields; use AmoCRM\Models\BaseApiModel; -use Illuminate\Contracts\Support\Arrayable; +use AmoCRM\Contracts\Support\Arrayable; /** * Class EnumModel diff --git a/src/AmoCRM/Models/CustomFields/NestedModel.php b/src/AmoCRM/Models/CustomFields/NestedModel.php index ce91a253..b98d71a9 100644 --- a/src/AmoCRM/Models/CustomFields/NestedModel.php +++ b/src/AmoCRM/Models/CustomFields/NestedModel.php @@ -4,7 +4,7 @@ use AmoCRM\Exceptions\InvalidArgumentException; use AmoCRM\Models\BaseApiModel; -use Illuminate\Contracts\Support\Arrayable; +use AmoCRM\Contracts\Support\Arrayable; use function is_null; use function preg_match; diff --git a/src/AmoCRM/Models/CustomFields/RequiredStatusModel.php b/src/AmoCRM/Models/CustomFields/RequiredStatusModel.php index 5f7cfd5f..cab9ccec 100644 --- a/src/AmoCRM/Models/CustomFields/RequiredStatusModel.php +++ b/src/AmoCRM/Models/CustomFields/RequiredStatusModel.php @@ -3,7 +3,7 @@ namespace AmoCRM\Models\CustomFields; use AmoCRM\Models\BaseApiModel; -use Illuminate\Contracts\Support\Arrayable; +use AmoCRM\Contracts\Support\Arrayable; /** * Class RequiredStatusModel diff --git a/src/AmoCRM/Models/Customers/Statuses/StatusModel.php b/src/AmoCRM/Models/Customers/Statuses/StatusModel.php index f6038ee7..11970e84 100644 --- a/src/AmoCRM/Models/Customers/Statuses/StatusModel.php +++ b/src/AmoCRM/Models/Customers/Statuses/StatusModel.php @@ -5,7 +5,7 @@ use AmoCRM\Models\BaseApiModel; use AmoCRM\Models\Interfaces\HasIdInterface; use AmoCRM\Models\Traits\RequestIdTrait; -use Illuminate\Contracts\Support\Arrayable; +use AmoCRM\Contracts\Support\Arrayable; class StatusModel extends BaseApiModel implements Arrayable, HasIdInterface { diff --git a/src/AmoCRM/Models/Leads/Pipelines/PipelineModel.php b/src/AmoCRM/Models/Leads/Pipelines/PipelineModel.php index a5001fca..184f6778 100644 --- a/src/AmoCRM/Models/Leads/Pipelines/PipelineModel.php +++ b/src/AmoCRM/Models/Leads/Pipelines/PipelineModel.php @@ -9,7 +9,7 @@ use AmoCRM\Models\Interfaces\HasIdInterface; use AmoCRM\Models\Leads\Pipelines\Statuses\StatusModel; use AmoCRM\Models\Traits\RequestIdTrait; -use Illuminate\Contracts\Support\Arrayable; +use AmoCRM\Contracts\Support\Arrayable; class PipelineModel extends BaseApiModel implements Arrayable, HasIdInterface { diff --git a/src/AmoCRM/Models/Leads/Pipelines/Statuses/StatusModel.php b/src/AmoCRM/Models/Leads/Pipelines/Statuses/StatusModel.php index 95cb90e4..66f2d519 100644 --- a/src/AmoCRM/Models/Leads/Pipelines/Statuses/StatusModel.php +++ b/src/AmoCRM/Models/Leads/Pipelines/Statuses/StatusModel.php @@ -5,7 +5,7 @@ use AmoCRM\Models\BaseApiModel; use AmoCRM\Models\Interfaces\HasIdInterface; use AmoCRM\Models\Traits\RequestIdTrait; -use Illuminate\Contracts\Support\Arrayable; +use AmoCRM\Contracts\Support\Arrayable; class StatusModel extends BaseApiModel implements Arrayable, HasIdInterface { diff --git a/src/AmoCRM/Models/NoteModel.php b/src/AmoCRM/Models/NoteModel.php index 3b429564..bfbd0b5f 100644 --- a/src/AmoCRM/Models/NoteModel.php +++ b/src/AmoCRM/Models/NoteModel.php @@ -5,7 +5,7 @@ use AmoCRM\Models\Factories\NoteFactory; use AmoCRM\Models\Interfaces\HasIdInterface; use AmoCRM\Models\Traits\RequestIdTrait; -use Illuminate\Contracts\Support\Arrayable; +use AmoCRM\Contracts\Support\Arrayable; /** * Class NoteModel diff --git a/src/AmoCRM/Models/SourceModel.php b/src/AmoCRM/Models/SourceModel.php index 26d2372f..7c189780 100644 --- a/src/AmoCRM/Models/SourceModel.php +++ b/src/AmoCRM/Models/SourceModel.php @@ -5,7 +5,7 @@ use AmoCRM\Collections\Sources\SourceServicesCollection; use AmoCRM\Models\Interfaces\HasIdInterface; use AmoCRM\Models\Traits\RequestIdTrait; -use Illuminate\Contracts\Support\Arrayable; +use AmoCRM\Contracts\Support\Arrayable; class SourceModel extends BaseApiModel implements Arrayable, HasIdInterface { diff --git a/src/AmoCRM/Models/Sources/SourceServiceModel.php b/src/AmoCRM/Models/Sources/SourceServiceModel.php index d2bc6ae3..a9a7fed9 100644 --- a/src/AmoCRM/Models/Sources/SourceServiceModel.php +++ b/src/AmoCRM/Models/Sources/SourceServiceModel.php @@ -4,7 +4,7 @@ use AmoCRM\Collections\Sources\SourceServicesPagesCollection; use AmoCRM\Models\BaseApiModel; -use Illuminate\Contracts\Support\Arrayable; +use AmoCRM\Contracts\Support\Arrayable; class SourceServiceModel extends BaseApiModel implements Arrayable { diff --git a/src/AmoCRM/Models/Sources/SourceServicePageModel.php b/src/AmoCRM/Models/Sources/SourceServicePageModel.php index 94fce830..82311882 100644 --- a/src/AmoCRM/Models/Sources/SourceServicePageModel.php +++ b/src/AmoCRM/Models/Sources/SourceServicePageModel.php @@ -3,7 +3,7 @@ namespace AmoCRM\Models\Sources; use AmoCRM\Models\BaseApiModel; -use Illuminate\Contracts\Support\Arrayable; +use AmoCRM\Contracts\Support\Arrayable; class SourceServicePageModel extends BaseApiModel implements Arrayable { diff --git a/src/AmoCRM/Models/TagModel.php b/src/AmoCRM/Models/TagModel.php index 83bea809..6aeeb383 100644 --- a/src/AmoCRM/Models/TagModel.php +++ b/src/AmoCRM/Models/TagModel.php @@ -9,7 +9,7 @@ use AmoCRM\Models\Interfaces\EntityApiInterface; use AmoCRM\Models\Interfaces\HasIdInterface; use AmoCRM\Models\Traits\RequestIdTrait; -use Illuminate\Contracts\Support\Arrayable; +use AmoCRM\Contracts\Support\Arrayable; use function in_array; diff --git a/src/AmoCRM/Models/Unsorted/AcceptUnsortedModel.php b/src/AmoCRM/Models/Unsorted/AcceptUnsortedModel.php index abef1396..8e12d9a9 100644 --- a/src/AmoCRM/Models/Unsorted/AcceptUnsortedModel.php +++ b/src/AmoCRM/Models/Unsorted/AcceptUnsortedModel.php @@ -6,7 +6,7 @@ use AmoCRM\Collections\CompaniesCollection; use AmoCRM\Collections\ContactsCollection; use AmoCRM\Collections\Leads\LeadsCollection; -use Illuminate\Contracts\Support\Arrayable; +use AmoCRM\Contracts\Support\Arrayable; /** * Class AcceptUnsortedModel diff --git a/src/AmoCRM/Models/Unsorted/ChatsMetadata.php b/src/AmoCRM/Models/Unsorted/ChatsMetadata.php index da2c7705..506b2f3a 100644 --- a/src/AmoCRM/Models/Unsorted/ChatsMetadata.php +++ b/src/AmoCRM/Models/Unsorted/ChatsMetadata.php @@ -4,7 +4,7 @@ use AmoCRM\Models\Unsorted\Interfaces\UnsortedMetadataInterface; use AmoCRM\Models\BaseApiModel; -use Illuminate\Contracts\Support\Arrayable; +use AmoCRM\Contracts\Support\Arrayable; class ChatsMetadata extends BaseApiModel implements Arrayable, UnsortedMetadataInterface { diff --git a/src/AmoCRM/Models/Unsorted/DeclineUnsortedModel.php b/src/AmoCRM/Models/Unsorted/DeclineUnsortedModel.php index a9d2ea35..81f6c4c7 100644 --- a/src/AmoCRM/Models/Unsorted/DeclineUnsortedModel.php +++ b/src/AmoCRM/Models/Unsorted/DeclineUnsortedModel.php @@ -6,7 +6,7 @@ use AmoCRM\Collections\CompaniesCollection; use AmoCRM\Collections\ContactsCollection; use AmoCRM\Collections\Leads\LeadsCollection; -use Illuminate\Contracts\Support\Arrayable; +use AmoCRM\Contracts\Support\Arrayable; class DeclineUnsortedModel implements Arrayable { diff --git a/src/AmoCRM/Models/Unsorted/FormsMetadata.php b/src/AmoCRM/Models/Unsorted/FormsMetadata.php index 770d202b..58623df3 100644 --- a/src/AmoCRM/Models/Unsorted/FormsMetadata.php +++ b/src/AmoCRM/Models/Unsorted/FormsMetadata.php @@ -4,7 +4,7 @@ use AmoCRM\Models\BaseApiModel; use AmoCRM\Models\Unsorted\Interfaces\UnsortedMetadataInterface; -use Illuminate\Contracts\Support\Arrayable; +use AmoCRM\Contracts\Support\Arrayable; use function array_key_exists; use function is_null; diff --git a/src/AmoCRM/Models/Unsorted/LinkUnsortedModel.php b/src/AmoCRM/Models/Unsorted/LinkUnsortedModel.php index fedcecb1..b3db8a0b 100644 --- a/src/AmoCRM/Models/Unsorted/LinkUnsortedModel.php +++ b/src/AmoCRM/Models/Unsorted/LinkUnsortedModel.php @@ -6,7 +6,7 @@ use AmoCRM\Collections\CompaniesCollection; use AmoCRM\Collections\ContactsCollection; use AmoCRM\Collections\Leads\LeadsCollection; -use Illuminate\Contracts\Support\Arrayable; +use AmoCRM\Contracts\Support\Arrayable; class LinkUnsortedModel implements Arrayable { diff --git a/src/AmoCRM/Models/Unsorted/MailMetadata.php b/src/AmoCRM/Models/Unsorted/MailMetadata.php index 97920db3..f21b7635 100644 --- a/src/AmoCRM/Models/Unsorted/MailMetadata.php +++ b/src/AmoCRM/Models/Unsorted/MailMetadata.php @@ -4,7 +4,7 @@ use AmoCRM\Models\Unsorted\Interfaces\UnsortedMetadataInterface; use AmoCRM\Models\BaseApiModel; -use Illuminate\Contracts\Support\Arrayable; +use AmoCRM\Contracts\Support\Arrayable; class MailMetadata extends BaseApiModel implements Arrayable, UnsortedMetadataInterface { diff --git a/src/AmoCRM/Models/Unsorted/SipMetadata.php b/src/AmoCRM/Models/Unsorted/SipMetadata.php index 020c8c2d..44b044fd 100644 --- a/src/AmoCRM/Models/Unsorted/SipMetadata.php +++ b/src/AmoCRM/Models/Unsorted/SipMetadata.php @@ -4,7 +4,7 @@ use AmoCRM\Models\Unsorted\Interfaces\UnsortedMetadataInterface; use AmoCRM\Models\BaseApiModel; -use Illuminate\Contracts\Support\Arrayable; +use AmoCRM\Contracts\Support\Arrayable; use function is_scalar; diff --git a/src/AmoCRM/Models/Unsorted/UnsortedSummaryModel.php b/src/AmoCRM/Models/Unsorted/UnsortedSummaryModel.php index 9006bde4..0c762cac 100644 --- a/src/AmoCRM/Models/Unsorted/UnsortedSummaryModel.php +++ b/src/AmoCRM/Models/Unsorted/UnsortedSummaryModel.php @@ -2,7 +2,7 @@ namespace AmoCRM\Models\Unsorted; -use Illuminate\Contracts\Support\Arrayable; +use AmoCRM\Contracts\Support\Arrayable; class UnsortedSummaryModel implements Arrayable { diff --git a/src/AmoCRM/Models/Widgets/SettingTemplateModel.php b/src/AmoCRM/Models/Widgets/SettingTemplateModel.php index f531b2a3..8689faeb 100644 --- a/src/AmoCRM/Models/Widgets/SettingTemplateModel.php +++ b/src/AmoCRM/Models/Widgets/SettingTemplateModel.php @@ -3,7 +3,7 @@ namespace AmoCRM\Models\Widgets; use AmoCRM\Models\BaseApiModel; -use Illuminate\Contracts\Support\Arrayable; +use AmoCRM\Contracts\Support\Arrayable; class SettingTemplateModel extends BaseApiModel implements Arrayable { diff --git a/src/AmoCRM/Support/Str.php b/src/AmoCRM/Support/Str.php new file mode 100644 index 00000000..b98376e3 --- /dev/null +++ b/src/AmoCRM/Support/Str.php @@ -0,0 +1,106 @@ +<?php + +namespace AmoCRM\Support; + +class Str +{ + /** + * The cache of camel-cased words. + * + * @var array + */ + protected static $camelCache = []; + + /** + * The cache of studly-cased words. + * + * @var array + */ + protected static $studlyCache = []; + + /** + * Convert the given string to upper-case. + * + * @param string $value + * @return string + */ + public static function upper($value) + { + return mb_strtoupper($value, 'UTF-8'); + } + + /** + * Returns the portion of the string specified by the start and length parameters. + * + * @param string $string + * @param int $start + * @param int|null $length + * @return string + */ + public static function substr($string, $start, $length = null) + { + return mb_substr($string, $start, $length, 'UTF-8'); + } + + /** + * Make a string's first character uppercase. + * + * @param string $string + * @return string + */ + public static function ucfirst($string) + { + return static::upper(static::substr($string, 0, 1)) . static::substr($string, 1); + } + + /** + * Convert a value to studly caps case. + * + * @param string $value + * @return string + */ + public static function studly($value) + { + $key = $value; + + if (isset(static::$studlyCache[$key])) { + return static::$studlyCache[$key]; + } + + $words = explode(' ', static::replace(['-', '_'], ' ', $value)); + + $studlyWords = array_map(function ($word) { + return static::ucfirst($word); + }, $words); + + return static::$studlyCache[$key] = implode($studlyWords); + } + + /** + * Convert a value to camel case. + * + * @param string $value + * @return string + */ + public static function camel($value) + { + if (isset(static::$camelCache[$value])) { + return static::$camelCache[$value]; + } + + return static::$camelCache[$value] = lcfirst(static::studly($value)); + } + + /** + * Replace the given value in the given string. + * + * @param string|string[] $search + * @param string|string[] $replace + * @param string|string[] $subject + * @return string + */ + public static function replace($search, $replace, $subject) + { + return str_replace($search, $replace, $subject); + } +}