diff --git a/composer.json b/composer.json index bda61cbbb..dc64a55af 100755 --- a/composer.json +++ b/composer.json @@ -19,7 +19,9 @@ "ext-tokenizer": "*", "algolia/algoliasearch-client-php": "^2.2", "astrotomic/laravel-translatable": "^11.0.0", + "aws/aws-sdk-php": "^3.171", "babenkoivan/elastic-scout-driver": "^1.1", + "bagisto/bagisto-package-generator": "9999999-dev", "bagistobrasil/bagisto-product-social-share": "^0.1.2", "barryvdh/laravel-debugbar": "^3.1", "barryvdh/laravel-dompdf": "0.8.6", @@ -109,7 +111,8 @@ "Webkul\\Velocity\\": "packages/Webkul/Velocity/src", "Webkul\\BookingProduct\\": "packages/Webkul/BookingProduct/src", "Webkul\\SocialLogin\\": "packages/Webkul/SocialLogin/src", - "Webkul\\DebugBar\\": "packages/Webkul/DebugBar/src" + "Webkul\\DebugBar\\": "packages/Webkul/DebugBar/src", + "Webkul\\Marketing\\": "packages/Webkul/Marketing/src" } }, diff --git a/composer.lock b/composer.lock index 93cffc317..367169b8b 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "35194c542c75bb48f7c73bcc0197ab2b", + "content-hash": "60d4ebe6f1f391967ac8ab70925d01ef", "packages": [ { "name": "algolia/algoliasearch-client-php", @@ -74,6 +74,10 @@ "php", "search" ], + "support": { + "issues": "https://github.com/algolia/algoliasearch-client-php/issues", + "source": "https://github.com/algolia/algoliasearch-client-php/tree/2.7.3" + }, "time": "2020-12-22T11:27:03+00:00" }, { @@ -139,8 +143,118 @@ "laravel", "translation" ], + "support": { + "docs": "https://docs.astrotomic.info/laravel-translatable", + "email": "dev@astrotomic.info", + "issues": "https://github.com/Astrotomic/laravel-translatable/issues", + "source": "https://github.com/Astrotomic/laravel-translatable" + }, + "funding": [ + { + "url": "https://offset.earth/treeware", + "type": "custom" + }, + { + "url": "https://github.com/Gummibeer", + "type": "github" + }, + { + "url": "https://issuehunt.io/r/astrotomic", + "type": "issuehunt" + } + ], "time": "2020-11-19T14:10:38+00:00" }, + { + "name": "aws/aws-sdk-php", + "version": "3.171.10", + "source": { + "type": "git", + "url": "https://github.com/aws/aws-sdk-php.git", + "reference": "ba12cbba6b7ae8f2aab741e5ac47e8bb30d3eac7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/ba12cbba6b7ae8f2aab741e5ac47e8bb30d3eac7", + "reference": "ba12cbba6b7ae8f2aab741e5ac47e8bb30d3eac7", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-pcre": "*", + "ext-simplexml": "*", + "guzzlehttp/guzzle": "^5.3.3|^6.2.1|^7.0", + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.4.1", + "mtdowling/jmespath.php": "^2.5", + "php": ">=5.5" + }, + "require-dev": { + "andrewsville/php-token-reflection": "^1.4", + "aws/aws-php-sns-message-validator": "~1.0", + "behat/behat": "~3.0", + "doctrine/cache": "~1.4", + "ext-dom": "*", + "ext-openssl": "*", + "ext-pcntl": "*", + "ext-sockets": "*", + "nette/neon": "^2.3", + "paragonie/random_compat": ">= 2", + "phpunit/phpunit": "^4.8.35|^5.4.3", + "psr/cache": "^1.0", + "psr/simple-cache": "^1.0", + "sebastian/comparator": "^1.2.3" + }, + "suggest": { + "aws/aws-php-sns-message-validator": "To validate incoming SNS notifications", + "doctrine/cache": "To use the DoctrineCacheAdapter", + "ext-curl": "To send requests using cURL", + "ext-openssl": "Allows working with CloudFront private distributions and verifying received SNS messages", + "ext-sockets": "To use client-side monitoring" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "Aws\\": "src/" + }, + "files": [ + "src/functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Amazon Web Services", + "homepage": "http://aws.amazon.com" + } + ], + "description": "AWS SDK for PHP - Use Amazon Web Services in your PHP project", + "homepage": "http://aws.amazon.com/sdkforphp", + "keywords": [ + "amazon", + "aws", + "cloud", + "dynamodb", + "ec2", + "glacier", + "s3", + "sdk" + ], + "support": { + "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", + "issues": "https://github.com/aws/aws-sdk-php/issues", + "source": "https://github.com/aws/aws-sdk-php/tree/3.171.10" + }, + "time": "2020-12-31T19:13:37+00:00" + }, { "name": "babenkoivan/elastic-adapter", "version": "v1.9.0", @@ -188,6 +302,10 @@ "elasticsearch", "php" ], + "support": { + "issues": "https://github.com/babenkoivan/elastic-adapter/issues", + "source": "https://github.com/babenkoivan/elastic-adapter/tree/v1.9.0" + }, "time": "2020-11-14T15:09:00+00:00" }, { @@ -245,6 +363,10 @@ "laravel", "php" ], + "support": { + "issues": "https://github.com/babenkoivan/elastic-client/issues", + "source": "https://github.com/babenkoivan/elastic-client/tree/ci-improvements" + }, "time": "2020-07-09T10:19:44+00:00" }, { @@ -306,8 +428,58 @@ "php", "scout" ], + "support": { + "issues": "https://github.com/babenkoivan/elastic-scout-driver/issues", + "source": "https://github.com/babenkoivan/elastic-scout-driver/tree/v1.2.1" + }, "time": "2020-12-10T15:10:19+00:00" }, + { + "name": "bagisto/bagisto-package-generator", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/bagisto/bagisto-package-generator.git", + "reference": "0b545b26ab47941dbdd319e9222404603a9b8de6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bagisto/bagisto-package-generator/zipball/0b545b26ab47941dbdd319e9222404603a9b8de6", + "reference": "0b545b26ab47941dbdd319e9222404603a9b8de6", + "shasum": "" + }, + "default-branch": true, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Webkul\\PackageGenerator\\Providers\\PackageGeneratorServiceProvider" + ], + "aliases": [] + } + }, + "autoload": { + "psr-4": { + "Webkul\\PackageGenerator\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jitendra Singh", + "email": "jitendra@webkul.com" + } + ], + "description": "Bagisto Package Generator", + "support": { + "issues": "https://github.com/bagisto/bagisto-package-generator/issues", + "source": "https://github.com/bagisto/bagisto-package-generator/tree/master" + }, + "time": "2020-08-24T08:41:44+00:00" + }, { "name": "bagistobrasil/bagisto-product-social-share", "version": "0.1.2", @@ -346,6 +518,10 @@ "email": "contato@carlosgartner.com.br" } ], + "support": { + "issues": "https://github.com/bagistobrasil/bagisto-product-social-share/issues", + "source": "https://github.com/bagistobrasil/bagisto-product-social-share/tree/0.1.2" + }, "time": "2020-08-04T12:36:28+00:00" }, { @@ -416,6 +592,16 @@ "profiler", "webprofiler" ], + "support": { + "issues": "https://github.com/barryvdh/laravel-debugbar/issues", + "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.5.1" + }, + "funding": [ + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], "time": "2020-09-07T19:32:39+00:00" }, { @@ -472,6 +658,10 @@ "laravel", "pdf" ], + "support": { + "issues": "https://github.com/barryvdh/laravel-dompdf/issues", + "source": "https://github.com/barryvdh/laravel-dompdf/tree/v0.8.6" + }, "time": "2020-02-25T20:44:34+00:00" }, { @@ -518,6 +708,16 @@ "brick", "math" ], + "support": { + "issues": "https://github.com/brick/math/issues", + "source": "https://github.com/brick/math/tree/master" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/brick/math", + "type": "tidelift" + } + ], "time": "2020-08-18T23:57:15+00:00" }, { @@ -551,6 +751,10 @@ "MIT" ], "description": "implementation of xdg base directory specification for php", + "support": { + "issues": "https://github.com/dnoegel/php-xdg-base-dir/issues", + "source": "https://github.com/dnoegel/php-xdg-base-dir/tree/v0.1.1" + }, "time": "2019-12-04T15:06:13+00:00" }, { @@ -633,6 +837,24 @@ "redis", "xcache" ], + "support": { + "issues": "https://github.com/doctrine/cache/issues", + "source": "https://github.com/doctrine/cache/tree/1.10.x" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache", + "type": "tidelift" + } + ], "time": "2020-07-07T18:54:01+00:00" }, { @@ -715,6 +937,10 @@ "php", "queryobject" ], + "support": { + "issues": "https://github.com/doctrine/dbal/issues", + "source": "https://github.com/doctrine/dbal/tree/2.9" + }, "time": "2018-12-31T03:27:51+00:00" }, { @@ -791,6 +1017,24 @@ "event system", "events" ], + "support": { + "issues": "https://github.com/doctrine/event-manager/issues", + "source": "https://github.com/doctrine/event-manager/tree/1.1.x" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fevent-manager", + "type": "tidelift" + } + ], "time": "2020-05-29T18:28:51+00:00" }, { @@ -868,6 +1112,24 @@ "uppercase", "words" ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.0.x" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" + } + ], "time": "2020-05-29T15:13:26+00:00" }, { @@ -930,6 +1192,24 @@ "parser", "php" ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/1.2.1" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], "time": "2020-05-25T17:44:05+00:00" }, { @@ -998,6 +1278,10 @@ ], "description": "DOMPDF is a CSS 2.1 compliant HTML to PDF converter", "homepage": "https://github.com/dompdf/dompdf", + "support": { + "issues": "https://github.com/dompdf/dompdf/issues", + "source": "https://github.com/dompdf/dompdf/tree/master" + }, "time": "2020-08-30T22:54:22+00:00" }, { @@ -1052,20 +1336,30 @@ "cron", "schedule" ], + "support": { + "issues": "https://github.com/dragonmantank/cron-expression/issues", + "source": "https://github.com/dragonmantank/cron-expression/tree/v2.3.1" + }, + "funding": [ + { + "url": "https://github.com/dragonmantank", + "type": "github" + } + ], "time": "2020-10-13T00:52:37+00:00" }, { "name": "egulias/email-validator", - "version": "2.1.24", + "version": "2.1.25", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "ca90a3291eee1538cd48ff25163240695bd95448" + "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ca90a3291eee1538cd48ff25163240695bd95448", - "reference": "ca90a3291eee1538cd48ff25163240695bd95448", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/0dbf5d78455d4d6a41d186da50adc1122ec066f4", + "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4", "shasum": "" }, "require": { @@ -1110,7 +1404,17 @@ "validation", "validator" ], - "time": "2020-11-14T15:56:27+00:00" + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/2.1.25" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2020-12-29T14:50:06+00:00" }, { "name": "elasticsearch/elasticsearch", @@ -1175,6 +1479,10 @@ "elasticsearch", "search" ], + "support": { + "issues": "https://github.com/elastic/elasticsearch-php/issues", + "source": "https://github.com/elastic/elasticsearch-php/tree/v7.10.0" + }, "time": "2020-11-11T16:31:00+00:00" }, { @@ -1225,6 +1533,9 @@ "Guzzle", "stream" ], + "support": { + "source": "https://github.com/ezimuel/guzzlestreams/tree/3.0.1" + }, "time": "2020-02-14T23:11:50+00:00" }, { @@ -1276,8 +1587,65 @@ } ], "description": "Fork of guzzle/RingPHP (abandoned) to be used with elasticsearch-php", + "support": { + "source": "https://github.com/ezimuel/ringphp/tree/1.1.2" + }, "time": "2020-02-14T23:51:21+00:00" }, + { + "name": "ezyang/htmlpurifier", + "version": "v4.13.0", + "source": { + "type": "git", + "url": "https://github.com/ezyang/htmlpurifier.git", + "reference": "08e27c97e4c6ed02f37c5b2b20488046c8d90d75" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/08e27c97e4c6ed02f37c5b2b20488046c8d90d75", + "reference": "08e27c97e4c6ed02f37c5b2b20488046c8d90d75", + "shasum": "" + }, + "require": { + "php": ">=5.2" + }, + "require-dev": { + "simpletest/simpletest": "dev-master#72de02a7b80c6bb8864ef9bf66d41d2f58f826bd" + }, + "type": "library", + "autoload": { + "psr-0": { + "HTMLPurifier": "library/" + }, + "files": [ + "library/HTMLPurifier.composer.php" + ], + "exclude-from-classmap": [ + "/library/HTMLPurifier/Language/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Edward Z. Yang", + "email": "admin@htmlpurifier.org", + "homepage": "http://ezyang.com" + } + ], + "description": "Standards compliant HTML filter written in PHP", + "homepage": "http://htmlpurifier.org/", + "keywords": [ + "html" + ], + "support": { + "issues": "https://github.com/ezyang/htmlpurifier/issues", + "source": "https://github.com/ezyang/htmlpurifier/tree/master" + }, + "time": "2020-06-29T00:56:53+00:00" + }, { "name": "fideloper/proxy", "version": "4.4.1", @@ -1330,6 +1698,10 @@ "proxy", "trusted proxy" ], + "support": { + "issues": "https://github.com/fideloper/TrustedProxy/issues", + "source": "https://github.com/fideloper/TrustedProxy/tree/4.4.1" + }, "time": "2020-10-22T13:48:01+00:00" }, { @@ -1388,6 +1760,10 @@ "laravel", "model" ], + "support": { + "issues": "https://github.com/Flynsarmy/laravel-db-blade-compiler/issues", + "source": "https://github.com/Flynsarmy/laravel-db-blade-compiler/tree/5.5.0" + }, "time": "2019-07-28T22:19:29+00:00" }, { @@ -1438,6 +1814,10 @@ "faker", "fixtures" ], + "support": { + "issues": "https://github.com/fzaninotto/Faker/issues", + "source": "https://github.com/fzaninotto/Faker/tree/v1.9.2" + }, "abandoned": true, "time": "2020-12-11T09:56:16+00:00" }, @@ -1506,6 +1886,10 @@ "rest", "web service" ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/6.5" + }, "time": "2020-06-16T21:01:06+00:00" }, { @@ -1557,6 +1941,10 @@ "keywords": [ "promise" ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/1.4.0" + }, "time": "2020-09-30T07:37:28+00:00" }, { @@ -1628,6 +2016,10 @@ "uri", "url" ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/1.7.0" + }, "time": "2020-09-30T07:37:11+00:00" }, { @@ -1698,6 +2090,10 @@ "thumbnail", "watermark" ], + "support": { + "issues": "https://github.com/Intervention/image/issues", + "source": "https://github.com/Intervention/image/tree/master" + }, "time": "2019-11-02T09:15:47+00:00" }, { @@ -1751,6 +2147,20 @@ "imagick", "laravel" ], + "support": { + "issues": "https://github.com/Intervention/imagecache/issues", + "source": "https://github.com/Intervention/imagecache/tree/2.5.1" + }, + "funding": [ + { + "url": "https://www.paypal.me/interventionphp", + "type": "custom" + }, + { + "url": "https://github.com/Intervention", + "type": "github" + } + ], "time": "2020-12-07T15:07:18+00:00" }, { @@ -1810,6 +2220,10 @@ "nested sets", "nsm" ], + "support": { + "issues": "https://github.com/lazychaser/laravel-nestedset/issues", + "source": "https://github.com/lazychaser/laravel-nestedset/tree/v5" + }, "time": "2020-03-04T05:33:20+00:00" }, { @@ -1868,6 +2282,10 @@ } ], "description": "Concord is a Laravel Extension for building modular Laravel Applications", + "support": { + "issues": "https://github.com/artkonekt/concord", + "source": "https://github.com/artkonekt/concord/tree/1.10.0" + }, "time": "2020-12-08T20:50:01+00:00" }, { @@ -1912,6 +2330,10 @@ "enum", "konekt" ], + "support": { + "issues": "https://github.com/artkonekt/enum/issues", + "source": "https://github.com/artkonekt/enum" + }, "time": "2020-11-28T21:37:27+00:00" }, { @@ -1976,6 +2398,10 @@ "konekt", "laravel" ], + "support": { + "issues": "https://github.com/artkonekt/enum-eloquent/issues", + "source": "https://github.com/artkonekt/enum-eloquent" + }, "time": "2020-11-28T22:13:08+00:00" }, { @@ -2134,20 +2560,24 @@ "framework", "laravel" ], + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, "time": "2020-12-22T17:00:45+00:00" }, { "name": "laravel/scout", - "version": "v8.5.1", + "version": "v8.5.2", "source": { "type": "git", "url": "https://github.com/laravel/scout.git", - "reference": "b8b8a35cc3ac82cbc07dfa83955492d2ef6e237b" + "reference": "ece6758b82c51ff7f5e011f243a7c6b33711a847" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/scout/zipball/b8b8a35cc3ac82cbc07dfa83955492d2ef6e237b", - "reference": "b8b8a35cc3ac82cbc07dfa83955492d2ef6e237b", + "url": "https://api.github.com/repos/laravel/scout/zipball/ece6758b82c51ff7f5e011f243a7c6b33711a847", + "reference": "ece6758b82c51ff7f5e011f243a7c6b33711a847", "shasum": "" }, "require": { @@ -2199,7 +2629,11 @@ "laravel", "search" ], - "time": "2020-12-22T17:29:20+00:00" + "support": { + "issues": "https://github.com/laravel/scout/issues", + "source": "https://github.com/laravel/scout" + }, + "time": "2020-12-30T15:52:14+00:00" }, { "name": "laravel/socialite", @@ -2264,6 +2698,10 @@ "laravel", "oauth" ], + "support": { + "issues": "https://github.com/laravel/socialite/issues", + "source": "https://github.com/laravel/socialite" + }, "time": "2020-06-03T13:30:03+00:00" }, { @@ -2328,6 +2766,10 @@ "laravel", "psysh" ], + "support": { + "issues": "https://github.com/laravel/tinker/issues", + "source": "https://github.com/laravel/tinker/tree/v2.5.0" + }, "time": "2020-10-29T13:07:12+00:00" }, { @@ -2379,6 +2821,10 @@ "laravel", "ui" ], + "support": { + "issues": "https://github.com/laravel/ui/issues", + "source": "https://github.com/laravel/ui/tree/v2.5.0" + }, "time": "2020-11-03T19:45:19+00:00" }, { @@ -2434,6 +2880,20 @@ "JWS", "jwt" ], + "support": { + "issues": "https://github.com/lcobucci/jwt/issues", + "source": "https://github.com/lcobucci/jwt/tree/3.3.3" + }, + "funding": [ + { + "url": "https://github.com/lcobucci", + "type": "github" + }, + { + "url": "https://www.patreon.com/lcobucci", + "type": "patreon" + } + ], "time": "2020-08-20T13:22:28+00:00" }, { @@ -2503,6 +2963,38 @@ "md", "parser" ], + "support": { + "docs": "https://commonmark.thephpleague.com/", + "issues": "https://github.com/thephpleague/commonmark/issues", + "rss": "https://github.com/thephpleague/commonmark/releases.atom", + "source": "https://github.com/thephpleague/commonmark" + }, + "funding": [ + { + "url": "https://enjoy.gitstore.app/repositories/thephpleague/commonmark", + "type": "custom" + }, + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + }, + { + "url": "https://www.patreon.com/colinodell", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/commonmark", + "type": "tidelift" + } + ], "time": "2020-10-31T13:49:32+00:00" }, { @@ -2588,6 +3080,16 @@ "sftp", "storage" ], + "support": { + "issues": "https://github.com/thephpleague/flysystem/issues", + "source": "https://github.com/thephpleague/flysystem/tree/1.x" + }, + "funding": [ + { + "url": "https://offset.earth/frankdejonge", + "type": "other" + } + ], "time": "2020-08-23T07:39:11+00:00" }, { @@ -2629,6 +3131,20 @@ } ], "description": "Mime-type detection for Flysystem", + "support": { + "issues": "https://github.com/thephpleague/mime-type-detection/issues", + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.5.1" + }, + "funding": [ + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], "time": "2020-10-18T11:50:25+00:00" }, { @@ -2700,6 +3216,10 @@ "tumblr", "twitter" ], + "support": { + "issues": "https://github.com/thephpleague/oauth1-client/issues", + "source": "https://github.com/thephpleague/oauth1-client/tree/v1.8.2" + }, "time": "2020-09-28T09:39:08+00:00" }, { @@ -2767,6 +3287,20 @@ "php", "phpspreadsheet" ], + "support": { + "issues": "https://github.com/Maatwebsite/Laravel-Excel/issues", + "source": "https://github.com/Maatwebsite/Laravel-Excel/tree/3.1" + }, + "funding": [ + { + "url": "https://laravel-excel.com/commercial-support", + "type": "custom" + }, + { + "url": "https://github.com/patrickbrouwers", + "type": "github" + } + ], "time": "2020-02-28T15:47:45+00:00" }, { @@ -2828,6 +3362,16 @@ "stream", "zip" ], + "support": { + "issues": "https://github.com/maennchen/ZipStream-PHP/issues", + "source": "https://github.com/maennchen/ZipStream-PHP/tree/master" + }, + "funding": [ + { + "url": "https://opencollective.com/zipstream", + "type": "open_collective" + } + ], "time": "2020-05-30T13:11:16+00:00" }, { @@ -2923,6 +3467,10 @@ "complex", "mathematics" ], + "support": { + "issues": "https://github.com/MarkBaker/PHPComplex/issues", + "source": "https://github.com/MarkBaker/PHPComplex/tree/PHP8" + }, "time": "2020-08-26T10:42:07+00:00" }, { @@ -2993,6 +3541,10 @@ "matrix", "vector" ], + "support": { + "issues": "https://github.com/MarkBaker/PHPMatrix/issues", + "source": "https://github.com/MarkBaker/PHPMatrix/tree/PHP8" + }, "time": "2020-08-28T17:11:00+00:00" }, { @@ -3054,6 +3606,10 @@ "debug", "debugbar" ], + "support": { + "issues": "https://github.com/maximebf/php-debugbar/issues", + "source": "https://github.com/maximebf/php-debugbar/tree/v1.16.4" + }, "time": "2020-12-07T10:48:48+00:00" }, { @@ -3136,8 +3692,83 @@ "logging", "psr-3" ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/2.2.0" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], "time": "2020-12-14T13:15:25+00:00" }, + { + "name": "mtdowling/jmespath.php", + "version": "2.6.0", + "source": { + "type": "git", + "url": "https://github.com/jmespath/jmespath.php.git", + "reference": "42dae2cbd13154083ca6d70099692fef8ca84bfb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/42dae2cbd13154083ca6d70099692fef8ca84bfb", + "reference": "42dae2cbd13154083ca6d70099692fef8ca84bfb", + "shasum": "" + }, + "require": { + "php": "^5.4 || ^7.0 || ^8.0", + "symfony/polyfill-mbstring": "^1.17" + }, + "require-dev": { + "composer/xdebug-handler": "^1.4", + "phpunit/phpunit": "^4.8.36 || ^7.5.15" + }, + "bin": [ + "bin/jp.php" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6-dev" + } + }, + "autoload": { + "psr-4": { + "JmesPath\\": "src/" + }, + "files": [ + "src/JmesPath.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Declaratively specify how to extract elements from a JSON document", + "keywords": [ + "json", + "jsonpath" + ], + "support": { + "issues": "https://github.com/jmespath/jmespath.php/issues", + "source": "https://github.com/jmespath/jmespath.php/tree/2.6.0" + }, + "time": "2020-07-31T21:01:56+00:00" + }, { "name": "myclabs/php-enum", "version": "1.7.7", @@ -3182,6 +3813,20 @@ "keywords": [ "enum" ], + "support": { + "issues": "https://github.com/myclabs/php-enum/issues", + "source": "https://github.com/myclabs/php-enum/tree/1.7.7" + }, + "funding": [ + { + "url": "https://github.com/mnapoli", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/php-enum", + "type": "tidelift" + } + ], "time": "2020-11-14T18:14:52+00:00" }, { @@ -3245,6 +3890,10 @@ "jwt", "token" ], + "support": { + "issues": "https://github.com/namshi/jose/issues", + "source": "https://github.com/namshi/jose/tree/master" + }, "time": "2016-12-05T07:27:31+00:00" }, { @@ -3324,6 +3973,20 @@ "datetime", "time" ], + "support": { + "issues": "https://github.com/briannesbitt/Carbon/issues", + "source": "https://github.com/briannesbitt/Carbon" + }, + "funding": [ + { + "url": "https://opencollective.com/Carbon", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", + "type": "tidelift" + } + ], "time": "2020-12-17T20:55:32+00:00" }, { @@ -3376,6 +4039,10 @@ "parser", "php" ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.4" + }, "time": "2020-12-20T10:01:03+00:00" }, { @@ -3437,6 +4104,10 @@ "serialization", "serialize" ], + "support": { + "issues": "https://github.com/opis/closure/issues", + "source": "https://github.com/opis/closure/tree/3.6.1" + }, "time": "2020-11-07T02:01:34+00:00" }, { @@ -3486,6 +4157,10 @@ "rest", "sdk" ], + "support": { + "issues": "https://github.com/paypal/Checkout-PHP-SDK/issues", + "source": "https://github.com/paypal/Checkout-PHP-SDK/tree/1.0.1" + }, "time": "2019-11-07T23:16:44+00:00" }, { @@ -3525,6 +4200,10 @@ "homepage": "https://github.com/paypal/paypalhttp_php/contributors" } ], + "support": { + "issues": "https://github.com/paypal/paypalhttp_php/issues", + "source": "https://github.com/paypal/paypalhttp_php/tree/1.0.0" + }, "abandoned": true, "time": "2019-11-06T21:27:12+00:00" }, @@ -3563,6 +4242,10 @@ ], "description": "A library to read, parse, export and make subsets of different types of font files.", "homepage": "https://github.com/PhenX/php-font-lib", + "support": { + "issues": "https://github.com/PhenX/php-font-lib/issues", + "source": "https://github.com/PhenX/php-font-lib/tree/0.5.2" + }, "time": "2020-03-08T15:31:32+00:00" }, { @@ -3603,20 +4286,24 @@ ], "description": "A library to read, parse and export to PDF SVG files.", "homepage": "https://github.com/PhenX/php-svg-lib", + "support": { + "issues": "https://github.com/PhenX/php-svg-lib/issues", + "source": "https://github.com/PhenX/php-svg-lib/tree/master" + }, "time": "2019-09-11T20:02:13+00:00" }, { "name": "phpoffice/phpspreadsheet", - "version": "1.15.0", + "version": "1.16.1", "source": { "type": "git", "url": "https://github.com/PHPOffice/PhpSpreadsheet.git", - "reference": "a8e8068b31b8119e1daa5b1eb5715a3a8ea8305f" + "reference": "76d4323b85129d0c368149c831a07a3e258b2b50" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/a8e8068b31b8119e1daa5b1eb5715a3a8ea8305f", - "reference": "a8e8068b31b8119e1daa5b1eb5715a3a8ea8305f", + "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/76d4323b85129d0c368149c831a07a3e258b2b50", + "reference": "76d4323b85129d0c368149c831a07a3e258b2b50", "shasum": "" }, "require": { @@ -3633,10 +4320,11 @@ "ext-xmlwriter": "*", "ext-zip": "*", "ext-zlib": "*", + "ezyang/htmlpurifier": "^4.13", "maennchen/zipstream-php": "^2.1", - "markbaker/complex": "^1.5|^2.0", - "markbaker/matrix": "^1.2|^2.0", - "php": "^7.2|^8.0", + "markbaker/complex": "^1.5||^2.0", + "markbaker/matrix": "^1.2||^2.0", + "php": "^7.2||^8.0", "psr/http-client": "^1.0", "psr/http-factory": "^1.0", "psr/simple-cache": "^1.0" @@ -3647,7 +4335,7 @@ "jpgraph/jpgraph": "^4.0", "mpdf/mpdf": "^8.0", "phpcompatibility/php-compatibility": "^9.3", - "phpunit/phpunit": "^8.5|^9.3", + "phpunit/phpunit": "^8.5||^9.3", "squizlabs/php_codesniffer": "^3.5", "tecnickcom/tcpdf": "^6.3" }, @@ -3699,7 +4387,11 @@ "xls", "xlsx" ], - "time": "2020-10-11T13:20:59+00:00" + "support": { + "issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues", + "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/1.16.1" + }, + "time": "2020-12-31T18:03:49+00:00" }, { "name": "phpoption/phpoption", @@ -3754,6 +4446,20 @@ "php", "type" ], + "support": { + "issues": "https://github.com/schmittjoh/php-option/issues", + "source": "https://github.com/schmittjoh/php-option/tree/1.7.5" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" + } + ], "time": "2020-07-20T17:29:33+00:00" }, { @@ -3820,6 +4526,13 @@ "model", "repository" ], + "support": { + "docs": "http://andersao.github.io/l5-repository", + "email": "contato@andersonandra.de", + "issues": "https://github.com/andersao/l5-repository/issues", + "source": "https://github.com/andersao/l5-repository", + "wiki": "https://github.com/andersao/l5-repository" + }, "time": "2020-12-20T00:46:52+00:00" }, { @@ -3863,6 +4576,13 @@ "service", "validation" ], + "support": { + "docs": "http://andersao.github.io/laravel-validation", + "email": "contato@andersonandra.de", + "issues": "https://github.com/andersao/laravel-validation/issues", + "source": "https://github.com/andersao/laravel-validation", + "wiki": "https://github.com/andersao/laravel-validation" + }, "time": "2020-09-21T20:20:45+00:00" }, { @@ -3912,6 +4632,10 @@ "container-interop", "psr" ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/master" + }, "time": "2017-02-14T16:28:37+00:00" }, { @@ -3958,6 +4682,10 @@ "psr", "psr-14" ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, "time": "2019-01-08T18:20:26+00:00" }, { @@ -4007,6 +4735,9 @@ "psr", "psr-18" ], + "support": { + "source": "https://github.com/php-fig/http-client/tree/master" + }, "time": "2020-06-29T06:28:15+00:00" }, { @@ -4059,6 +4790,9 @@ "request", "response" ], + "support": { + "source": "https://github.com/php-fig/http-factory/tree/master" + }, "time": "2019-04-30T12:38:16+00:00" }, { @@ -4109,6 +4843,9 @@ "request", "response" ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/master" + }, "time": "2016-08-06T14:39:51+00:00" }, { @@ -4156,6 +4893,9 @@ "psr", "psr-3" ], + "support": { + "source": "https://github.com/php-fig/log/tree/1.1.3" + }, "time": "2020-03-23T09:12:05+00:00" }, { @@ -4204,6 +4944,9 @@ "psr-16", "simple-cache" ], + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/master" + }, "time": "2017-10-23T01:57:42+00:00" }, { @@ -4276,6 +5019,10 @@ "interactive", "shell" ], + "support": { + "issues": "https://github.com/bobthecow/psysh/issues", + "source": "https://github.com/bobthecow/psysh/tree/v0.10.5" + }, "time": "2020-12-04T02:51:30+00:00" }, { @@ -4316,6 +5063,10 @@ } ], "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, "time": "2019-03-08T08:55:37+00:00" }, { @@ -4379,6 +5130,16 @@ "queue", "set" ], + "support": { + "issues": "https://github.com/ramsey/collection/issues", + "source": "https://github.com/ramsey/collection/tree/1.1.1" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + } + ], "time": "2020-09-10T20:58:17+00:00" }, { @@ -4460,6 +5221,17 @@ "identifier", "uuid" ], + "support": { + "issues": "https://github.com/ramsey/uuid/issues", + "rss": "https://github.com/ramsey/uuid/releases.atom", + "source": "https://github.com/ramsey/uuid" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + } + ], "time": "2020-08-18T17:17:46+00:00" }, { @@ -4506,6 +5278,10 @@ "promise", "promises" ], + "support": { + "issues": "https://github.com/reactphp/promise/issues", + "source": "https://github.com/reactphp/promise/tree/v2.8.0" + }, "time": "2020-05-12T15:16:56+00:00" }, { @@ -4551,6 +5327,10 @@ "parser", "stylesheet" ], + "support": { + "issues": "https://github.com/sabberworm/PHP-CSS-Parser/issues", + "source": "https://github.com/sabberworm/PHP-CSS-Parser/tree/8.3.1" + }, "time": "2020-06-01T09:10:00+00:00" }, { @@ -4612,6 +5392,20 @@ "mail", "mailer" ], + "support": { + "issues": "https://github.com/swiftmailer/swiftmailer/issues", + "source": "https://github.com/swiftmailer/swiftmailer/tree/v6.2.4" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/swiftmailer/swiftmailer", + "type": "tidelift" + } + ], "time": "2020-12-08T18:02:06+00:00" }, { @@ -4692,6 +5486,23 @@ "console", "terminal" ], + "support": { + "source": "https://github.com/symfony/console/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], "time": "2020-12-18T08:03:05+00:00" }, { @@ -4740,6 +5551,23 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/css-selector/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], "time": "2020-12-08T17:02:38+00:00" }, { @@ -4792,6 +5620,23 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/debug/tree/v4.4.18" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], "time": "2020-12-10T16:34:26+00:00" }, { @@ -4842,6 +5687,23 @@ ], "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/master" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], "time": "2020-09-07T11:33:47+00:00" }, { @@ -4894,6 +5756,23 @@ ], "description": "Symfony ErrorHandler Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/error-handler/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], "time": "2020-12-09T18:54:12+00:00" }, { @@ -4962,6 +5841,23 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], "time": "2020-12-18T08:03:05+00:00" }, { @@ -5024,6 +5920,23 @@ "interoperability", "standards" ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], "time": "2020-09-07T11:33:47+00:00" }, { @@ -5068,6 +5981,23 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], "time": "2020-12-08T17:02:38+00:00" }, { @@ -5130,6 +6060,23 @@ "interoperability", "standards" ], + "support": { + "source": "https://github.com/symfony/http-client-contracts/tree/v2.3.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], "time": "2020-10-14T17:08:19+00:00" }, { @@ -5186,6 +6133,23 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], "time": "2020-12-18T10:00:10+00:00" }, { @@ -5281,6 +6245,23 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], "time": "2020-12-18T13:49:39+00:00" }, { @@ -5344,6 +6325,23 @@ "mime", "mime-type" ], + "support": { + "source": "https://github.com/symfony/mime/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], "time": "2020-12-09T18:54:12+00:00" }, { @@ -5406,6 +6404,23 @@ "polyfill", "portable" ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.20.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], "time": "2020-10-23T14:02:19+00:00" }, { @@ -5469,6 +6484,23 @@ "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-iconv/tree/v1.20.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], "time": "2020-10-23T14:02:19+00:00" }, { @@ -5533,6 +6565,23 @@ "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.20.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], "time": "2020-10-23T14:02:19+00:00" }, { @@ -5603,6 +6652,23 @@ "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.20.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], "time": "2020-10-23T14:02:19+00:00" }, { @@ -5670,6 +6736,23 @@ "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.20.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], "time": "2020-10-23T14:02:19+00:00" }, { @@ -5733,6 +6816,23 @@ "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.20.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], "time": "2020-10-23T14:02:19+00:00" }, { @@ -5784,6 +6884,23 @@ "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-php56/tree/v1.20.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], "time": "2020-10-23T14:02:19+00:00" }, { @@ -5843,6 +6960,23 @@ "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-php72/tree/v1.20.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], "time": "2020-10-23T14:02:19+00:00" }, { @@ -5905,6 +7039,23 @@ "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-php73/tree/v1.20.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], "time": "2020-10-23T14:02:19+00:00" }, { @@ -5971,6 +7122,23 @@ "portable", "shim" ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.20.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], "time": "2020-10-23T14:02:19+00:00" }, { @@ -6016,6 +7184,23 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], "time": "2020-12-08T17:03:37+00:00" }, { @@ -6089,6 +7274,23 @@ "uri", "url" ], + "support": { + "source": "https://github.com/symfony/routing/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], "time": "2020-12-08T17:03:37+00:00" }, { @@ -6151,6 +7353,23 @@ "interoperability", "standards" ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/master" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], "time": "2020-09-07T11:33:47+00:00" }, { @@ -6217,6 +7436,23 @@ "utf-8", "utf8" ], + "support": { + "source": "https://github.com/symfony/string/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], "time": "2020-12-05T07:33:16+00:00" }, { @@ -6293,6 +7529,23 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/translation/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], "time": "2020-12-08T17:03:37+00:00" }, { @@ -6354,6 +7607,23 @@ "interoperability", "standards" ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v2.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], "time": "2020-09-28T13:05:58+00:00" }, { @@ -6425,6 +7695,23 @@ "debug", "dump" ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], "time": "2020-12-16T17:02:19+00:00" }, { @@ -6474,6 +7761,10 @@ ], "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", + "support": { + "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.3" + }, "time": "2020-07-13T06:12:54+00:00" }, { @@ -6548,6 +7839,16 @@ "jwt", "laravel" ], + "support": { + "issues": "https://github.com/tymondesigns/jwt-auth/issues", + "source": "https://github.com/tymondesigns/jwt-auth" + }, + "funding": [ + { + "url": "https://www.patreon.com/seantymon", + "type": "patreon" + } + ], "time": "2020-11-27T12:32:42+00:00" }, { @@ -6612,6 +7913,20 @@ "env", "environment" ], + "support": { + "issues": "https://github.com/vlucas/phpdotenv/issues", + "source": "https://github.com/vlucas/phpdotenv/tree/4.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], "time": "2020-07-14T19:22:52+00:00" }, { @@ -6660,6 +7975,32 @@ "clean", "php" ], + "support": { + "issues": "https://github.com/voku/portable-ascii/issues", + "source": "https://github.com/voku/portable-ascii/tree/1.5.6" + }, + "funding": [ + { + "url": "https://www.paypal.me/moelleken", + "type": "custom" + }, + { + "url": "https://github.com/voku", + "type": "github" + }, + { + "url": "https://opencollective.com/portable-ascii", + "type": "open_collective" + }, + { + "url": "https://www.patreon.com/voku", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", + "type": "tidelift" + } + ], "time": "2020-11-12T00:07:28+00:00" } ], @@ -6721,6 +8062,10 @@ "gherkin", "parser" ], + "support": { + "issues": "https://github.com/Behat/Gherkin/issues", + "source": "https://github.com/Behat/Gherkin/tree/master" + }, "time": "2020-03-17T14:03:26+00:00" }, { @@ -6806,6 +8151,10 @@ "functional testing", "unit testing" ], + "support": { + "issues": "https://github.com/Codeception/Codeception/issues", + "source": "https://github.com/Codeception/Codeception/tree/4.0" + }, "time": "2020-02-19T16:56:20+00:00" }, { @@ -6856,20 +8205,24 @@ "keywords": [ "codeception" ], + "support": { + "issues": "https://github.com/Codeception/lib-asserts/issues", + "source": "https://github.com/Codeception/lib-asserts/tree/1.13.2" + }, "time": "2020-10-21T16:26:20+00:00" }, { "name": "codeception/lib-innerbrowser", - "version": "1.3.4", + "version": "1.3.5", "source": { "type": "git", "url": "https://github.com/Codeception/lib-innerbrowser.git", - "reference": "fd921e089147057b456ca3660de72112167e40a4" + "reference": "956101b060a0d898a1ed8c106fd4d81adf25fd87" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/lib-innerbrowser/zipball/fd921e089147057b456ca3660de72112167e40a4", - "reference": "fd921e089147057b456ca3660de72112167e40a4", + "url": "https://api.github.com/repos/Codeception/lib-innerbrowser/zipball/956101b060a0d898a1ed8c106fd4d81adf25fd87", + "reference": "956101b060a0d898a1ed8c106fd4d81adf25fd87", "shasum": "" }, "require": { @@ -6912,7 +8265,11 @@ "keywords": [ "codeception" ], - "time": "2020-10-22T05:45:03+00:00" + "support": { + "issues": "https://github.com/Codeception/lib-innerbrowser/issues", + "source": "https://github.com/Codeception/lib-innerbrowser/tree/1.3.5" + }, + "time": "2021-01-02T18:59:34+00:00" }, { "name": "codeception/module-asserts", @@ -6965,6 +8322,10 @@ "asserts", "codeception" ], + "support": { + "issues": "https://github.com/Codeception/module-asserts/issues", + "source": "https://github.com/Codeception/module-asserts/tree/1.3.1" + }, "time": "2020-10-21T16:48:15+00:00" }, { @@ -7013,6 +8374,10 @@ "codeception", "filesystem" ], + "support": { + "issues": "https://github.com/Codeception/module-filesystem/issues", + "source": "https://github.com/Codeception/module-filesystem/tree/1.0.3" + }, "time": "2020-10-24T14:46:40+00:00" }, { @@ -7062,6 +8427,10 @@ "codeception", "laravel5" ], + "support": { + "issues": "https://github.com/Codeception/module-laravel5/issues", + "source": "https://github.com/Codeception/module-laravel5/tree/1.1.1" + }, "time": "2020-10-28T07:00:17+00:00" }, { @@ -7114,20 +8483,24 @@ "browser-testing", "codeception" ], + "support": { + "issues": "https://github.com/Codeception/module-webdriver/issues", + "source": "https://github.com/Codeception/module-webdriver/tree/1.1.4" + }, "time": "2020-11-16T06:50:15+00:00" }, { "name": "codeception/phpunit-wrapper", - "version": "8.1.3", + "version": "8.1.4", "source": { "type": "git", "url": "https://github.com/Codeception/phpunit-wrapper.git", - "reference": "8c2c9b49d20b6e2d61e926a16b1bf2cee5f4db9c" + "reference": "f41335f0b4dd17cf7bbc63e87943b3ae72a8bbc3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/phpunit-wrapper/zipball/8c2c9b49d20b6e2d61e926a16b1bf2cee5f4db9c", - "reference": "8c2c9b49d20b6e2d61e926a16b1bf2cee5f4db9c", + "url": "https://api.github.com/repos/Codeception/phpunit-wrapper/zipball/f41335f0b4dd17cf7bbc63e87943b3ae72a8bbc3", + "reference": "f41335f0b4dd17cf7bbc63e87943b3ae72a8bbc3", "shasum": "" }, "require": { @@ -7158,7 +8531,11 @@ } ], "description": "PHPUnit classes used by Codeception", - "time": "2020-10-11T18:16:48+00:00" + "support": { + "issues": "https://github.com/Codeception/phpunit-wrapper/issues", + "source": "https://github.com/Codeception/phpunit-wrapper/tree/8.1.4" + }, + "time": "2020-12-28T14:00:08+00:00" }, { "name": "codeception/stub", @@ -7188,6 +8565,10 @@ "MIT" ], "description": "Flexible Stub wrapper for PHPUnit's Mock Builder", + "support": { + "issues": "https://github.com/Codeception/Stub/issues", + "source": "https://github.com/Codeception/Stub/tree/3.7.0" + }, "time": "2020-07-03T15:54:43+00:00" }, { @@ -7239,6 +8620,24 @@ "constructor", "instantiate" ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.4.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], "time": "2020-11-10T18:47:58+00:00" }, { @@ -7288,6 +8687,10 @@ "flare", "ignition" ], + "support": { + "issues": "https://github.com/facade/ignition-contracts/issues", + "source": "https://github.com/facade/ignition-contracts/tree/1.0.2" + }, "time": "2020-10-16T08:27:54+00:00" }, { @@ -7349,6 +8752,10 @@ "throwable", "whoops" ], + "support": { + "issues": "https://github.com/filp/whoops/issues", + "source": "https://github.com/filp/whoops/tree/2.9.1" + }, "time": "2020-11-01T12:00:00+00:00" }, { @@ -7396,6 +8803,10 @@ "keywords": [ "test" ], + "support": { + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" + }, "time": "2020-07-09T08:09:16+00:00" }, { @@ -7464,6 +8875,10 @@ "test double", "testing" ], + "support": { + "issues": "https://github.com/mockery/mockery/issues", + "source": "https://github.com/mockery/mockery/tree/master" + }, "time": "2020-08-11T18:10:13+00:00" }, { @@ -7512,6 +8927,16 @@ "object", "object graph" ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], "time": "2020-11-13T09:40:50+00:00" }, { @@ -7582,6 +9007,24 @@ "php", "symfony" ], + "support": { + "issues": "https://github.com/nunomaduro/collision/issues", + "source": "https://github.com/nunomaduro/collision" + }, + "funding": [ + { + "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], "time": "2020-10-29T15:12:23+00:00" }, { @@ -7638,6 +9081,10 @@ } ], "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/master" + }, "time": "2020-06-27T14:33:11+00:00" }, { @@ -7685,6 +9132,10 @@ } ], "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.0.4" + }, "time": "2020-12-13T23:18:30+00:00" }, { @@ -7752,6 +9203,10 @@ "selenium", "webdriver" ], + "support": { + "issues": "https://github.com/php-webdriver/php-webdriver/issues", + "source": "https://github.com/php-webdriver/php-webdriver/tree/1.9.0" + }, "time": "2020-11-19T15:21:05+00:00" }, { @@ -7801,6 +9256,10 @@ "reflection", "static analysis" ], + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + }, "time": "2020-06-27T09:03:43+00:00" }, { @@ -7853,6 +9312,10 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master" + }, "time": "2020-09-03T19:13:55+00:00" }, { @@ -7898,6 +9361,10 @@ } ], "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.4.0" + }, "time": "2020-09-17T18:55:26+00:00" }, { @@ -7961,6 +9428,10 @@ "spy", "stub" ], + "support": { + "issues": "https://github.com/phpspec/prophecy/issues", + "source": "https://github.com/phpspec/prophecy/tree/1.12.2" + }, "time": "2020-12-19T10:15:11+00:00" }, { @@ -8024,6 +9495,16 @@ "testing", "xunit" ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/7.0.14" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], "time": "2020-12-02T13:39:03+00:00" }, { @@ -8074,6 +9555,16 @@ "filesystem", "iterator" ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], "time": "2020-11-30T08:25:21+00:00" }, { @@ -8115,6 +9606,10 @@ "keywords": [ "template" ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/1.2.1" + }, "time": "2015-06-21T13:50:34+00:00" }, { @@ -8164,6 +9659,16 @@ "keywords": [ "timer" ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/2.1.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], "time": "2020-11-30T08:20:02+00:00" }, { @@ -8213,6 +9718,16 @@ "keywords": [ "tokenizer" ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-token-stream/issues", + "source": "https://github.com/sebastianbergmann/php-token-stream/tree/master" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], "abandoned": true, "time": "2020-08-04T08:28:15+00:00" }, @@ -8297,6 +9812,20 @@ "testing", "xunit" ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "source": "https://github.com/sebastianbergmann/phpunit/tree/8.5.13" + }, + "funding": [ + { + "url": "https://phpunit.de/donate.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], "time": "2020-12-01T04:53:52+00:00" }, { @@ -8342,6 +9871,16 @@ ], "description": "Looks up which function or method a line of code belongs to", "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/1.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], "time": "2020-11-30T08:15:22+00:00" }, { @@ -8406,6 +9945,16 @@ "compare", "equality" ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/3.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], "time": "2020-11-30T08:04:30+00:00" }, { @@ -8462,6 +10011,16 @@ "unidiff", "unified diff" ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/3.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], "time": "2020-11-30T07:59:04+00:00" }, { @@ -8515,6 +10074,16 @@ "environment", "hhvm" ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/4.2.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], "time": "2020-11-30T07:53:42+00:00" }, { @@ -8582,6 +10151,16 @@ "export", "exporter" ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/3.1.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], "time": "2020-11-30T07:47:53+00:00" }, { @@ -8636,6 +10215,16 @@ "keywords": [ "global state" ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/3.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], "time": "2020-11-30T07:43:24+00:00" }, { @@ -8683,6 +10272,16 @@ ], "description": "Traverses array structures and object graphs to enumerate all referenced objects", "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/3.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], "time": "2020-11-30T07:40:27+00:00" }, { @@ -8728,6 +10327,16 @@ ], "description": "Allows reflection of object attributes, including inherited and non-public ones", "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/1.1.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], "time": "2020-11-30T07:37:18+00:00" }, { @@ -8781,6 +10390,16 @@ ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/3.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], "time": "2020-11-30T07:34:24+00:00" }, { @@ -8823,6 +10442,16 @@ ], "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "support": { + "issues": "https://github.com/sebastianbergmann/resource-operations/issues", + "source": "https://github.com/sebastianbergmann/resource-operations/tree/2.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], "time": "2020-11-30T07:30:19+00:00" }, { @@ -8869,6 +10498,16 @@ ], "description": "Collection of value objects that represent the types of the PHP type system", "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/1.1.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], "time": "2020-11-30T07:25:11+00:00" }, { @@ -8912,6 +10551,10 @@ ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/master" + }, "time": "2016-10-03T07:35:21+00:00" }, { @@ -8966,6 +10609,23 @@ ], "description": "Symfony BrowserKit Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/browser-kit/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], "time": "2020-12-18T08:03:05+00:00" }, { @@ -9023,6 +10683,23 @@ ], "description": "Symfony DomCrawler Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/dom-crawler/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], "time": "2020-12-18T08:02:46+00:00" }, { @@ -9081,6 +10758,23 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/v5.2.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], "time": "2020-12-08T17:02:38+00:00" }, { @@ -9121,6 +10815,16 @@ } ], "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/master" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], "time": "2020-07-12T23:59:07+00:00" }, { @@ -9170,12 +10874,18 @@ "check", "validate" ], + "support": { + "issues": "https://github.com/webmozart/assert/issues", + "source": "https://github.com/webmozart/assert/tree/master" + }, "time": "2020-07-08T17:02:28+00:00" } ], "aliases": [], "minimum-stability": "dev", - "stability-flags": [], + "stability-flags": { + "bagisto/bagisto-package-generator": 20 + }, "prefer-stable": true, "prefer-lowest": false, "platform": { @@ -9188,5 +10898,6 @@ "ext-pdo_mysql": "*", "ext-tokenizer": "*" }, - "platform-dev": [] + "platform-dev": [], + "plugin-api-version": "2.0.0" } diff --git a/config/app.php b/config/app.php index c79026ded..ee866079a 100755 --- a/config/app.php +++ b/config/app.php @@ -281,6 +281,7 @@ return [ Webkul\BookingProduct\Providers\BookingProductServiceProvider::class, Webkul\SocialLogin\Providers\SocialLoginServiceProvider::class, Webkul\DebugBar\Providers\DebugBarServiceProvider::class, + Webkul\Marketing\Providers\MarketingServiceProvider::class, ], /* diff --git a/config/concord.php b/config/concord.php index 6730e4739..273b5e100 100755 --- a/config/concord.php +++ b/config/concord.php @@ -24,6 +24,7 @@ return [ \Webkul\CMS\Providers\ModuleServiceProvider::class, \Webkul\Customer\Providers\ModuleServiceProvider::class, \Webkul\Inventory\Providers\ModuleServiceProvider::class, + \Webkul\Marketing\Providers\ModuleServiceProvider::class, \Webkul\Payment\Providers\ModuleServiceProvider::class, \Webkul\Paypal\Providers\ModuleServiceProvider::class, \Webkul\Product\Providers\ModuleServiceProvider::class, diff --git a/database/migrations/2019_11_21_194541_add_column_url_path_to_category_translations.php b/database/migrations/2019_11_21_194541_add_column_url_path_to_category_translations.php new file mode 100644 index 000000000..f8087b39c --- /dev/null +++ b/database/migrations/2019_11_21_194541_add_column_url_path_to_category_translations.php @@ -0,0 +1,33 @@ +string('url_path', 2048) + ->comment('maintained by database triggers'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('category_translations', function (Blueprint $table) { + $table->dropColumn('url_path'); + }); + } +} diff --git a/database/migrations/2019_11_21_194608_add_stored_function_to_get_url_path_of_category.php b/database/migrations/2019_11_21_194608_add_stored_function_to_get_url_path_of_category.php new file mode 100644 index 000000000..b84ecfadf --- /dev/null +++ b/database/migrations/2019_11_21_194608_add_stored_function_to_get_url_path_of_category.php @@ -0,0 +1,70 @@ + 1 + THEN + SELECT + GROUP_CONCAT(parent_translations.slug SEPARATOR '/') INTO urlPath + FROM + ${dbPrefix}categories AS node, + ${dbPrefix}categories AS parent + JOIN ${dbPrefix}category_translations AS parent_translations ON parent.id = parent_translations.category_id + WHERE + node._lft >= parent._lft + AND node._rgt <= parent._rgt + AND node.id = categoryId + AND parent.id <> 1 + AND parent_translations.locale = localeCode + GROUP BY + node.id; + + IF urlPath IS NULL + THEN + SET urlPath = (SELECT slug FROM ${dbPrefix}category_translations WHERE ${dbPrefix}category_translations.category_id = categoryId); + END IF; + ELSE + SET urlPath = ''; + END IF; + + RETURN urlPath; + END; +SQL; + + DB::unprepared($functionSQL); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + DB::unprepared('DROP FUNCTION IF EXISTS `get_url_path_of_category`;'); + } +} diff --git a/database/migrations/2019_11_21_194627_add_trigger_to_category_translations.php b/database/migrations/2019_11_21_194627_add_trigger_to_category_translations.php new file mode 100644 index 000000000..b85455a8f --- /dev/null +++ b/database/migrations/2019_11_21_194627_add_trigger_to_category_translations.php @@ -0,0 +1,103 @@ +getTriggerBody(); + $insertTrigger = <<< SQL + CREATE TRIGGER %s + BEFORE INSERT ON ${dbPrefix}category_translations + FOR EACH ROW + BEGIN + $triggerBody + END; +SQL; + + $updateTrigger = <<< SQL + CREATE TRIGGER %s + BEFORE UPDATE ON ${dbPrefix}category_translations + FOR EACH ROW + BEGIN + $triggerBody + END; +SQL; + + DB::unprepared(sprintf('DROP TRIGGER IF EXISTS %s;', self::TRIGGER_NAME_INSERT)); + DB::unprepared(sprintf($insertTrigger, self::TRIGGER_NAME_INSERT)); + + DB::unprepared(sprintf('DROP TRIGGER IF EXISTS %s;', self::TRIGGER_NAME_UPDATE)); + DB::unprepared(sprintf($updateTrigger, self::TRIGGER_NAME_UPDATE)); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + DB::unprepared(sprintf('DROP TRIGGER IF EXISTS %s;', self::TRIGGER_NAME_INSERT)); + DB::unprepared(sprintf('DROP TRIGGER IF EXISTS %s;', self::TRIGGER_NAME_UPDATE)); + } + + /** + * Returns trigger body as string + * + * @return string + */ + private function getTriggerBody() + { + $dbPrefix = DB::getTablePrefix(); + + return << 1 + THEN + + SELECT + GROUP_CONCAT(parent_translations.slug SEPARATOR '/') INTO parentUrlPath + FROM + ${dbPrefix}categories AS node, + ${dbPrefix}categories AS parent + JOIN ${dbPrefix}category_translations AS parent_translations ON parent.id = parent_translations.category_id + WHERE + node._lft >= parent._lft + AND node._rgt <= parent._rgt + AND node.id = (SELECT parent_id FROM categories WHERE id = NEW.category_id) + AND parent.id <> 1 + AND parent_translations.locale = NEW.locale + GROUP BY + node.id; + + IF parentUrlPath IS NULL + THEN + SET urlPath = NEW.slug; + ELSE + SET urlPath = concat(parentUrlPath, '/', NEW.slug); + END IF; + + SET NEW.url_path = urlPath; + + END IF; +SQL; + + } +} diff --git a/database/migrations/2019_11_21_194648_add_url_path_to_existing_category_translations.php b/database/migrations/2019_11_21_194648_add_url_path_to_existing_category_translations.php new file mode 100644 index 000000000..7b8565bd1 --- /dev/null +++ b/database/migrations/2019_11_21_194648_add_url_path_to_existing_category_translations.php @@ -0,0 +1,35 @@ +getTable(); + + foreach (DB::table($categoryTranslationsTableName)->get() as $categoryTranslation) { + $urlPathQueryResult = DB::selectOne($sqlStoredFunction, [ + 'category_id' => $categoryTranslation->category_id, + 'locale_code' => $categoryTranslation->locale, + ]); + $url_path = $urlPathQueryResult ? $urlPathQueryResult->url_path : ''; + + DB::table($categoryTranslationsTableName) + ->where('id', $categoryTranslation->id) + ->update(['url_path' => $url_path]); + } + } +} diff --git a/database/migrations/2019_11_21_194703_add_trigger_to_categories.php b/database/migrations/2019_11_21_194703_add_trigger_to_categories.php new file mode 100644 index 000000000..206f4c02b --- /dev/null +++ b/database/migrations/2019_11_21_194703_add_trigger_to_categories.php @@ -0,0 +1,102 @@ +getTriggerBody(); + $dbPrefix = DB::getTablePrefix(); + + $insertTrigger = <<< SQL + CREATE TRIGGER %s + AFTER INSERT ON ${dbPrefix}categories + FOR EACH ROW + BEGIN + $triggerBody + END; +SQL; + + $updateTrigger = <<< SQL + CREATE TRIGGER %s + AFTER UPDATE ON ${dbPrefix}categories + FOR EACH ROW + BEGIN + $triggerBody + END; +SQL; + + DB::unprepared(sprintf('DROP TRIGGER IF EXISTS %s;', self::TRIGGER_NAME_INSERT)); + DB::unprepared(sprintf($insertTrigger, self::TRIGGER_NAME_INSERT)); + + DB::unprepared(sprintf('DROP TRIGGER IF EXISTS %s;', self::TRIGGER_NAME_UPDATE)); + DB::unprepared(sprintf($updateTrigger, self::TRIGGER_NAME_UPDATE)); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + DB::unprepared(sprintf('DROP TRIGGER IF EXISTS %s;', self::TRIGGER_NAME_INSERT)); + DB::unprepared(sprintf('DROP TRIGGER IF EXISTS %s;', self::TRIGGER_NAME_UPDATE)); + } + + /** + * Returns trigger body as string + * + * @return string + */ + private function getTriggerBody(): string + { + $dbPrefix = DB::getTablePrefix(); + + return <<< SQL + DECLARE urlPath VARCHAR(255); + DECLARE localeCode VARCHAR(255); + DECLARE done INT; + DECLARE curs CURSOR FOR (SELECT ${dbPrefix}category_translations.locale + FROM ${dbPrefix}category_translations + WHERE category_id = NEW.id); + DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; + + + IF EXISTS ( + SELECT * + FROM ${dbPrefix}category_translations + WHERE category_id = NEW.id + ) + THEN + + OPEN curs; + + SET done = 0; + REPEAT + FETCH curs INTO localeCode; + + SELECT get_url_path_of_category(NEW.id, localeCode) INTO urlPath; + + UPDATE ${dbPrefix}category_translations + SET url_path = urlPath + WHERE ${dbPrefix}category_translations.category_id = NEW.id; + + UNTIL done END REPEAT; + + CLOSE curs; + + END IF; +SQL; + } +} diff --git a/database/migrations/2020_01_06_173505_alter_trigger_category_translations.php b/database/migrations/2020_01_06_173505_alter_trigger_category_translations.php new file mode 100644 index 000000000..52f043433 --- /dev/null +++ b/database/migrations/2020_01_06_173505_alter_trigger_category_translations.php @@ -0,0 +1,115 @@ +getTriggerBody(); + $dbPrefix = DB::getTablePrefix(); + + $insertTrigger = <<< SQL + CREATE TRIGGER %s + BEFORE INSERT ON ${dbPrefix}category_translations + FOR EACH ROW + BEGIN + $triggerBody + END; +SQL; + + $updateTrigger = <<< SQL + CREATE TRIGGER %s + BEFORE UPDATE ON ${dbPrefix}category_translations + FOR EACH ROW + BEGIN + $triggerBody + END; +SQL; + + $this->dropTriggers(); + + DB::unprepared(sprintf($insertTrigger, self::TRIGGER_NAME_INSERT)); + DB::unprepared(sprintf($updateTrigger, self::TRIGGER_NAME_UPDATE)); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + $this->dropTriggers(); + } + + /** + * Drop the triggers + */ + private function dropTriggers() + { + DB::unprepared(sprintf('DROP TRIGGER IF EXISTS %s;', self::TRIGGER_NAME_INSERT)); + DB::unprepared(sprintf('DROP TRIGGER IF EXISTS %s;', self::TRIGGER_NAME_UPDATE)); + } + + /** + * Returns trigger body as string + * + * @return string + */ + private function getTriggerBody() + { + $dbPrefix = DB::getTablePrefix(); + + return <<= parent._lft + AND node._rgt <= parent._rgt + AND node.id = (SELECT parent_id FROM ${dbPrefix}categories WHERE id = NEW.category_id) + AND node.parent_id IS NOT NULL + AND parent.parent_id IS NOT NULL + AND parent_translations.locale = NEW.locale + GROUP BY + node.id; + + IF parentUrlPath IS NULL + THEN + SET urlPath = NEW.slug; + ELSE + SET urlPath = concat(parentUrlPath, '/', NEW.slug); + END IF; + + SET NEW.url_path = urlPath; + + END IF; +SQL; + + } +} diff --git a/database/migrations/2020_01_06_173524_alter_stored_function_url_path_category.php b/database/migrations/2020_01_06_173524_alter_stored_function_url_path_category.php new file mode 100644 index 000000000..84c7d1135 --- /dev/null +++ b/database/migrations/2020_01_06_173524_alter_stored_function_url_path_category.php @@ -0,0 +1,77 @@ += parent._lft + AND node._rgt <= parent._rgt + AND node.id = categoryId + AND node.parent_id IS NOT NULL + AND parent.parent_id IS NOT NULL + AND parent_translations.locale = localeCode + GROUP BY + node.id; + + IF urlPath IS NULL + THEN + SET urlPath = (SELECT slug FROM ${dbPrefix}category_translations WHERE ${dbPrefix}category_translations.category_id = categoryId); + END IF; + ELSE + SET urlPath = ''; + END IF; + + RETURN urlPath; + END; +SQL; + + DB::unprepared($functionSQL); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + DB::unprepared('DROP FUNCTION IF EXISTS `get_url_path_of_category`;'); + } +} diff --git a/database/migrations/2020_01_06_195305_alter_trigger_on_categories.php b/database/migrations/2020_01_06_195305_alter_trigger_on_categories.php new file mode 100644 index 000000000..61722e334 --- /dev/null +++ b/database/migrations/2020_01_06_195305_alter_trigger_on_categories.php @@ -0,0 +1,117 @@ +getTriggerBody(); + $dbPrefix = DB::getTablePrefix(); + + $insertTrigger = <<< SQL + CREATE TRIGGER %s + AFTER INSERT ON ${dbPrefix}categories + FOR EACH ROW + BEGIN + $triggerBody + END; +SQL; + + $updateTrigger = <<< SQL + CREATE TRIGGER %s + AFTER UPDATE ON ${dbPrefix}categories + FOR EACH ROW + BEGIN + $triggerBody + END; +SQL; + + $this->dropTriggers(); + + DB::unprepared(sprintf($insertTrigger, self::TRIGGER_NAME_INSERT)); + + DB::unprepared(sprintf($updateTrigger, self::TRIGGER_NAME_UPDATE)); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + $this->dropTriggers(); + } + + private function dropTriggers() + { + DB::unprepared(sprintf('DROP TRIGGER IF EXISTS %s;', self::TRIGGER_NAME_INSERT)); + DB::unprepared(sprintf('DROP TRIGGER IF EXISTS %s;', self::TRIGGER_NAME_UPDATE)); + } + + + /** + * Returns trigger body as string + * + * @return string + */ + private function getTriggerBody(): string + { + $dbPrefix = DB::getTablePrefix(); + + return <<< SQL + DECLARE urlPath VARCHAR(255); + DECLARE localeCode VARCHAR(255); + DECLARE done INT; + DECLARE curs CURSOR FOR (SELECT ${dbPrefix}category_translations.locale + FROM ${dbPrefix}category_translations + WHERE category_id = NEW.id); + DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; + + + IF EXISTS ( + SELECT * + FROM ${dbPrefix}category_translations + WHERE category_id = NEW.id + ) + THEN + + OPEN curs; + + SET done = 0; + REPEAT + FETCH curs INTO localeCode; + + SELECT get_url_path_of_category(NEW.id, localeCode) INTO urlPath; + + IF NEW.parent_id IS NULL + THEN + SET urlPath = ''; + END IF; + + UPDATE ${dbPrefix}category_translations + SET url_path = urlPath + WHERE + ${dbPrefix}category_translations.category_id = NEW.id + AND ${dbPrefix}category_translations.locale = localeCode; + + UNTIL done END REPEAT; + + CLOSE curs; + + END IF; +SQL; + } +} diff --git a/database/migrations/2020_12_27_121950_create_jobs_table.php b/database/migrations/2020_12_27_121950_create_jobs_table.php new file mode 100644 index 000000000..1be9e8a80 --- /dev/null +++ b/database/migrations/2020_12_27_121950_create_jobs_table.php @@ -0,0 +1,36 @@ +bigIncrements('id'); + $table->string('queue')->index(); + $table->longText('payload'); + $table->unsignedTinyInteger('attempts'); + $table->unsignedInteger('reserved_at')->nullable(); + $table->unsignedInteger('available_at'); + $table->unsignedInteger('created_at'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('jobs'); + } +} diff --git a/packages/Webkul/Admin/src/Config/acl.php b/packages/Webkul/Admin/src/Config/acl.php index fcc2f3399..0540e5125 100755 --- a/packages/Webkul/Admin/src/Config/acl.php +++ b/packages/Webkul/Admin/src/Config/acl.php @@ -392,51 +392,136 @@ return [ 'route' => 'admin.tax-rates.delete', 'sort' => 3, ], [ - 'key' => 'promotions', + 'key' => 'marketing', + 'name' => 'admin::app.acl.marketing', + 'route' => 'admin.cart-rules.index', + 'sort' => 7, + ], [ + 'key' => 'marketing.promotions', 'name' => 'admin::app.acl.promotions', 'route' => 'admin.cart-rules.index', 'sort' => 7, ], [ - 'key' => 'promotions.cart-rules', + 'key' => 'marketing.promotions.cart-rules', 'name' => 'admin::app.acl.cart-rules', 'route' => 'admin.cart-rules.index', 'sort' => 1, ], [ - 'key' => 'promotions.cart-rules.create', + 'key' => 'marketing.promotions.cart-rules.create', 'name' => 'admin::app.acl.create', 'route' => 'admin.cart-rules.create', 'sort' => 1, ], [ - 'key' => 'promotions.cart-rules.edit', + 'key' => 'marketing.promotions.cart-rules.edit', 'name' => 'admin::app.acl.edit', 'route' => 'admin.cart-rules.edit', 'sort' => 2, ], [ - 'key' => 'promotions.cart-rules.delete', + 'key' => 'marketing.promotions.cart-rules.delete', 'name' => 'admin::app.acl.delete', 'route' => 'admin.cart-rules.delete', 'sort' => 3, ], [ - 'key' => 'promotions.catalog-rules', + 'key' => 'marketing.promotions.catalog-rules', 'name' => 'admin::app.acl.catalog-rules', 'route' => 'admin.catalog-rules.index', 'sort' => 1, ], [ - 'key' => 'promotions.catalog-rules.create', + 'key' => 'marketing.promotions.catalog-rules.create', 'name' => 'admin::app.acl.create', 'route' => 'admin.catalog-rules.index', 'sort' => 1, ], [ - 'key' => 'promotions.catalog-rules.edit', + 'key' => 'marketing.promotions.catalog-rules.edit', 'name' => 'admin::app.acl.edit', 'route' => 'admin.catalog-rules.edit', 'sort' => 2, ], [ - 'key' => 'promotions.catalog-rules.delete', + 'key' => 'marketing.promotions.catalog-rules.delete', 'name' => 'admin::app.acl.delete', 'route' => 'admin.catalog-rules.delete', 'sort' => 3, - ], + ], [ + 'key' => 'marketing.email-marketing', + 'name' => 'admin::app.acl.email-marketing', + 'route' => 'admin.email-templates.index', + 'sort' => 7, + ], [ + 'key' => 'marketing.email-marketing.email-templates', + 'name' => 'admin::app.acl.email-templates', + 'route' => 'admin.email-templates.index', + 'sort' => 1, + ], [ + 'key' => 'marketing.email-marketing.email-templates.create', + 'name' => 'admin::app.acl.create', + 'route' => 'admin.email-templates.create', + 'sort' => 1, + ], [ + 'key' => 'marketing.email-marketing.email-templates.edit', + 'name' => 'admin::app.acl.edit', + 'route' => 'admin.email-templates.edit', + 'sort' => 2, + ], [ + 'key' => 'marketing.email-marketing.email-templates.delete', + 'name' => 'admin::app.acl.delete', + 'route' => 'admin.email-templates.delete', + 'sort' => 3, + ], [ + 'key' => 'marketing.email-marketing.events', + 'name' => 'admin::app.acl.events', + 'route' => 'admin.events.index', + 'sort' => 1, + ], [ + 'key' => 'marketing.email-marketing.events.create', + 'name' => 'admin::app.acl.create', + 'route' => 'admin.events.create', + 'sort' => 1, + ], [ + 'key' => 'marketing.email-marketing.events.edit', + 'name' => 'admin::app.acl.edit', + 'route' => 'admin.events.edit', + 'sort' => 2, + ], [ + 'key' => 'marketing.email-marketing.events.delete', + 'name' => 'admin::app.acl.delete', + 'route' => 'admin.events.delete', + 'sort' => 3, + ], [ + 'key' => 'marketing.email-marketing.campaigns', + 'name' => 'admin::app.acl.campaigns', + 'route' => 'admin.campaigns.index', + 'sort' => 1, + ], [ + 'key' => 'marketing.email-marketing.campaigns.create', + 'name' => 'admin::app.acl.create', + 'route' => 'admin.campaigns.create', + 'sort' => 1, + ], [ + 'key' => 'marketing.email-marketing.campaigns.edit', + 'name' => 'admin::app.acl.edit', + 'route' => 'admin.campaigns.edit', + 'sort' => 2, + ], [ + 'key' => 'marketing.email-marketing.campaigns.delete', + 'name' => 'admin::app.acl.delete', + 'route' => 'admin.campaigns.delete', + 'sort' => 3, + ], [ + 'key' => 'marketing.email-marketing.subscribers', + 'name' => 'admin::app.acl.subscribers', + 'route' => 'admin.subscribers.index', + 'sort' => 1, + ], [ + 'key' => 'marketing.email-marketing.subscribers.edit', + 'name' => 'admin::app.acl.edit', + 'route' => 'admin.subscribers.edit', + 'sort' => 2, + ], [ + 'key' => 'marketing.email-marketing.subscribers.delete', + 'name' => 'admin::app.acl.delete', + 'route' => 'admin.subscribers.delete', + 'sort' => 3, + ] ]; ?> \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Config/menu.php b/packages/Webkul/Admin/src/Config/menu.php index e0f383edd..dab25131c 100755 --- a/packages/Webkul/Admin/src/Config/menu.php +++ b/packages/Webkul/Admin/src/Config/menu.php @@ -91,12 +91,6 @@ return [ 'route' => 'admin.customer.review.index', 'sort' => 3, 'icon-class' => '', - ], [ - 'key' => 'customers.subscribers', - 'name' => 'admin::app.layouts.newsletter-subscriptions', - 'route' => 'admin.customers.subscribers.index', - 'sort' => 4, - 'icon-class' => '', ], [ 'key' => 'configuration', 'name' => 'admin::app.layouts.configure', @@ -182,23 +176,59 @@ return [ 'sort' => 2, 'icon-class' => '', ], [ - 'key' => 'promotions', - 'name' => 'admin::app.layouts.promotions', + 'key' => 'marketing', + 'name' => 'admin::app.layouts.marketing', 'route' => 'admin.catalog-rules.index', 'sort' => 5, 'icon-class' => 'promotion-icon', ], [ - 'key' => 'promotions.catalog-rules', + 'key' => 'marketing.promotions', + 'name' => 'admin::app.layouts.promotions', + 'route' => 'admin.catalog-rules.index', + 'sort' => 1, + 'icon-class' => '', + ], [ + 'key' => 'marketing.promotions.catalog-rules', 'name' => 'admin::app.promotions.catalog-rules.title', 'route' => 'admin.catalog-rules.index', 'sort' => 1, 'icon-class' => '', ], [ - 'key' => 'promotions.cart-rules', + 'key' => 'marketing.promotions.cart-rules', 'name' => 'admin::app.promotions.cart-rules.title', 'route' => 'admin.cart-rules.index', 'sort' => 2, 'icon-class' => '', + ], [ + 'key' => 'marketing.email-marketing', + 'name' => 'admin::app.layouts.email-marketing', + 'route' => 'admin.email-templates.index', + 'sort' => 2, + 'icon-class' => '', + ], [ + 'key' => 'marketing.email-marketing.email-templates', + 'name' => 'admin::app.layouts.email-templates', + 'route' => 'admin.email-templates.index', + 'sort' => 1, + 'icon-class' => '', + ], [ + 'key' => 'marketing.email-marketing.events', + 'name' => 'admin::app.layouts.events', + 'route' => 'admin.events.index', + 'sort' => 2, + 'icon-class' => '', + ], [ + 'key' => 'marketing.email-marketing.campaigns', + 'name' => 'admin::app.layouts.campaigns', + 'route' => 'admin.campaigns.index', + 'sort' => 2, + 'icon-class' => '', + ], [ + 'key' => 'marketing.email-marketing.subscribers', + 'name' => 'admin::app.layouts.newsletter-subscriptions', + 'route' => 'admin.customers.subscribers.index', + 'sort' => 3, + 'icon-class' => '', ], [ 'key' => 'cms', 'name' => 'admin::app.layouts.cms', diff --git a/packages/Webkul/Admin/src/DataGrids/CampaignDataGrid.php b/packages/Webkul/Admin/src/DataGrids/CampaignDataGrid.php new file mode 100755 index 000000000..67ec407bc --- /dev/null +++ b/packages/Webkul/Admin/src/DataGrids/CampaignDataGrid.php @@ -0,0 +1,84 @@ +addSelect('id', 'name', 'subject', 'status'); + + $this->setQueryBuilder($queryBuilder); + } + + public function addColumns() + { + $this->addColumn([ + 'index' => 'id', + 'label' => trans('admin::app.datagrid.id'), + 'type' => 'number', + 'searchable' => false, + 'sortable' => true, + 'filterable' => true, + ]); + + $this->addColumn([ + 'index' => 'name', + 'label' => trans('admin::app.datagrid.name'), + 'type' => 'string', + 'searchable' => true, + 'sortable' => true, + 'filterable' => true, + ]); + + $this->addColumn([ + 'index' => 'subject', + 'label' => trans('admin::app.datagrid.subject'), + 'type' => 'string', + 'searchable' => true, + 'sortable' => true, + 'filterable' => true, + ]); + + $this->addColumn([ + 'index' => 'status', + 'label' => trans('admin::app.status'), + 'type' => 'boolean', + 'searchable' => true, + 'sortable' => true, + 'filterable' => true, + 'wrapper' => function ($value) { + if ($value->status == 1) { + return trans('admin::app.datagrid.active'); + } else { + return trans('admin::app.datagrid.inactive'); + } + }, + ]); + } + + public function prepareActions() + { + $this->addAction([ + 'title' => trans('admin::app.datagrid.edit'), + 'method' => 'GET', + 'route' => 'admin.campaigns.edit', + 'icon' => 'icon pencil-lg-icon', + ]); + + $this->addAction([ + 'title' => trans('admin::app.datagrid.delete'), + 'method' => 'POST', + 'route' => 'admin.campaigns.delete', + 'confirm_text' => trans('ui::app.datagrid.massaction.delete', ['resource' => 'Campaign']), + 'icon' => 'icon trash-icon', + ]); + } +} \ No newline at end of file diff --git a/packages/Webkul/Admin/src/DataGrids/CartRuleDataGrid.php b/packages/Webkul/Admin/src/DataGrids/CartRuleDataGrid.php index 34905bee9..5abaa1544 100644 --- a/packages/Webkul/Admin/src/DataGrids/CartRuleDataGrid.php +++ b/packages/Webkul/Admin/src/DataGrids/CartRuleDataGrid.php @@ -120,10 +120,12 @@ class CartRuleDataGrid extends DataGrid 'sortable' => true, 'filterable' => true, 'wrapper' => function ($value) { - if ($value->status == 1) { + if ($value->status == 'active') { return trans('admin::app.datagrid.active'); - } else { + } else if ($value->status == 'inactive') { return trans('admin::app.datagrid.inactive'); + } else { + return trans('admin::app.datagrid.draft'); } }, ]); diff --git a/packages/Webkul/Admin/src/DataGrids/EmailTemplateDataGrid.php b/packages/Webkul/Admin/src/DataGrids/EmailTemplateDataGrid.php new file mode 100755 index 000000000..833a8f424 --- /dev/null +++ b/packages/Webkul/Admin/src/DataGrids/EmailTemplateDataGrid.php @@ -0,0 +1,77 @@ +addSelect('id', 'name', 'status'); + + $this->setQueryBuilder($queryBuilder); + } + + public function addColumns() + { + $this->addColumn([ + 'index' => 'id', + 'label' => trans('admin::app.datagrid.id'), + 'type' => 'number', + 'searchable' => false, + 'sortable' => true, + 'filterable' => true, + ]); + + $this->addColumn([ + 'index' => 'name', + 'label' => trans('admin::app.datagrid.name'), + 'type' => 'string', + 'searchable' => true, + 'sortable' => true, + 'filterable' => true, + ]); + + $this->addColumn([ + 'index' => 'status', + 'label' => trans('admin::app.status'), + 'type' => 'boolean', + 'searchable' => true, + 'sortable' => true, + 'filterable' => true, + 'wrapper' => function ($value) { + if ($value->status == 'active') { + return trans('admin::app.datagrid.active'); + } else if ($value->status == 'inactive') { + return trans('admin::app.datagrid.inactive'); + } else if ($value->status == 'draft') { + return trans('admin::app.datagrid.draft'); + } + }, + ]); + } + + public function prepareActions() + { + $this->addAction([ + 'title' => trans('admin::app.datagrid.edit'), + 'method' => 'GET', + 'route' => 'admin.email-templates.edit', + 'icon' => 'icon pencil-lg-icon', + ]); + + $this->addAction([ + 'title' => trans('admin::app.datagrid.delete'), + 'method' => 'POST', + 'route' => 'admin.email-templates.delete', + 'confirm_text' => trans('ui::app.datagrid.massaction.delete', ['resource' => 'Email Template']), + 'icon' => 'icon trash-icon', + ]); + } +} \ No newline at end of file diff --git a/packages/Webkul/Admin/src/DataGrids/EventDataGrid.php b/packages/Webkul/Admin/src/DataGrids/EventDataGrid.php new file mode 100755 index 000000000..56eb527fa --- /dev/null +++ b/packages/Webkul/Admin/src/DataGrids/EventDataGrid.php @@ -0,0 +1,68 @@ +addSelect('id', 'name', 'date'); + + $this->setQueryBuilder($queryBuilder); + } + + public function addColumns() + { + $this->addColumn([ + 'index' => 'id', + 'label' => trans('admin::app.datagrid.id'), + 'type' => 'number', + 'searchable' => false, + 'sortable' => true, + 'filterable' => true, + ]); + + $this->addColumn([ + 'index' => 'name', + 'label' => trans('admin::app.datagrid.name'), + 'type' => 'string', + 'searchable' => true, + 'sortable' => true, + 'filterable' => true, + ]); + + $this->addColumn([ + 'index' => 'date', + 'label' => trans('admin::app.datagrid.date'), + 'type' => 'date', + 'searchable' => true, + 'sortable' => true, + 'filterable' => true, + ]); + } + + public function prepareActions() + { + $this->addAction([ + 'title' => trans('admin::app.datagrid.edit'), + 'method' => 'GET', + 'route' => 'admin.events.edit', + 'icon' => 'icon pencil-lg-icon', + ]); + + $this->addAction([ + 'title' => trans('admin::app.datagrid.delete'), + 'method' => 'POST', + 'route' => 'admin.events.delete', + 'confirm_text' => trans('ui::app.datagrid.massaction.delete', ['resource' => 'Event']), + 'icon' => 'icon trash-icon', + ]); + } +} \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Http/Controllers/Customer/CustomerGroupController.php b/packages/Webkul/Admin/src/Http/Controllers/Customer/CustomerGroupController.php index 45adba153..080daf492 100755 --- a/packages/Webkul/Admin/src/Http/Controllers/Customer/CustomerGroupController.php +++ b/packages/Webkul/Admin/src/Http/Controllers/Customer/CustomerGroupController.php @@ -124,7 +124,7 @@ class CustomerGroupController extends Controller if ($customerGroup->is_user_defined == 0) { session()->flash('warning', trans('admin::app.customers.customers.group-default')); - } elseif (count($customerGroup->customer) > 0) { + } elseif (count($customerGroup->customers) > 0) { session()->flash('warning', trans('admin::app.response.customer-associate', ['name' => 'Customer Group'])); } else { try { diff --git a/packages/Webkul/Admin/src/Http/routes.php b/packages/Webkul/Admin/src/Http/routes.php index 7a34e7f96..278c2d71e 100755 --- a/packages/Webkul/Admin/src/Http/routes.php +++ b/packages/Webkul/Admin/src/Http/routes.php @@ -583,23 +583,6 @@ Route::group(['middleware' => ['web', 'admin_locale']], function () { Route::put('/account', 'Webkul\User\Http\Controllers\AccountController@update')->name('admin.account.update'); - - // Admin Store Front Settings Route - Route::get('/subscribers', 'Webkul\Core\Http\Controllers\SubscriptionController@index')->defaults('_config', [ - 'view' => 'admin::customers.subscribers.index', - ])->name('admin.customers.subscribers.index'); - - //destroy a newsletter subscription item - Route::post('subscribers/delete/{id}', 'Webkul\Core\Http\Controllers\SubscriptionController@destroy')->name('admin.customers.subscribers.delete'); - - Route::get('subscribers/edit/{id}', 'Webkul\Core\Http\Controllers\SubscriptionController@edit')->defaults('_config', [ - 'view' => 'admin::customers.subscribers.edit', - ])->name('admin.customers.subscribers.edit'); - - Route::put('subscribers/update/{id}', 'Webkul\Core\Http\Controllers\SubscriptionController@update')->defaults('_config', [ - 'redirect' => 'admin.customers.subscribers.index', - ])->name('admin.customers.subscribers.update'); - //slider index Route::get('/slider', 'Webkul\Core\Http\Controllers\SliderController@index')->defaults('_config', [ 'view' => 'admin::settings.sliders.index', @@ -688,11 +671,11 @@ Route::group(['middleware' => ['web', 'admin_locale']], function () { Route::prefix('promotions')->group(function () { Route::get('cart-rules', 'Webkul\CartRule\Http\Controllers\CartRuleController@index')->defaults('_config', [ - 'view' => 'admin::promotions.cart-rules.index', + 'view' => 'admin::marketing.promotions.cart-rules.index', ])->name('admin.cart-rules.index'); Route::get('cart-rules/create', 'Webkul\CartRule\Http\Controllers\CartRuleController@create')->defaults('_config', [ - 'view' => 'admin::promotions.cart-rules.create', + 'view' => 'admin::marketing.promotions.cart-rules.create', ])->name('admin.cart-rules.create'); Route::post('cart-rules/create', 'Webkul\CartRule\Http\Controllers\CartRuleController@store')->defaults('_config', [ @@ -700,11 +683,11 @@ Route::group(['middleware' => ['web', 'admin_locale']], function () { ])->name('admin.cart-rules.store'); Route::get('cart-rules/copy/{id}', 'Webkul\CartRule\Http\Controllers\CartRuleController@copy')->defaults('_config', [ - 'view' => 'admin::promotions.cart-rules.edit', + 'view' => 'admin::marketing.promotions.cart-rules.edit', ])->name('admin.cart-rules.copy'); Route::get('cart-rules/edit/{id}', 'Webkul\CartRule\Http\Controllers\CartRuleController@edit')->defaults('_config', [ - 'view' => 'admin::promotions.cart-rules.edit', + 'view' => 'admin::marketing.promotions.cart-rules.edit', ])->name('admin.cart-rules.edit'); Route::post('cart-rules/edit/{id}', 'Webkul\CartRule\Http\Controllers\CartRuleController@update')->defaults('_config', [ @@ -720,11 +703,11 @@ Route::group(['middleware' => ['web', 'admin_locale']], function () { //Catalog rules Route::get('catalog-rules', 'Webkul\CatalogRule\Http\Controllers\CatalogRuleController@index')->defaults('_config', [ - 'view' => 'admin::promotions.catalog-rules.index', + 'view' => 'admin::marketing.promotions.catalog-rules.index', ])->name('admin.catalog-rules.index'); Route::get('catalog-rules/create', 'Webkul\CatalogRule\Http\Controllers\CatalogRuleController@create')->defaults('_config', [ - 'view' => 'admin::promotions.catalog-rules.create', + 'view' => 'admin::marketing.promotions.catalog-rules.create', ])->name('admin.catalog-rules.create'); Route::post('catalog-rules/create', 'Webkul\CatalogRule\Http\Controllers\CatalogRuleController@store')->defaults('_config', [ @@ -732,7 +715,7 @@ Route::group(['middleware' => ['web', 'admin_locale']], function () { ])->name('admin.catalog-rules.store'); Route::get('catalog-rules/edit/{id}', 'Webkul\CatalogRule\Http\Controllers\CatalogRuleController@edit')->defaults('_config', [ - 'view' => 'admin::promotions.catalog-rules.edit', + 'view' => 'admin::marketing.promotions.catalog-rules.edit', ])->name('admin.catalog-rules.edit'); Route::post('catalog-rules/edit/{id}', 'Webkul\CatalogRule\Http\Controllers\CatalogRuleController@update')->defaults('_config', [ @@ -740,6 +723,95 @@ Route::group(['middleware' => ['web', 'admin_locale']], function () { ])->name('admin.catalog-rules.update'); Route::post('catalog-rules/delete/{id}', 'Webkul\CatalogRule\Http\Controllers\CatalogRuleController@destroy')->name('admin.catalog-rules.delete'); + + + //Marketing campaigns routes + Route::get('campaigns', 'Webkul\Marketing\Http\Controllers\CampaignController@index')->defaults('_config', [ + 'view' => 'admin::marketing.email-marketing.campaigns.index', + ])->name('admin.campaigns.index'); + + Route::get('campaigns/create', 'Webkul\Marketing\Http\Controllers\CampaignController@create')->defaults('_config', [ + 'view' => 'admin::marketing.email-marketing.campaigns.create', + ])->name('admin.campaigns.create'); + + Route::post('campaigns/create', 'Webkul\Marketing\Http\Controllers\CampaignController@store')->defaults('_config', [ + 'redirect' => 'admin.campaigns.index', + ])->name('admin.campaigns.store'); + + Route::get('campaigns/edit/{id}', 'Webkul\Marketing\Http\Controllers\CampaignController@edit')->defaults('_config', [ + 'view' => 'admin::marketing.email-marketing.campaigns.edit', + ])->name('admin.campaigns.edit'); + + Route::post('campaigns/edit/{id}', 'Webkul\Marketing\Http\Controllers\CampaignController@update')->defaults('_config', [ + 'redirect' => 'admin.campaigns.index', + ])->name('admin.campaigns.update'); + + Route::post('campaigns/delete/{id}', 'Webkul\Marketing\Http\Controllers\CampaignController@destroy')->name('admin.campaigns.delete'); + + + //Marketing emails templates routes + Route::get('email-templates', 'Webkul\Marketing\Http\Controllers\TemplateController@index')->defaults('_config', [ + 'view' => 'admin::marketing.email-marketing.templates.index', + ])->name('admin.email-templates.index'); + + Route::get('email-templates/create', 'Webkul\Marketing\Http\Controllers\TemplateController@create')->defaults('_config', [ + 'view' => 'admin::marketing.email-marketing.templates.create', + ])->name('admin.email-templates.create'); + + Route::post('email-templates/create', 'Webkul\Marketing\Http\Controllers\TemplateController@store')->defaults('_config', [ + 'redirect' => 'admin.email-templates.index', + ])->name('admin.email-templates.store'); + + Route::get('email-templates/edit/{id}', 'Webkul\Marketing\Http\Controllers\TemplateController@edit')->defaults('_config', [ + 'view' => 'admin::marketing.email-marketing.templates.edit', + ])->name('admin.email-templates.edit'); + + Route::post('email-templates/edit/{id}', 'Webkul\Marketing\Http\Controllers\TemplateController@update')->defaults('_config', [ + 'redirect' => 'admin.email-templates.index', + ])->name('admin.email-templates.update'); + + Route::post('email-templates/delete/{id}', 'Webkul\Marketing\Http\Controllers\TemplateController@destroy')->name('admin.email-templates.delete'); + + + //Marketing events routes + Route::get('events', 'Webkul\Marketing\Http\Controllers\EventController@index')->defaults('_config', [ + 'view' => 'admin::marketing.email-marketing.events.index', + ])->name('admin.events.index'); + + Route::get('events/create', 'Webkul\Marketing\Http\Controllers\EventController@create')->defaults('_config', [ + 'view' => 'admin::marketing.email-marketing.events.create', + ])->name('admin.events.create'); + + Route::post('events/create', 'Webkul\Marketing\Http\Controllers\EventController@store')->defaults('_config', [ + 'redirect' => 'admin.events.index', + ])->name('admin.events.store'); + + Route::get('events/edit/{id}', 'Webkul\Marketing\Http\Controllers\EventController@edit')->defaults('_config', [ + 'view' => 'admin::marketing.email-marketing.events.edit', + ])->name('admin.events.edit'); + + Route::post('events/edit/{id}', 'Webkul\Marketing\Http\Controllers\EventController@update')->defaults('_config', [ + 'redirect' => 'admin.events.index', + ])->name('admin.events.update'); + + Route::post('events/delete/{id}', 'Webkul\Marketing\Http\Controllers\EventController@destroy')->name('admin.events.delete'); + + + // Admin Store Front Settings Route + Route::get('/subscribers', 'Webkul\Core\Http\Controllers\SubscriptionController@index')->defaults('_config', [ + 'view' => 'admin::marketing.email-marketing.subscribers.index', + ])->name('admin.customers.subscribers.index'); + + //destroy a newsletter subscription item + Route::post('subscribers/delete/{id}', 'Webkul\Core\Http\Controllers\SubscriptionController@destroy')->name('admin.customers.subscribers.delete'); + + Route::get('subscribers/edit/{id}', 'Webkul\Core\Http\Controllers\SubscriptionController@edit')->defaults('_config', [ + 'view' => 'admin::marketing.email-marketing.subscribers.edit', + ])->name('admin.customers.subscribers.edit'); + + Route::put('subscribers/update/{id}', 'Webkul\Core\Http\Controllers\SubscriptionController@update')->defaults('_config', [ + 'redirect' => 'admin.customers.subscribers.index', + ])->name('admin.customers.subscribers.update'); }); Route::prefix('cms')->group(function () { diff --git a/packages/Webkul/Admin/src/Resources/lang/ar/app.php b/packages/Webkul/Admin/src/Resources/lang/ar/app.php index d9e347b96..391f81f63 100644 --- a/packages/Webkul/Admin/src/Resources/lang/ar/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/ar/app.php @@ -75,7 +75,11 @@ return [ 'tax-categories' => 'فئات الضرائب', 'tax-rates' => 'المعدلات الضريبية', 'refunds' => 'المبالغ المستردة', + 'marketing' => 'Marketing', 'promotions' => 'الترقيات', + 'email-marketing' => 'Email Marketing', + 'campaigns' => 'Campaigns', + 'email-templates' => 'Email Templates', 'discount' => 'خصم', 'cms' => 'CMS' ], @@ -111,6 +115,7 @@ return [ 'edit' => 'تعديل', 'create' => 'أضف', 'delete' => 'حذف', + 'marketing' => 'Marketing', 'promotions' => 'الترقيات', 'cart-rules' => 'قواعد سلة التسوق', 'catalog-rules' => 'قواعد الكتالوج', @@ -1130,6 +1135,68 @@ return [ ] ], + 'marketing' => [ + 'templates' => [ + 'title' => 'Email Templates', + 'add-title' => 'Add Email Template', + 'edit-title' => 'Edit Email Template', + 'save-btn-title' => 'Save', + 'general' => 'General', + 'name' => 'Name', + 'status' => 'Status', + 'active' => 'Active', + 'inactive' => 'Inactive', + 'draft' => 'Draft', + 'content' => 'Content', + 'create-success' => 'Email template created successfully.', + 'update-success' => 'Email template updated successfully.', + 'delete-success' => 'Email template deleted successfully', + ], + + 'campaigns' => [ + 'title' => 'Campaigns', + 'add-title' => 'Add Campaign', + 'edit-title' => 'Edit Campaign', + 'save-btn-title' => 'Save', + 'general' => 'General', + 'name' => 'Name', + 'status' => 'Status', + 'active' => 'Active', + 'inactive' => 'Inactive', + 'subject' => 'Subject', + 'email-template' => 'Email Template', + 'audience' => 'Audience', + 'channel' => 'Channel', + 'customer-group' => 'Customer Group', + 'schedule' => 'Schedule', + 'schedule-type' => 'Schedule Type', + 'once' => 'Once', + 'events' => 'Events', + 'schedule-date' => 'Schedule Date', + 'spooling' => 'Spooling', + 'event' => 'Event', + 'birthday' => 'Birthday', + 'create-success' => 'Campaign created successfully.', + 'update-success' => 'Campaign updated successfully.', + 'delete-success' => 'Campaign deleted successfully', + ], + + 'events' => [ + 'title' => 'Events', + 'add-title' => 'Add Event', + 'edit-title' => 'Edit Event', + 'save-btn-title' => 'Save', + 'general' => 'General', + 'name' => 'Name', + 'description' => 'Description', + 'date' => 'Date', + 'create-success' => 'Event created successfully.', + 'update-success' => 'Event updated successfully.', + 'delete-success' => 'Event deleted successfully.', + 'edit-error' => 'Can not edit this event.' + ] + ], + 'error' => [ 'go-to-home' => 'إذهب إلى البيت', 'in-maitainace' => 'في الصيانة', diff --git a/packages/Webkul/Admin/src/Resources/lang/de/app.php b/packages/Webkul/Admin/src/Resources/lang/de/app.php index 1ff1fce03..7088d4541 100755 --- a/packages/Webkul/Admin/src/Resources/lang/de/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/de/app.php @@ -72,9 +72,13 @@ return [ 'roles' => 'Rollen', 'sliders' => 'Slider', 'taxes' => 'Steuern', + 'marketing' => 'Marketing', + 'promotions' => 'Promotions', + 'email-marketing' => 'Email Marketing', + 'campaigns' => 'Campaigns', + 'email-templates' => 'Email Templates', 'tax-categories' => 'Steuer-Kategorien', 'tax-rates' => 'Steuersätze', - 'promotions' => 'Promotions', 'discount' => 'Rabatt', 'cms' => 'CMS', ], @@ -110,6 +114,7 @@ return [ 'edit' => 'Bearbeiten', 'create' => 'Hinzufügen', 'delete' => 'Löschen', + 'marketing' => 'Marketing', 'promotions' => 'Promotions', 'cart-rules' => 'Warenkorbregeln', 'catalog-rules' => 'Katalogregeln', @@ -1130,6 +1135,69 @@ return [ 'attribute_family' => 'Attributgruppe', ], ], + + 'marketing' => [ + 'templates' => [ + 'title' => 'Email Templates', + 'add-title' => 'Add Email Template', + 'edit-title' => 'Edit Email Template', + 'save-btn-title' => 'Save', + 'general' => 'General', + 'name' => 'Name', + 'status' => 'Status', + 'active' => 'Active', + 'inactive' => 'Inactive', + 'draft' => 'Draft', + 'content' => 'Content', + 'create-success' => 'Email template created successfully.', + 'update-success' => 'Email template updated successfully.', + 'delete-success' => 'Email template deleted successfully', + ], + + 'campaigns' => [ + 'title' => 'Campaigns', + 'add-title' => 'Add Campaign', + 'edit-title' => 'Edit Campaign', + 'save-btn-title' => 'Save', + 'general' => 'General', + 'name' => 'Name', + 'status' => 'Status', + 'active' => 'Active', + 'inactive' => 'Inactive', + 'subject' => 'Subject', + 'email-template' => 'Email Template', + 'audience' => 'Audience', + 'channel' => 'Channel', + 'customer-group' => 'Customer Group', + 'schedule' => 'Schedule', + 'schedule-type' => 'Schedule Type', + 'once' => 'Once', + 'events' => 'Events', + 'schedule-date' => 'Schedule Date', + 'spooling' => 'Spooling', + 'event' => 'Event', + 'birthday' => 'Birthday', + 'create-success' => 'Campaign created successfully.', + 'update-success' => 'Campaign updated successfully.', + 'delete-success' => 'Campaign deleted successfully', + ], + + 'events' => [ + 'title' => 'Events', + 'add-title' => 'Add Event', + 'edit-title' => 'Edit Event', + 'save-btn-title' => 'Save', + 'general' => 'General', + 'name' => 'Name', + 'description' => 'Description', + 'date' => 'Date', + 'create-success' => 'Event created successfully.', + 'update-success' => 'Event updated successfully.', + 'delete-success' => 'Event deleted successfully.', + 'edit-error' => 'Can not edit this event.' + ] + ], + 'error' => [ 'go-to-home' => 'HOME ÖFFNEN', diff --git a/packages/Webkul/Admin/src/Resources/lang/en/app.php b/packages/Webkul/Admin/src/Resources/lang/en/app.php index 6b02a6c40..2625e665e 100755 --- a/packages/Webkul/Admin/src/Resources/lang/en/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/en/app.php @@ -75,7 +75,12 @@ return [ 'taxes' => 'Taxes', 'tax-categories' => 'Tax Categories', 'tax-rates' => 'Tax Rates', + 'marketing' => 'Marketing', 'promotions' => 'Promotions', + 'email-marketing' => 'Email Marketing', + 'campaigns' => 'Campaigns', + 'email-templates' => 'Email Templates', + 'events' => 'Events', 'discount' => 'Discount', 'cms' => 'CMS' ], @@ -111,9 +116,15 @@ return [ 'edit' => 'Edit', 'create' => 'Add', 'delete' => 'Delete', + 'marketing' => 'Marketing', 'promotions' => 'Promotions', 'cart-rules' => 'Cart Rules', 'catalog-rules' => 'Catalog Rules', + 'email-marketing' => 'Email Marketing', + 'email-templates' => 'Email Templates', + 'campaigns' => 'Campaigns', + 'subscribers' => 'Newsletter Subscribers', + 'events' => 'Events' ], 'dashboard' => [ @@ -213,6 +224,7 @@ return [ 'end' => 'End', 'active' => 'Active', 'inactive' => 'Inactive', + 'draft' => 'Draft', 'true' => 'True', 'false' => 'False', 'approved' => 'Approved', @@ -227,7 +239,9 @@ return [ 'view' => 'View', 'rtl' => 'RTL', 'ltr' => 'LTR', - 'update-status' => 'Update Status' + 'update-status' => 'Update Status', + 'subject' => 'Subject', + 'date' => 'Date' ], 'account' => [ @@ -981,8 +995,8 @@ return [ ], 'subscribers' => [ - 'title' => 'News Letter Subscribers', - 'title-edit' => 'Edit News Letter Subscriber', + 'title' => 'Newsletter Subscribers', + 'title-edit' => 'Edit Newsletter Subscriber', 'email' => 'Email', 'is_subscribed' => 'Subscribed', 'edit-btn-title' => 'Update Subscriber', @@ -1129,6 +1143,68 @@ return [ ] ], + 'marketing' => [ + 'templates' => [ + 'title' => 'Email Templates', + 'add-title' => 'Add Email Template', + 'edit-title' => 'Edit Email Template', + 'save-btn-title' => 'Save', + 'general' => 'General', + 'name' => 'Name', + 'status' => 'Status', + 'active' => 'Active', + 'inactive' => 'Inactive', + 'draft' => 'Draft', + 'content' => 'Content', + 'create-success' => 'Email template created successfully.', + 'update-success' => 'Email template updated successfully.', + 'delete-success' => 'Email template deleted successfully', + ], + + 'campaigns' => [ + 'title' => 'Campaigns', + 'add-title' => 'Add Campaign', + 'edit-title' => 'Edit Campaign', + 'save-btn-title' => 'Save', + 'general' => 'General', + 'name' => 'Name', + 'status' => 'Status', + 'active' => 'Active', + 'inactive' => 'Inactive', + 'subject' => 'Subject', + 'email-template' => 'Email Template', + 'audience' => 'Audience', + 'channel' => 'Channel', + 'customer-group' => 'Customer Group', + 'schedule' => 'Schedule', + 'schedule-type' => 'Schedule Type', + 'once' => 'Once', + 'events' => 'Events', + 'schedule-date' => 'Schedule Date', + 'spooling' => 'Spooling', + 'event' => 'Event', + 'birthday' => 'Birthday', + 'create-success' => 'Campaign created successfully.', + 'update-success' => 'Campaign updated successfully.', + 'delete-success' => 'Campaign deleted successfully', + ], + + 'events' => [ + 'title' => 'Events', + 'add-title' => 'Add Event', + 'edit-title' => 'Edit Event', + 'save-btn-title' => 'Save', + 'general' => 'General', + 'name' => 'Name', + 'description' => 'Description', + 'date' => 'Date', + 'create-success' => 'Event created successfully.', + 'update-success' => 'Event updated successfully.', + 'delete-success' => 'Event deleted successfully.', + 'edit-error' => 'Can not edit this event.' + ] + ], + 'error' => [ 'go-to-home' => 'GO TO HOME', 'in-maitainace' => 'In Maintenance', @@ -1302,8 +1378,8 @@ return [ 'money-transfer' => 'Money Transfer', 'paypal-standard' => 'PayPal Standard', 'business-account' => 'Business Account', - 'newsletter' => 'NewsLetter Subscription', - 'newsletter-subscription' => 'Allow NewsLetter Subscription', + 'newsletter' => 'Newsletter Subscription', + 'newsletter-subscription' => 'Allow Newsletter Subscription', 'email' => 'Email Verification', 'email-verification' => 'Allow Email Verification', 'sort_order' => 'Sort Order', diff --git a/packages/Webkul/Admin/src/Resources/lang/es/app.php b/packages/Webkul/Admin/src/Resources/lang/es/app.php index df068ac2c..6f4f46711 100644 --- a/packages/Webkul/Admin/src/Resources/lang/es/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/es/app.php @@ -73,7 +73,11 @@ return [ 'taxes' => 'Impuestos', 'tax-categories' => 'Categorías de impuestos', 'tax-rates' => 'Tasas de impuestos', + 'marketing' => 'Marketing', 'promotions' => 'Promociones', + 'email-marketing' => 'Email Marketing', + 'campaigns' => 'Campaigns', + 'email-templates' => 'Email Templates', 'discount' => 'Descuento', 'cms' => 'CMS' ], @@ -109,6 +113,7 @@ return [ 'edit' => 'Editar', 'create' => 'Agregar', 'delete' => 'Borrar', + 'marketing' => 'Marketing', 'promotions' => 'Promociones', 'cart-rules' => 'Reglas del carrito', 'catalog-rules' => 'Reglas del catálogo', @@ -1122,6 +1127,68 @@ return [ ] ], + 'marketing' => [ + 'templates' => [ + 'title' => 'Email Templates', + 'add-title' => 'Add Email Template', + 'edit-title' => 'Edit Email Template', + 'save-btn-title' => 'Save', + 'general' => 'General', + 'name' => 'Name', + 'status' => 'Status', + 'active' => 'Active', + 'inactive' => 'Inactive', + 'draft' => 'Draft', + 'content' => 'Content', + 'create-success' => 'Email template created successfully.', + 'update-success' => 'Email template updated successfully.', + 'delete-success' => 'Email template deleted successfully', + ], + + 'campaigns' => [ + 'title' => 'Campaigns', + 'add-title' => 'Add Campaign', + 'edit-title' => 'Edit Campaign', + 'save-btn-title' => 'Save', + 'general' => 'General', + 'name' => 'Name', + 'status' => 'Status', + 'active' => 'Active', + 'inactive' => 'Inactive', + 'subject' => 'Subject', + 'email-template' => 'Email Template', + 'audience' => 'Audience', + 'channel' => 'Channel', + 'customer-group' => 'Customer Group', + 'schedule' => 'Schedule', + 'schedule-type' => 'Schedule Type', + 'once' => 'Once', + 'events' => 'Events', + 'schedule-date' => 'Schedule Date', + 'spooling' => 'Spooling', + 'event' => 'Event', + 'birthday' => 'Birthday', + 'create-success' => 'Campaign created successfully.', + 'update-success' => 'Campaign updated successfully.', + 'delete-success' => 'Campaign deleted successfully', + ], + + 'events' => [ + 'title' => 'Events', + 'add-title' => 'Add Event', + 'edit-title' => 'Edit Event', + 'save-btn-title' => 'Save', + 'general' => 'General', + 'name' => 'Name', + 'description' => 'Description', + 'date' => 'Date', + 'create-success' => 'Event created successfully.', + 'update-success' => 'Event updated successfully.', + 'delete-success' => 'Event deleted successfully.', + 'edit-error' => 'Can not edit this event.' + ] + ], + 'error' => [ 'go-to-home' => 'REGRESAR AL INICIO', 'in-maitainace' => 'En mantenimiento', diff --git a/packages/Webkul/Admin/src/Resources/lang/fa/app.php b/packages/Webkul/Admin/src/Resources/lang/fa/app.php index 857b57b94..ef58c897f 100644 --- a/packages/Webkul/Admin/src/Resources/lang/fa/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/fa/app.php @@ -74,7 +74,11 @@ return [ 'taxes' => 'مالیات', 'tax-categories' => 'دسته بندی مالیات', 'tax-rates' => 'نرخ مالیات', - 'promotion' => 'تبلیغات', + 'marketing' => 'Marketing', + 'promotions' => 'تبلیغات', + 'email-marketing' => 'Email Marketing', + 'campaigns' => 'Campaigns', + 'email-templates' => 'Email Templates', 'discount' => 'تخفیف', 'cms' => 'CMS' ], @@ -110,7 +114,8 @@ return [ 'edit' => 'ویاریش', 'create' => 'افزودن', 'delete' => 'حذف', - 'promotion' => 'تبلیغات', + 'marketing' => 'Marketing', + 'promotions' => 'تبلیغات', 'cart-rules' => 'قوانین سبد خرید', 'catalog-rules' => 'قوانین فهرست', ], @@ -992,7 +997,7 @@ return [ ] ], - 'promotion' => [ + 'promotions' => [ 'cart-rules' => [ 'title' => 'قوانین سبد خرید', 'add-title' => 'قانون سبد خرید را اضافه کنید', @@ -1128,6 +1133,70 @@ return [ ] ], + + + 'marketing' => [ + 'templates' => [ + 'title' => 'Email Templates', + 'add-title' => 'Add Email Template', + 'edit-title' => 'Edit Email Template', + 'save-btn-title' => 'Save', + 'general' => 'General', + 'name' => 'Name', + 'status' => 'Status', + 'active' => 'Active', + 'inactive' => 'Inactive', + 'draft' => 'Draft', + 'content' => 'Content', + 'create-success' => 'Email template created successfully.', + 'update-success' => 'Email template updated successfully.', + 'delete-success' => 'Email template deleted successfully', + ], + + 'campaigns' => [ + 'title' => 'Campaigns', + 'add-title' => 'Add Campaign', + 'edit-title' => 'Edit Campaign', + 'save-btn-title' => 'Save', + 'general' => 'General', + 'name' => 'Name', + 'status' => 'Status', + 'active' => 'Active', + 'inactive' => 'Inactive', + 'subject' => 'Subject', + 'email-template' => 'Email Template', + 'audience' => 'Audience', + 'channel' => 'Channel', + 'customer-group' => 'Customer Group', + 'schedule' => 'Schedule', + 'schedule-type' => 'Schedule Type', + 'once' => 'Once', + 'events' => 'Events', + 'schedule-date' => 'Schedule Date', + 'spooling' => 'Spooling', + 'event' => 'Event', + 'birthday' => 'Birthday', + 'create-success' => 'Campaign created successfully.', + 'update-success' => 'Campaign updated successfully.', + 'delete-success' => 'Campaign deleted successfully', + ], + + 'events' => [ + 'title' => 'Events', + 'add-title' => 'Add Event', + 'edit-title' => 'Edit Event', + 'save-btn-title' => 'Save', + 'general' => 'General', + 'name' => 'Name', + 'description' => 'Description', + 'date' => 'Date', + 'create-success' => 'Event created successfully.', + 'update-success' => 'Event updated successfully.', + 'delete-success' => 'Event deleted successfully.', + 'edit-error' => 'Can not edit this event.' + ] + ], + 'error' => [ 'go-to-home' => 'رفتن به خانه', 'in-maitainace' => 'در حال تعمیر و نگهداری', diff --git a/packages/Webkul/Admin/src/Resources/lang/it/app.php b/packages/Webkul/Admin/src/Resources/lang/it/app.php index e49e402fa..0ddf943ec 100644 --- a/packages/Webkul/Admin/src/Resources/lang/it/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/it/app.php @@ -74,7 +74,11 @@ return [ 'taxes' => 'IVA', 'tax-categories' => 'Categorie IVA', 'tax-rates' => 'Aliquote IVA', + 'marketing' => 'Marketing', 'promotions' => 'Promozioni', + 'email-marketing' => 'Email Marketing', + 'campaigns' => 'Campaigns', + 'email-templates' => 'Email Templates', 'discount' => 'Sconti', 'cms' => 'CMS' ], @@ -110,6 +114,7 @@ return [ 'edit' => 'Modifica', 'create' => 'Aggiungi', 'delete' => 'Elimina', + 'marketing' => 'Marketing', 'promotions' => 'Promozioni', 'cart-rules' => 'Regole Carrello', 'catalog-rules' => 'Regole Catalogo', @@ -1133,6 +1138,68 @@ return [ ] ], + 'marketing' => [ + 'templates' => [ + 'title' => 'Email Templates', + 'add-title' => 'Add Email Template', + 'edit-title' => 'Edit Email Template', + 'save-btn-title' => 'Save', + 'general' => 'General', + 'name' => 'Name', + 'status' => 'Status', + 'active' => 'Active', + 'inactive' => 'Inactive', + 'draft' => 'Draft', + 'content' => 'Content', + 'create-success' => 'Email template created successfully.', + 'update-success' => 'Email template updated successfully.', + 'delete-success' => 'Email template deleted successfully', + ], + + 'campaigns' => [ + 'title' => 'Campaigns', + 'add-title' => 'Add Campaign', + 'edit-title' => 'Edit Campaign', + 'save-btn-title' => 'Save', + 'general' => 'General', + 'name' => 'Name', + 'status' => 'Status', + 'active' => 'Active', + 'inactive' => 'Inactive', + 'subject' => 'Subject', + 'email-template' => 'Email Template', + 'audience' => 'Audience', + 'channel' => 'Channel', + 'customer-group' => 'Customer Group', + 'schedule' => 'Schedule', + 'schedule-type' => 'Schedule Type', + 'once' => 'Once', + 'events' => 'Events', + 'schedule-date' => 'Schedule Date', + 'spooling' => 'Spooling', + 'event' => 'Event', + 'birthday' => 'Birthday', + 'create-success' => 'Campaign created successfully.', + 'update-success' => 'Campaign updated successfully.', + 'delete-success' => 'Campaign deleted successfully', + ], + + 'events' => [ + 'title' => 'Events', + 'add-title' => 'Add Event', + 'edit-title' => 'Edit Event', + 'save-btn-title' => 'Save', + 'general' => 'General', + 'name' => 'Name', + 'description' => 'Description', + 'date' => 'Date', + 'create-success' => 'Event created successfully.', + 'update-success' => 'Event updated successfully.', + 'delete-success' => 'Event deleted successfully.', + 'edit-error' => 'Can not edit this event.' + ] + ], + 'error' => [ 'go-to-home' => 'TORNA A HOME', 'in-maitainace' => 'In Manutezione', diff --git a/packages/Webkul/Admin/src/Resources/lang/nl/app.php b/packages/Webkul/Admin/src/Resources/lang/nl/app.php index d1496bc70..421a2db49 100644 --- a/packages/Webkul/Admin/src/Resources/lang/nl/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/nl/app.php @@ -74,7 +74,11 @@ return [ 'taxes' => 'BTW', 'tax-categories' => 'BTW-groepen', 'tax-rates' => 'BTW-tarieven', + 'marketing' => 'Marketing', 'promotions' => 'Promoties', + 'email-marketing' => 'Email Marketing', + 'campaigns' => 'Campaigns', + 'email-templates' => 'Email Templates', 'discount' => 'Korting', 'cms' => 'CMS' ], @@ -110,6 +114,7 @@ return [ 'edit' => 'Edit', 'create' => 'Add', 'delete' => 'Verwijder', + 'marketing' => 'Marketing', 'promotions' => 'Promoties', 'cart-rules' => 'Cart Rules', 'catalog-rules' => 'Catalog Rules', @@ -1129,6 +1134,68 @@ return [ ] ], + 'marketing' => [ + 'templates' => [ + 'title' => 'Email Templates', + 'add-title' => 'Add Email Template', + 'edit-title' => 'Edit Email Template', + 'save-btn-title' => 'Save', + 'general' => 'General', + 'name' => 'Name', + 'status' => 'Status', + 'active' => 'Active', + 'inactive' => 'Inactive', + 'draft' => 'Draft', + 'content' => 'Content', + 'create-success' => 'Email template created successfully.', + 'update-success' => 'Email template updated successfully.', + 'delete-success' => 'Email template deleted successfully', + ], + + 'campaigns' => [ + 'title' => 'Campaigns', + 'add-title' => 'Add Campaign', + 'edit-title' => 'Edit Campaign', + 'save-btn-title' => 'Save', + 'general' => 'General', + 'name' => 'Name', + 'status' => 'Status', + 'active' => 'Active', + 'inactive' => 'Inactive', + 'subject' => 'Subject', + 'email-template' => 'Email Template', + 'audience' => 'Audience', + 'channel' => 'Channel', + 'customer-group' => 'Customer Group', + 'schedule' => 'Schedule', + 'schedule-type' => 'Schedule Type', + 'once' => 'Once', + 'events' => 'Events', + 'schedule-date' => 'Schedule Date', + 'spooling' => 'Spooling', + 'event' => 'Event', + 'birthday' => 'Birthday', + 'create-success' => 'Campaign created successfully.', + 'update-success' => 'Campaign updated successfully.', + 'delete-success' => 'Campaign deleted successfully', + ], + + 'events' => [ + 'title' => 'Events', + 'add-title' => 'Add Event', + 'edit-title' => 'Edit Event', + 'save-btn-title' => 'Save', + 'general' => 'General', + 'name' => 'Name', + 'description' => 'Description', + 'date' => 'Date', + 'create-success' => 'Event created successfully.', + 'update-success' => 'Event updated successfully.', + 'delete-success' => 'Event deleted successfully.', + 'edit-error' => 'Can not edit this event.' + ] + ], + 'error' => [ 'go-to-home' => 'GA NAAR HUIS', 'in-maitainace' => 'In onderhoud', diff --git a/packages/Webkul/Admin/src/Resources/lang/pl/app.php b/packages/Webkul/Admin/src/Resources/lang/pl/app.php index 0b5a4c0e5..899d8ba2e 100644 --- a/packages/Webkul/Admin/src/Resources/lang/pl/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/pl/app.php @@ -73,7 +73,11 @@ return [ 'taxes' => 'Podatki', 'tax-categories' => 'Kategorie podatkowe', 'tax-rates' => 'Stawki podatkowe', + 'marketing' => 'Marketing', 'promotions' => 'Promocje', + 'email-marketing' => 'Email Marketing', + 'campaigns' => 'Campaigns', + 'email-templates' => 'Email Templates', 'discount' => 'Rabat', 'cms' => 'System CMS' ], @@ -109,6 +113,7 @@ return [ 'edit' => 'Edytuj', 'create' => 'Dodaj', 'delete' => 'Usuń', + 'marketing' => 'Marketing', 'promotions' => 'Promocje', 'cart-rules' => 'Zasady koszyka', 'catalog-rules' => 'Zasady katalogu', @@ -1130,6 +1135,68 @@ return [ ] ], + 'marketing' => [ + 'templates' => [ + 'title' => 'Email Templates', + 'add-title' => 'Add Email Template', + 'edit-title' => 'Edit Email Template', + 'save-btn-title' => 'Save', + 'general' => 'General', + 'name' => 'Name', + 'status' => 'Status', + 'active' => 'Active', + 'inactive' => 'Inactive', + 'draft' => 'Draft', + 'content' => 'Content', + 'create-success' => 'Email template created successfully.', + 'update-success' => 'Email template updated successfully.', + 'delete-success' => 'Email template deleted successfully', + ], + + 'campaigns' => [ + 'title' => 'Campaigns', + 'add-title' => 'Add Campaign', + 'edit-title' => 'Edit Campaign', + 'save-btn-title' => 'Save', + 'general' => 'General', + 'name' => 'Name', + 'status' => 'Status', + 'active' => 'Active', + 'inactive' => 'Inactive', + 'subject' => 'Subject', + 'email-template' => 'Email Template', + 'audience' => 'Audience', + 'channel' => 'Channel', + 'customer-group' => 'Customer Group', + 'schedule' => 'Schedule', + 'schedule-type' => 'Schedule Type', + 'once' => 'Once', + 'events' => 'Events', + 'schedule-date' => 'Schedule Date', + 'spooling' => 'Spooling', + 'event' => 'Event', + 'birthday' => 'Birthday', + 'create-success' => 'Campaign created successfully.', + 'update-success' => 'Campaign updated successfully.', + 'delete-success' => 'Campaign deleted successfully', + ], + + 'events' => [ + 'title' => 'Events', + 'add-title' => 'Add Event', + 'edit-title' => 'Edit Event', + 'save-btn-title' => 'Save', + 'general' => 'General', + 'name' => 'Name', + 'description' => 'Description', + 'date' => 'Date', + 'create-success' => 'Event created successfully.', + 'update-success' => 'Event updated successfully.', + 'delete-success' => 'Event deleted successfully.', + 'edit-error' => 'Can not edit this event.' + ] + ], + 'error' => [ 'go-to-home' => 'IDŹ DO GŁÓWNEJ', 'in-maitainace' => 'W konserwacji', diff --git a/packages/Webkul/Admin/src/Resources/lang/pt_BR/app.php b/packages/Webkul/Admin/src/Resources/lang/pt_BR/app.php index 2b23f1766..26b1473cd 100755 --- a/packages/Webkul/Admin/src/Resources/lang/pt_BR/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/pt_BR/app.php @@ -74,7 +74,11 @@ return [ 'taxes' => 'Impostos', 'tax-categories' => 'Categorias de Impostos', 'tax-rates' => 'Impostos de Impostos', - 'promotion' => 'Promoções', + 'marketing' => 'Marketing', + 'promotions' => 'Promoções', + 'email-marketing' => 'Email Marketing', + 'campaigns' => 'Campaigns', + 'email-templates' => 'Email Templates', 'discount' => 'Desconto', 'cms' => 'CMS' ], @@ -110,6 +114,7 @@ return [ 'edit' => 'Edit', 'create' => 'Add', 'delete' => 'Delete', + 'marketing' => 'Marketing', 'promotions' => 'Promoções', 'cart-rules' => 'Regras do Carrinho', 'catalog-rules' => 'Regras do Catálogo', @@ -993,7 +998,7 @@ return [ ] ], - 'promotion' => [ + 'promotions' => [ 'cart-rules' => [ 'title' => 'Regras do carrinho', 'add-title' => 'Adicionar regra de carrinho', @@ -1129,6 +1134,68 @@ return [ ] ], + 'marketing' => [ + 'templates' => [ + 'title' => 'Email Templates', + 'add-title' => 'Add Email Template', + 'edit-title' => 'Edit Email Template', + 'save-btn-title' => 'Save', + 'general' => 'General', + 'name' => 'Name', + 'status' => 'Status', + 'active' => 'Active', + 'inactive' => 'Inactive', + 'draft' => 'Draft', + 'content' => 'Content', + 'create-success' => 'Email template created successfully.', + 'update-success' => 'Email template updated successfully.', + 'delete-success' => 'Email template deleted successfully', + ], + + 'campaigns' => [ + 'title' => 'Campaigns', + 'add-title' => 'Add Campaign', + 'edit-title' => 'Edit Campaign', + 'save-btn-title' => 'Save', + 'general' => 'General', + 'name' => 'Name', + 'status' => 'Status', + 'active' => 'Active', + 'inactive' => 'Inactive', + 'subject' => 'Subject', + 'email-template' => 'Email Template', + 'audience' => 'Audience', + 'channel' => 'Channel', + 'customer-group' => 'Customer Group', + 'schedule' => 'Schedule', + 'schedule-type' => 'Schedule Type', + 'once' => 'Once', + 'events' => 'Events', + 'schedule-date' => 'Schedule Date', + 'spooling' => 'Spooling', + 'event' => 'Event', + 'birthday' => 'Birthday', + 'create-success' => 'Campaign created successfully.', + 'update-success' => 'Campaign updated successfully.', + 'delete-success' => 'Campaign deleted successfully', + ], + + 'events' => [ + 'title' => 'Events', + 'add-title' => 'Add Event', + 'edit-title' => 'Edit Event', + 'save-btn-title' => 'Save', + 'general' => 'General', + 'name' => 'Name', + 'description' => 'Description', + 'date' => 'Date', + 'create-success' => 'Event created successfully.', + 'update-success' => 'Event updated successfully.', + 'delete-success' => 'Event deleted successfully.', + 'edit-error' => 'Can not edit this event.' + ] + ], + 'error' => [ 'go-to-home' => 'IR PARA PÁGINA INICIAL', 'in-maitainace' => 'Em manutenção', diff --git a/packages/Webkul/Admin/src/Resources/lang/tr/app.php b/packages/Webkul/Admin/src/Resources/lang/tr/app.php index f5ab3f907..16fef768b 100644 --- a/packages/Webkul/Admin/src/Resources/lang/tr/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/tr/app.php @@ -72,7 +72,11 @@ return [ 'taxes' => 'Vergiler', 'tax-categories' => 'Vergi Kategorileri', 'tax-rates' => 'Vergi Oranları', + 'marketing' => 'Marketing', 'promotions' => 'Promosyon', + 'email-marketing' => 'Email Marketing', + 'campaigns' => 'Campaigns', + 'email-templates' => 'Email Templates', 'discount' => 'İndirim', 'cms' => 'CMS' ], @@ -108,6 +112,7 @@ return [ 'edit' => 'Düzenle', 'create' => 'Oluştur', 'delete' => 'Sil', + 'marketing' => 'Marketing', 'promotions' => 'Promosyonlar', 'cart-rules' => 'Alışveriş Sepeti Kuralları', 'catalog-rules' => 'Katalog Kuralları', @@ -1117,6 +1122,68 @@ return [ ] ], + 'marketing' => [ + 'templates' => [ + 'title' => 'Email Templates', + 'add-title' => 'Add Email Template', + 'edit-title' => 'Edit Email Template', + 'save-btn-title' => 'Save', + 'general' => 'General', + 'name' => 'Name', + 'status' => 'Status', + 'active' => 'Active', + 'inactive' => 'Inactive', + 'draft' => 'Draft', + 'content' => 'Content', + 'create-success' => 'Email template created successfully.', + 'update-success' => 'Email template updated successfully.', + 'delete-success' => 'Email template deleted successfully', + ], + + 'campaigns' => [ + 'title' => 'Campaigns', + 'add-title' => 'Add Campaign', + 'edit-title' => 'Edit Campaign', + 'save-btn-title' => 'Save', + 'general' => 'General', + 'name' => 'Name', + 'status' => 'Status', + 'active' => 'Active', + 'inactive' => 'Inactive', + 'subject' => 'Subject', + 'email-template' => 'Email Template', + 'audience' => 'Audience', + 'channel' => 'Channel', + 'customer-group' => 'Customer Group', + 'schedule' => 'Schedule', + 'schedule-type' => 'Schedule Type', + 'once' => 'Once', + 'events' => 'Events', + 'schedule-date' => 'Schedule Date', + 'spooling' => 'Spooling', + 'event' => 'Event', + 'birthday' => 'Birthday', + 'create-success' => 'Campaign created successfully.', + 'update-success' => 'Campaign updated successfully.', + 'delete-success' => 'Campaign deleted successfully', + ], + + 'events' => [ + 'title' => 'Events', + 'add-title' => 'Add Event', + 'edit-title' => 'Edit Event', + 'save-btn-title' => 'Save', + 'general' => 'General', + 'name' => 'Name', + 'description' => 'Description', + 'date' => 'Date', + 'create-success' => 'Event created successfully.', + 'update-success' => 'Event updated successfully.', + 'delete-success' => 'Event deleted successfully.', + 'edit-error' => 'Can not edit this event.' + ] + ], + 'error' => [ 'go-to-home' => 'ANA SAYFAYA GİT', 'in-maitainace' => 'Bakım Modunda', diff --git a/packages/Webkul/Admin/src/Resources/views/marketing/email-marketing/campaigns/create.blade.php b/packages/Webkul/Admin/src/Resources/views/marketing/email-marketing/campaigns/create.blade.php new file mode 100755 index 000000000..98963a669 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/marketing/email-marketing/campaigns/create.blade.php @@ -0,0 +1,124 @@ +@extends('admin::layouts.content') + +@section('page_title') + {{ __('admin::app.marketing.campaigns.add-title') }} +@stop + +@section('content') +
+ +
+ + +
+
+ @csrf() + + {!! view_render_event('bagisto.admin.marketing.templates.create.before') !!} + + +
+ +
+ + + @{{ errors.first('name') }} +
+ +
+ + + @{{ errors.first('subject') }} +
+ +
+ + + @{{ errors.first('marketing_event_id') }} +
+ +
+ + + @{{ errors.first('marketing_template_id') }} +
+ +
+ + + @{{ errors.first('status') }} +
+ +
+
+ + +
+ +
+ + + @{{ errors.first('channel_id') }} +
+ +
+ + + @{{ errors.first('customer_group_id') }} +
+ +
+
+ + {!! view_render_event('bagisto.admin.marketing.templates.create.after') !!} + +
+
+
+
+@stop \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/marketing/email-marketing/campaigns/edit.blade.php b/packages/Webkul/Admin/src/Resources/views/marketing/email-marketing/campaigns/edit.blade.php new file mode 100755 index 000000000..662597560 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/marketing/email-marketing/campaigns/edit.blade.php @@ -0,0 +1,129 @@ +@extends('admin::layouts.content') + +@section('page_title') + {{ __('admin::app.marketing.campaigns.edit-title') }} +@stop + +@section('content') +
+ +
+ + +
+
+ @csrf() + + {!! view_render_event('bagisto.admin.marketing.templates.create.before') !!} + + +
+ +
+ + + @{{ errors.first('name') }} +
+ +
+ + + @{{ errors.first('subject') }} +
+ +
+ + marketing_event_id ?> + + @{{ errors.first('marketing_event_id') }} +
+ +
+ + marketing_template_id ?> + + @{{ errors.first('marketing_template_id') }} +
+ +
+ + status ?> + + @{{ errors.first('status') }} +
+ +
+
+ + +
+ +
+ + channel_id ?> + + @{{ errors.first('channel_id') }} +
+ +
+ + customer_group_id ?> + + @{{ errors.first('customer_group_id') }} +
+ +
+
+ + {!! view_render_event('bagisto.admin.marketing.templates.create.after') !!} + +
+
+
+
+@stop \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/marketing/email-marketing/campaigns/index.blade.php b/packages/Webkul/Admin/src/Resources/views/marketing/email-marketing/campaigns/index.blade.php new file mode 100755 index 000000000..0d82fb5d2 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/marketing/email-marketing/campaigns/index.blade.php @@ -0,0 +1,27 @@ +@extends('admin::layouts.content') + +@section('page_title') + {{ __('admin::app.marketing.campaigns.title') }} +@stop + +@section('content') +
+ + +
+ + {!! app('Webkul\Admin\DataGrids\CampaignDataGrid')->render() !!} + +
+
+@stop \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/marketing/email-marketing/events/create.blade.php b/packages/Webkul/Admin/src/Resources/views/marketing/email-marketing/events/create.blade.php new file mode 100755 index 000000000..5eb63ec7f --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/marketing/email-marketing/events/create.blade.php @@ -0,0 +1,64 @@ +@extends('admin::layouts.content') + +@section('page_title') + {{ __('admin::app.marketing.events.add-title') }} +@stop + +@section('content') +
+ +
+ + +
+
+ @csrf() + + {!! view_render_event('bagisto.admin.marketing.events.create.before') !!} + + +
+
+ + + @{{ errors.first('name') }} +
+ +
+ + + @{{ errors.first('description') }} +
+ +
+ + + + + @{{ errors.first('date') }} +
+ +
+
+ + {!! view_render_event('bagisto.admin.marketing.events.create.after') !!} + +
+
+
+
+@stop \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/marketing/email-marketing/events/edit.blade.php b/packages/Webkul/Admin/src/Resources/views/marketing/email-marketing/events/edit.blade.php new file mode 100755 index 000000000..652aaf6f9 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/marketing/email-marketing/events/edit.blade.php @@ -0,0 +1,65 @@ +@extends('admin::layouts.content') + +@section('page_title') + {{ __('admin::app.marketing.events.edit-title') }} +@stop + +@section('content') +
+ +
+ + +
+
+ @csrf() + + {!! view_render_event('bagisto.admin.marketing.events.create.before') !!} + + +
+ +
+ + + @{{ errors.first('name') }} +
+ +
+ + + @{{ errors.first('description') }} +
+ +
+ + + + + @{{ errors.first('date') }} +
+ +
+
+ + {!! view_render_event('bagisto.admin.marketing.events.create.after') !!} + +
+
+
+
+@stop \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/marketing/email-marketing/events/index.blade.php b/packages/Webkul/Admin/src/Resources/views/marketing/email-marketing/events/index.blade.php new file mode 100755 index 000000000..a2e1a8d5a --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/marketing/email-marketing/events/index.blade.php @@ -0,0 +1,27 @@ +@extends('admin::layouts.content') + +@section('page_title') + {{ __('admin::app.marketing.events.title') }} +@stop + +@section('content') +
+ + +
+ + {!! app('Webkul\Admin\DataGrids\EventDataGrid')->render() !!} + +
+
+@stop \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/customers/subscribers/edit.blade.php b/packages/Webkul/Admin/src/Resources/views/marketing/email-marketing/subscribers/edit.blade.php similarity index 100% rename from packages/Webkul/Admin/src/Resources/views/customers/subscribers/edit.blade.php rename to packages/Webkul/Admin/src/Resources/views/marketing/email-marketing/subscribers/edit.blade.php diff --git a/packages/Webkul/Admin/src/Resources/views/customers/subscribers/index.blade.php b/packages/Webkul/Admin/src/Resources/views/marketing/email-marketing/subscribers/index.blade.php similarity index 100% rename from packages/Webkul/Admin/src/Resources/views/customers/subscribers/index.blade.php rename to packages/Webkul/Admin/src/Resources/views/marketing/email-marketing/subscribers/index.blade.php diff --git a/packages/Webkul/Admin/src/Resources/views/marketing/email-marketing/templates/create.blade.php b/packages/Webkul/Admin/src/Resources/views/marketing/email-marketing/templates/create.blade.php new file mode 100755 index 000000000..cc247ff6d --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/marketing/email-marketing/templates/create.blade.php @@ -0,0 +1,89 @@ +@extends('admin::layouts.content') + +@section('page_title') + {{ __('admin::app.marketing.templates.add-title') }} +@stop + +@section('content') +
+ +
+ + +
+
+ @csrf() + + {!! view_render_event('bagisto.admin.marketing.templates.create.before') !!} + + +
+
+ + + @{{ errors.first('name') }} +
+ +
+ + + @{{ errors.first('status') }} +
+ +
+ + + @{{ errors.first('content') }} +
+
+
+ + {!! view_render_event('bagisto.admin.marketing.templates.create.after') !!} + +
+
+
+
+@stop + +@push('scripts') + + + + +@endpush \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/marketing/email-marketing/templates/edit.blade.php b/packages/Webkul/Admin/src/Resources/views/marketing/email-marketing/templates/edit.blade.php new file mode 100755 index 000000000..7835c2500 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/marketing/email-marketing/templates/edit.blade.php @@ -0,0 +1,90 @@ +@extends('admin::layouts.content') + +@section('page_title') + {{ __('admin::app.marketing.templates.edit-title') }} +@stop + +@section('content') +
+ +
+ + +
+
+ @csrf() + + {!! view_render_event('bagisto.admin.marketing.templates.create.before') !!} + + +
+
+ + + @{{ errors.first('name') }} +
+ +
+ + status ?> + + @{{ errors.first('status') }} +
+ +
+ + + @{{ errors.first('content') }} +
+
+
+ + {!! view_render_event('bagisto.admin.marketing.templates.create.after') !!} + +
+
+
+
+@stop + +@push('scripts') + + + + +@endpush \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/marketing/email-marketing/templates/index.blade.php b/packages/Webkul/Admin/src/Resources/views/marketing/email-marketing/templates/index.blade.php new file mode 100755 index 000000000..4db472fe2 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/marketing/email-marketing/templates/index.blade.php @@ -0,0 +1,27 @@ +@extends('admin::layouts.content') + +@section('page_title') + {{ __('admin::app.marketing.templates.title') }} +@stop + +@section('content') +
+ + +
+ + {!! app('Webkul\Admin\DataGrids\EmailTemplateDataGrid')->render() !!} + +
+
+@stop \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/promotions/cart-rules/create.blade.php b/packages/Webkul/Admin/src/Resources/views/marketing/promotions/cart-rules/create.blade.php similarity index 100% rename from packages/Webkul/Admin/src/Resources/views/promotions/cart-rules/create.blade.php rename to packages/Webkul/Admin/src/Resources/views/marketing/promotions/cart-rules/create.blade.php diff --git a/packages/Webkul/Admin/src/Resources/views/promotions/cart-rules/edit.blade.php b/packages/Webkul/Admin/src/Resources/views/marketing/promotions/cart-rules/edit.blade.php similarity index 100% rename from packages/Webkul/Admin/src/Resources/views/promotions/cart-rules/edit.blade.php rename to packages/Webkul/Admin/src/Resources/views/marketing/promotions/cart-rules/edit.blade.php diff --git a/packages/Webkul/Admin/src/Resources/views/promotions/cart-rules/index.blade.php b/packages/Webkul/Admin/src/Resources/views/marketing/promotions/cart-rules/index.blade.php similarity index 100% rename from packages/Webkul/Admin/src/Resources/views/promotions/cart-rules/index.blade.php rename to packages/Webkul/Admin/src/Resources/views/marketing/promotions/cart-rules/index.blade.php diff --git a/packages/Webkul/Admin/src/Resources/views/promotions/catalog-rules/create.blade.php b/packages/Webkul/Admin/src/Resources/views/marketing/promotions/catalog-rules/create.blade.php similarity index 100% rename from packages/Webkul/Admin/src/Resources/views/promotions/catalog-rules/create.blade.php rename to packages/Webkul/Admin/src/Resources/views/marketing/promotions/catalog-rules/create.blade.php diff --git a/packages/Webkul/Admin/src/Resources/views/promotions/catalog-rules/edit.blade.php b/packages/Webkul/Admin/src/Resources/views/marketing/promotions/catalog-rules/edit.blade.php similarity index 100% rename from packages/Webkul/Admin/src/Resources/views/promotions/catalog-rules/edit.blade.php rename to packages/Webkul/Admin/src/Resources/views/marketing/promotions/catalog-rules/edit.blade.php diff --git a/packages/Webkul/Admin/src/Resources/views/promotions/catalog-rules/index.blade.php b/packages/Webkul/Admin/src/Resources/views/marketing/promotions/catalog-rules/index.blade.php similarity index 100% rename from packages/Webkul/Admin/src/Resources/views/promotions/catalog-rules/index.blade.php rename to packages/Webkul/Admin/src/Resources/views/marketing/promotions/catalog-rules/index.blade.php diff --git a/packages/Webkul/Core/src/Config/concord.php b/packages/Webkul/Core/src/Config/concord.php index 6730e4739..273b5e100 100644 --- a/packages/Webkul/Core/src/Config/concord.php +++ b/packages/Webkul/Core/src/Config/concord.php @@ -24,6 +24,7 @@ return [ \Webkul\CMS\Providers\ModuleServiceProvider::class, \Webkul\Customer\Providers\ModuleServiceProvider::class, \Webkul\Inventory\Providers\ModuleServiceProvider::class, + \Webkul\Marketing\Providers\ModuleServiceProvider::class, \Webkul\Payment\Providers\ModuleServiceProvider::class, \Webkul\Paypal\Providers\ModuleServiceProvider::class, \Webkul\Product\Providers\ModuleServiceProvider::class, diff --git a/packages/Webkul/Core/src/Database/Migrations/2020_12_24_131004_add_customer_id_column_in_subscribers_list_table.php b/packages/Webkul/Core/src/Database/Migrations/2020_12_24_131004_add_customer_id_column_in_subscribers_list_table.php new file mode 100644 index 000000000..c2005a41e --- /dev/null +++ b/packages/Webkul/Core/src/Database/Migrations/2020_12_24_131004_add_customer_id_column_in_subscribers_list_table.php @@ -0,0 +1,33 @@ +integer('customer_id')->unsigned()->nullable(); + $table->foreign('customer_id')->references('id')->on('customers')->onDelete('set null'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('subscribers_list', function (Blueprint $table) { + // + }); + } +} diff --git a/packages/Webkul/Core/src/Models/SubscribersList.php b/packages/Webkul/Core/src/Models/SubscribersList.php index d0145facd..1259e83a8 100755 --- a/packages/Webkul/Core/src/Models/SubscribersList.php +++ b/packages/Webkul/Core/src/Models/SubscribersList.php @@ -19,6 +19,7 @@ class SubscribersList extends Model implements SubscribersListContract 'email', 'is_subscribed', 'token', + 'customer_id', 'channel_id', ]; diff --git a/packages/Webkul/Customer/src/Http/Controllers/CustomerController.php b/packages/Webkul/Customer/src/Http/Controllers/CustomerController.php index b33721b83..26546378a 100755 --- a/packages/Webkul/Customer/src/Http/Controllers/CustomerController.php +++ b/packages/Webkul/Customer/src/Http/Controllers/CustomerController.php @@ -4,8 +4,11 @@ namespace Webkul\Customer\Http\Controllers; use Hash; use Illuminate\Support\Facades\Event; +use Illuminate\Support\Facades\Mail; +use Webkul\Shop\Mail\SubscriptionEmail; use Webkul\Customer\Repositories\CustomerRepository; use Webkul\Product\Repositories\ProductReviewRepository; +use Webkul\Core\Repositories\SubscribersListRepository; class CustomerController extends Controller { @@ -30,16 +33,25 @@ class CustomerController extends Controller */ protected $productReviewRepository; + /** + * SubscribersListRepository + * + * @var \Webkul\Core\Repositories\SubscribersListRepository + */ + protected $subscriptionRepository; + /** * Create a new controller instance. * - * @param \Webkul\Customer\Repositories\CustomerRepository $customer - * @param \Webkul\Product\Repositories\ProductReviewRepository $productReview + * @param \Webkul\Customer\Repositories\CustomerRepository $customerRepository + * @param \Webkul\Product\Repositories\ProductReviewRepository $productReviewRepository + * @param \Webkul\Core\Repositories\SubscribersListRepository $subscriptionRepository * @return void */ public function __construct( CustomerRepository $customerRepository, - ProductReviewRepository $productReviewRepository + ProductReviewRepository $productReviewRepository, + SubscribersListRepository $subscriptionRepository ) { $this->middleware('customer'); @@ -49,6 +61,8 @@ class CustomerController extends Controller $this->customerRepository = $customerRepository; $this->productReviewRepository = $productReviewRepository; + + $this->subscriptionRepository = $subscriptionRepository; } /** @@ -102,10 +116,13 @@ class CustomerController extends Controller unset($data['date_of_birth']); } + $data['subscribed_to_news_letter'] = isset($data['subscribed_to_news_letter']) ? 1 : 0; + if (isset ($data['oldpassword'])) { if ($data['oldpassword'] != "" || $data['oldpassword'] != null) { if (Hash::check($data['oldpassword'], auth()->guard('customer')->user()->password)) { $isPasswordChanged = true; + $data['password'] = bcrypt($data['password']); } else { session()->flash('warning', trans('shop::app.customer.account.profile.unmatch')); @@ -120,13 +137,47 @@ class CustomerController extends Controller Event::dispatch('customer.update.before'); if ($customer = $this->customerRepository->update($data, $id)) { - if ($isPasswordChanged) { Event::dispatch('user.admin.update-password', $customer); } Event::dispatch('customer.update.after', $customer); + if ($data['subscribed_to_news_letter']) { + $subscription = $this->subscriptionRepository->findOneWhere(['email' => $data['email']]); + + if ($subscription) { + $this->subscriptionRepository->update([ + 'customer_id' => $customer->id, + 'is_subscribed' => 1, + ], $subscription->id); + } else { + $this->subscriptionRepository->create([ + 'email' => $data['email'], + 'customer_id' => $customer->id, + 'channel_id' => core()->getCurrentChannel()->id, + 'is_subscribed' => 1, + 'token' => $token = uniqid(), + ]); + + try { + Mail::queue(new SubscriptionEmail([ + 'email' => $data['email'], + 'token' => $token, + ])); + } catch (\Exception $e) { } + } + } else { + $subscription = $this->subscriptionRepository->findOneWhere(['email' => $data['email']]); + + if ($subscription) { + $this->subscriptionRepository->update([ + 'customer_id' => $customer->id, + 'is_subscribed' => 0, + ], $subscription->id); + } + } + Session()->flash('success', trans('shop::app.customer.account.profile.edit-success')); return redirect()->route($this->_config['redirect']); diff --git a/packages/Webkul/Customer/src/Http/Controllers/RegistrationController.php b/packages/Webkul/Customer/src/Http/Controllers/RegistrationController.php index d9640e46f..f38e96513 100755 --- a/packages/Webkul/Customer/src/Http/Controllers/RegistrationController.php +++ b/packages/Webkul/Customer/src/Http/Controllers/RegistrationController.php @@ -3,13 +3,14 @@ namespace Webkul\Customer\Http\Controllers; use Illuminate\Support\Str; -use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Event; use Illuminate\Support\Facades\Mail; use Webkul\Customer\Mail\RegistrationEmail; use Webkul\Customer\Mail\VerificationEmail; +use Webkul\Shop\Mail\SubscriptionEmail; use Webkul\Customer\Repositories\CustomerRepository; use Webkul\Customer\Repositories\CustomerGroupRepository; +use Webkul\Core\Repositories\SubscribersListRepository; use Cookie; class RegistrationController extends Controller @@ -35,17 +36,26 @@ class RegistrationController extends Controller */ protected $customerGroupRepository; + /** + * SubscribersListRepository + * + * @var \Webkul\Core\Repositories\SubscribersListRepository + */ + protected $subscriptionRepository; + /** * Create a new Repository instance. * * @param \Webkul\Customer\Repositories\CustomerRepository $customer * @param \Webkul\Customer\Repositories\CustomerGroupRepository $customerGroupRepository - * + * @param \Webkul\Core\Repositories\SubscribersListRepository $subscriptionRepository + * * @return void */ public function __construct( CustomerRepository $customerRepository, - CustomerGroupRepository $customerGroupRepository + CustomerGroupRepository $customerGroupRepository, + SubscribersListRepository $subscriptionRepository ) { $this->_config = request('_config'); @@ -53,6 +63,8 @@ class RegistrationController extends Controller $this->customerRepository = $customerRepository; $this->customerGroupRepository = $customerGroupRepository; + + $this->subscriptionRepository = $subscriptionRepository; } /** @@ -79,22 +91,13 @@ class RegistrationController extends Controller 'password' => 'confirmed|min:6|required', ]); - $data = request()->input(); - - $data['password'] = bcrypt($data['password']); - $data['api_token'] = Str::random(80); - - if (core()->getConfigData('customer.settings.email.verification')) { - $data['is_verified'] = 0; - } else { - $data['is_verified'] = 1; - } - - $data['customer_group_id'] = $this->customerGroupRepository->findOneWhere(['code' => 'general'])->id; - - $verificationData['email'] = $data['email']; - $verificationData['token'] = md5(uniqid(rand(), true)); - $data['token'] = $verificationData['token']; + $data = array_merge(request()->input(), [ + 'password' => bcrypt(request()->input('password')), + 'api_token' => Str::random(80), + 'is_verified' => core()->getConfigData('customer.settings.email.verification') ? 0 : 1, + 'customer_group_id' => $this->customerGroupRepository->findOneWhere(['code' => 'general'])->id, + 'token' => md5(uniqid(rand(), true)), + ]); Event::dispatch('customer.registration.before'); @@ -102,41 +105,66 @@ class RegistrationController extends Controller Event::dispatch('customer.registration.after', $customer); - if ($customer) { - if (core()->getConfigData('customer.settings.email.verification')) { - try { - $configKey = 'emails.general.notifications.emails.general.notifications.verification'; - if (core()->getConfigData($configKey)) { - Mail::queue(new VerificationEmail($verificationData)); - } - - session()->flash('success', trans('shop::app.customer.signup-form.success-verify')); - } catch (\Exception $e) { - report($e); - session()->flash('info', trans('shop::app.customer.signup-form.success-verify-email-unsent')); - } - } else { - try { - $configKey = 'emails.general.notifications.emails.general.notifications.registration'; - if (core()->getConfigData($configKey)) { - Mail::queue(new RegistrationEmail(request()->all())); - } - - session()->flash('success', trans('shop::app.customer.signup-form.success-verify')); //customer registered successfully - } catch (\Exception $e) { - report($e); - session()->flash('info', trans('shop::app.customer.signup-form.success-verify-email-unsent')); - } - - session()->flash('success', trans('shop::app.customer.signup-form.success')); - } - - return redirect()->route($this->_config['redirect']); - } else { + if (! $customer) { session()->flash('error', trans('shop::app.customer.signup-form.failed')); return redirect()->back(); } + + if (isset($data['is_subscribed'])) { + $subscription = $this->subscriptionRepository->findOneWhere(['email' => $data['email']]); + + if ($subscription) { + $this->subscriptionRepository->update([ + 'customer_id' => $customer->id, + ], $subscription->id); + } else { + $this->subscriptionRepository->create([ + 'email' => $data['email'], + 'customer_id' => $customer->id, + 'channel_id' => core()->getCurrentChannel()->id, + 'is_subscribed' => 1, + 'token' => $token = uniqid(), + ]); + + try { + Mail::queue(new SubscriptionEmail([ + 'email' => $data['email'], + 'token' => $token, + ])); + } catch (\Exception $e) { } + } + } + + if (core()->getConfigData('customer.settings.email.verification')) { + try { + if (core()->getConfigData('emails.general.notifications.emails.general.notifications.verification')) { + Mail::queue(new VerificationEmail(['email' => $data['email'], 'token' => $data['token']])); + } + + session()->flash('success', trans('shop::app.customer.signup-form.success-verify')); + } catch (\Exception $e) { + report($e); + + session()->flash('info', trans('shop::app.customer.signup-form.success-verify-email-unsent')); + } + } else { + try { + if (core()->getConfigData('emails.general.notifications.emails.general.notifications.registration')) { + Mail::queue(new RegistrationEmail(request()->all())); + } + + session()->flash('success', trans('shop::app.customer.signup-form.success-verify')); + } catch (\Exception $e) { + report($e); + + session()->flash('info', trans('shop::app.customer.signup-form.success-verify-email-unsent')); + } + + session()->flash('success', trans('shop::app.customer.signup-form.success')); + } + + return redirect()->route($this->_config['redirect']); } /** @@ -166,8 +194,10 @@ class RegistrationController extends Controller */ public function resendVerificationEmail($email) { - $verificationData['email'] = $email; - $verificationData['token'] = md5(uniqid(rand(), true)); + $verificationData = [ + 'email' => $email, + 'token' => md5(uniqid(rand(), true)), + ]; $customer = $this->customerRepository->findOneByField('email', $email); @@ -185,6 +215,7 @@ class RegistrationController extends Controller } } catch (\Exception $e) { report($e); + session()->flash('error', trans('shop::app.customer.signup-form.verification-not-sent')); return redirect()->back(); diff --git a/packages/Webkul/Customer/src/Models/CustomerGroup.php b/packages/Webkul/Customer/src/Models/CustomerGroup.php index 5edb9ad8c..e8a546d53 100755 --- a/packages/Webkul/Customer/src/Models/CustomerGroup.php +++ b/packages/Webkul/Customer/src/Models/CustomerGroup.php @@ -11,9 +11,9 @@ class CustomerGroup extends Model implements CustomerGroupContract protected $fillable = ['name', 'code', 'is_user_defined']; /** - * Get the customer for this group. + * Get the customers for this group. */ - public function customer() + public function customers() { return $this->hasMany(CustomerProxy::modelClass()); } diff --git a/packages/Webkul/Marketing/src/Console/Commands/EmailsCommand.php b/packages/Webkul/Marketing/src/Console/Commands/EmailsCommand.php new file mode 100644 index 000000000..021280df6 --- /dev/null +++ b/packages/Webkul/Marketing/src/Console/Commands/EmailsCommand.php @@ -0,0 +1,53 @@ +campaignHelper = $campaignHelper; + + parent::__construct(); + } + + /** + * Execute the console command. + * + * @return mixed + */ + public function handle() + { + $this->campaignHelper->process(); + } +} \ No newline at end of file diff --git a/packages/Webkul/Marketing/src/Contracts/Campaign.php b/packages/Webkul/Marketing/src/Contracts/Campaign.php new file mode 100644 index 000000000..38e1eaaa6 --- /dev/null +++ b/packages/Webkul/Marketing/src/Contracts/Campaign.php @@ -0,0 +1,7 @@ +increments('id'); + $table->string('name'); + $table->string('status'); + $table->text('content'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('marketing_templates'); + } +} diff --git a/packages/Webkul/Marketing/src/Database/Migrations/2020_11_26_150534_create_marketing_events_table.php b/packages/Webkul/Marketing/src/Database/Migrations/2020_11_26_150534_create_marketing_events_table.php new file mode 100644 index 000000000..69fc56cd2 --- /dev/null +++ b/packages/Webkul/Marketing/src/Database/Migrations/2020_11_26_150534_create_marketing_events_table.php @@ -0,0 +1,39 @@ +increments('id'); + $table->string('name'); + $table->text('description')->nullable(); + $table->date('date')->nullable(); + $table->timestamps(); + }); + + DB::table('marketing_events')->insert([ + 'name' => 'Birthday', + 'description' => 'Birthday', + ]); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('marketing_events'); + } +} diff --git a/packages/Webkul/Marketing/src/Database/Migrations/2020_11_26_150644_create_marketing_campaigns_table.php b/packages/Webkul/Marketing/src/Database/Migrations/2020_11_26_150644_create_marketing_campaigns_table.php new file mode 100644 index 000000000..0b2b747eb --- /dev/null +++ b/packages/Webkul/Marketing/src/Database/Migrations/2020_11_26_150644_create_marketing_campaigns_table.php @@ -0,0 +1,50 @@ +increments('id'); + $table->string('name'); + $table->string('subject'); + $table->boolean('status')->default(0); + $table->string('type'); + $table->string('mail_to'); + $table->string('spooling')->nullable(); + + $table->integer('channel_id')->unsigned()->nullable(); + $table->foreign('channel_id')->references('id')->on('channels')->onDelete('set null'); + + $table->integer('customer_group_id')->unsigned()->nullable(); + $table->foreign('customer_group_id')->references('id')->on('customer_groups')->onDelete('set null'); + + $table->integer('marketing_template_id')->unsigned()->nullable(); + $table->foreign('marketing_template_id')->references('id')->on('marketing_templates')->onDelete('set null'); + + $table->integer('marketing_event_id')->unsigned()->nullable(); + $table->foreign('marketing_event_id')->references('id')->on('marketing_events')->onDelete('set null'); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('marketing_campaigns'); + } +} diff --git a/packages/Webkul/Marketing/src/Helpers/Campaign.php b/packages/Webkul/Marketing/src/Helpers/Campaign.php new file mode 100644 index 000000000..6c7ac246f --- /dev/null +++ b/packages/Webkul/Marketing/src/Helpers/Campaign.php @@ -0,0 +1,134 @@ +eventRepository = $eventRepository; + + $this->campaignRepository = $campaignRepository; + + $this->templateRepository = $templateRepository; + } + + /** + * @return void + */ + public function process(): void + { + $campaigns = $this->campaignRepository->getModel() + ->leftJoin('marketing_events', 'marketing_campaigns.marketing_event_id', 'marketing_events.id') + ->select('marketing_campaigns.*') + ->where('status', 1) + ->where(function ($query) { + $query->where('marketing_events.date', Carbon::now()->format('Y-m-d')) + ->orWhereNull('marketing_events.date'); + }) + ->get(); + + foreach ($campaigns as $campaign) { + if ($campaign->event->name == 'Birthday') { + $emails = $this->getBirthdayEmails($campaign); + } else { + $emails = $this->getEmailAddresses($campaign); + } + + foreach ($emails as $email) { + Mail::queue(new NewsletterMail($email, $campaign)); + } + } + } + + /** + * Build the message. + * + * @param \Webkul\Marketing\Contracts\Campaign $campaign + * @return array + */ + public function getEmailAddresses($campaign) + { + $newsletterEmails = app('\Webkul\Core\Repositories\SubscribersListRepository')->getModel() + ->where('is_subscribed', 1) + ->where('channel_id', $campaign->channel_id) + ->get('email'); + + $customerGroupEmails = $campaign->customer_group->customers()->where('subscribed_to_news_letter', 1)->get('email'); + + $emails = []; + + foreach ($newsletterEmails as $row) { + $emails[] = $row->email; + } + + foreach ($customerGroupEmails as $row) { + $emails[] = $row->email; + } + + return array_unique($emails); + } + + /** + * Return customer's emails who has a birthday today + * + * @param \Webkul\Marketing\Contracts\Campaign $campaign + * @return array + */ + public function getBirthdayEmails($campaign) + { + $customerGroupEmails = $campaign->customer_group->customers() + ->whereRaw('DATE_FORMAT(date_of_birth, "%m-%d") = ?', [Carbon::now()->format('m-d')]) + ->where('subscribed_to_news_letter', 1) + ->get('email'); + + $emails = []; + + foreach ($customerGroupEmails as $row) { + $emails[] = $row->email; + } + + return $emails; + } +} \ No newline at end of file diff --git a/packages/Webkul/Marketing/src/Http/Controllers/CampaignController.php b/packages/Webkul/Marketing/src/Http/Controllers/CampaignController.php new file mode 100644 index 000000000..166c81981 --- /dev/null +++ b/packages/Webkul/Marketing/src/Http/Controllers/CampaignController.php @@ -0,0 +1,149 @@ +campaignRepository = $campaignRepository; + + $this->_config = request('_config'); + } + + /** + * Display a listing of the resource. + * + * @return \Illuminate\View\View + */ + public function index() + { + return view($this->_config['view']); + } + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\View\View + */ + public function create() + { + return view($this->_config['view']); + } + + /** + * Store a newly created resource in storage. + * + * @return \Illuminate\Http\Response + */ + public function store() + { + $this->validate(request(), [ + 'name' => 'required', + 'subject' => 'required', + 'status' => 'required', + 'marketing_template_id' => 'required', + 'marketing_event_id' => 'required_if:schedule_type,event', + ]); + + Event::dispatch('marketing.campaigns.create.before'); + + $locale = $this->campaignRepository->create(request()->all()); + + Event::dispatch('marketing.campaigns.create.after', $locale); + + session()->flash('success', trans('admin::app.marketing.campaigns.create-success')); + + return redirect()->route($this->_config['redirect']); + } + + /** + * Show the form for editing the specified resource. + * + * @param int $id + * @return \Illuminate\View\View + */ + public function edit($id) + { + $campaign = $this->campaignRepository->findOrFail($id); + + return view($this->_config['view'], compact('campaign')); + } + + /** + * Update the specified resource in storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function update($id) + { + $this->validate(request(), [ + 'name' => 'required', + 'subject' => 'required', + 'status' => 'required', + 'marketing_template_id' => 'required', + 'marketing_event_id' => 'required_if:schedule_type,event', + ]); + + Event::dispatch('marketing.campaigns.update.before', $id); + + $locale = $this->campaignRepository->update(request()->all(), $id); + + Event::dispatch('marketing.campaigns.update.after', $locale); + + session()->flash('success', trans('admin::app.marketing.campaigns.update-success')); + + return redirect()->route($this->_config['redirect']); + } + + /** + * Remove the specified resource from storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + $locale = $this->campaignRepository->findOrFail($id); + + try { + Event::dispatch('marketing.campaigns.delete.before', $id); + + $this->campaignRepository->delete($id); + + Event::dispatch('marketing.campaigns.delete.after', $id); + + session()->flash('success', trans('admin::app.marketing.campaigns.delete-success')); + + return response()->json(['message' => true], 200); + } catch(\Exception $e) { + session()->flash('error', trans('admin::app.response.delete-failed', ['name' => 'Email Campaign'])); + } + + return response()->json(['message' => false], 400); + } +} \ No newline at end of file diff --git a/packages/Webkul/Marketing/src/Http/Controllers/Controller.php b/packages/Webkul/Marketing/src/Http/Controllers/Controller.php new file mode 100755 index 000000000..ef3e76fb1 --- /dev/null +++ b/packages/Webkul/Marketing/src/Http/Controllers/Controller.php @@ -0,0 +1,13 @@ +eventRepository = $eventRepository; + + $this->_config = request('_config'); + } + + /** + * Display a listing of the resource. + * + * @return \Illuminate\View\View + */ + public function index() + { + return view($this->_config['view']); + } + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\View\View + */ + public function create() + { + return view($this->_config['view']); + } + + /** + * Store a newly created resource in storage. + * + * @return \Illuminate\Http\Response + */ + public function store() + { + $this->validate(request(), [ + 'name' => 'required', + 'description' => 'required', + 'date' => 'date|required', + ]); + + Event::dispatch('marketing.events.create.before'); + + $locale = $this->eventRepository->create(request()->all()); + + Event::dispatch('marketing.events.create.after', $locale); + + session()->flash('success', trans('admin::app.marketing.events.create-success')); + + return redirect()->route($this->_config['redirect']); + } + + /** + * Show the form for editing the specified resource. + * + * @param int $id + * @return \Illuminate\View\View + */ + public function edit($id) + { + if ($id == 1) { + session()->flash('error', trans('admin::app.marketing.events.edit-error')); + + return redirect()->back(); + } else { + $event = $this->eventRepository->findOrFail($id); + + return view($this->_config['view'], compact('event')); + } + } + + /** + * Update the specified resource in storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function update($id) + { + $this->validate(request(), [ + 'name' => 'required', + 'description' => 'required', + 'date' => 'date|required', + ]); + + Event::dispatch('marketing.events.update.before', $id); + + $locale = $this->eventRepository->update(request()->all(), $id); + + Event::dispatch('marketing.events.update.after', $locale); + + session()->flash('success', trans('admin::app.marketing.events.update-success')); + + return redirect()->route($this->_config['redirect']); + } + + /** + * Remove the specified resource from storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + $locale = $this->eventRepository->findOrFail($id); + + try { + Event::dispatch('marketing.events.delete.before', $id); + + $this->eventRepository->delete($id); + + Event::dispatch('marketing.events.delete.after', $id); + + session()->flash('success', trans('admin::app.marketing.events.delete-success')); + + return response()->json(['message' => true], 200); + } catch(\Exception $e) { + session()->flash('error', trans('admin::app.response.delete-failed', ['name' => 'Event'])); + } + + return response()->json(['message' => false], 400); + } +} diff --git a/packages/Webkul/Marketing/src/Http/Controllers/TemplateController.php b/packages/Webkul/Marketing/src/Http/Controllers/TemplateController.php new file mode 100644 index 000000000..f56768428 --- /dev/null +++ b/packages/Webkul/Marketing/src/Http/Controllers/TemplateController.php @@ -0,0 +1,145 @@ +templateRepository = $templateRepository; + + $this->_config = request('_config'); + } + + /** + * Display a listing of the resource. + * + * @return \Illuminate\View\View + */ + public function index() + { + return view($this->_config['view']); + } + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\View\View + */ + public function create() + { + return view($this->_config['view']); + } + + /** + * Store a newly created resource in storage. + * + * @return \Illuminate\Http\Response + */ + public function store() + { + $this->validate(request(), [ + 'name' => 'required', + 'status' => 'required|in:active,inactive,draft', + 'content' => 'required', + ]); + + Event::dispatch('marketing.templates.create.before'); + + $locale = $this->templateRepository->create(request()->all()); + + Event::dispatch('marketing.templates.create.after', $locale); + + session()->flash('success', trans('admin::app.marketing.templates.create-success')); + + return redirect()->route($this->_config['redirect']); + } + + /** + * Show the form for editing the specified resource. + * + * @param int $id + * @return \Illuminate\View\View + */ + public function edit($id) + { + $template = $this->templateRepository->findOrFail($id); + + return view($this->_config['view'], compact('template')); + } + + /** + * Update the specified resource in storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function update($id) + { + $this->validate(request(), [ + 'name' => 'required', + 'status' => 'required|in:active,inactive,draft', + 'content' => 'required', + ]); + + Event::dispatch('marketing.templates.update.before', $id); + + $locale = $this->templateRepository->update(request()->all(), $id); + + Event::dispatch('marketing.templates.update.after', $locale); + + session()->flash('success', trans('admin::app.marketing.templates.update-success')); + + return redirect()->route($this->_config['redirect']); + } + + /** + * Remove the specified resource from storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + $locale = $this->templateRepository->findOrFail($id); + + try { + Event::dispatch('marketing.templates.delete.before', $id); + + $this->templateRepository->delete($id); + + Event::dispatch('marketing.templates.delete.after', $id); + + session()->flash('success', trans('admin::app.marketing.templates.delete-success')); + + return response()->json(['message' => true], 200); + } catch(\Exception $e) { + session()->flash('error', trans('admin::app.response.delete-failed', ['name' => 'Email Template'])); + } + + return response()->json(['message' => false], 400); + } +} \ No newline at end of file diff --git a/packages/Webkul/Marketing/src/Http/routes.php b/packages/Webkul/Marketing/src/Http/routes.php new file mode 100644 index 000000000..15c5adc7f --- /dev/null +++ b/packages/Webkul/Marketing/src/Http/routes.php @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/packages/Webkul/Marketing/src/Mail/NewsletterMail.php b/packages/Webkul/Marketing/src/Mail/NewsletterMail.php new file mode 100644 index 000000000..991c32ab7 --- /dev/null +++ b/packages/Webkul/Marketing/src/Mail/NewsletterMail.php @@ -0,0 +1,52 @@ +email = $email; + + $this->campaign = $campaign; + } + + /** + * Build the message. + * + * @return $this + */ + public function build() + { + return $this->from(core()->getSenderEmailDetails()['email'], core()->getSenderEmailDetails()['name']) + ->to([$this->email]) + ->subject($this->campaign->subject) + ->html($this->campaign->email_template->content); + } +} \ No newline at end of file diff --git a/packages/Webkul/Marketing/src/Models/Campaign.php b/packages/Webkul/Marketing/src/Models/Campaign.php new file mode 100644 index 000000000..ae33d0759 --- /dev/null +++ b/packages/Webkul/Marketing/src/Models/Campaign.php @@ -0,0 +1,61 @@ +belongsTo(EventProxy::modelClass(), 'marketing_event_id'); + } + + /** + * Get the channel + */ + public function channel() + { + return $this->belongsTo(ChannelProxy::modelClass(), 'channel_id'); + } + + /** + * Get the customer group + */ + public function customer_group() + { + return $this->belongsTo(CustomerGroupProxy::modelClass(), 'customer_group_id'); + } + + /** + * Get the email template + */ + public function email_template() + { + return $this->belongsTo(TemplateProxy::modelClass(), 'marketing_template_id'); + } +} \ No newline at end of file diff --git a/packages/Webkul/Marketing/src/Models/CampaignProxy.php b/packages/Webkul/Marketing/src/Models/CampaignProxy.php new file mode 100644 index 000000000..c6144b5e1 --- /dev/null +++ b/packages/Webkul/Marketing/src/Models/CampaignProxy.php @@ -0,0 +1,10 @@ +loadMigrationsFrom(__DIR__ . '/../Database/Migrations'); + + $this->loadRoutesFrom(__DIR__ . '/../Http/routes.php'); + + $this->loadTranslationsFrom(__DIR__ . '/../Resources/lang', 'marketing'); + + $this->loadViewsFrom(__DIR__ . '/../Resources/views', 'marketing'); + } + + /** + * Register services. + * + * @return void + */ + public function register() + { + + if ($this->app->runningInConsole()) { + $this->commands([EmailsCommand::class]); + } + } +} \ No newline at end of file diff --git a/packages/Webkul/Marketing/src/Providers/ModuleServiceProvider.php b/packages/Webkul/Marketing/src/Providers/ModuleServiceProvider.php new file mode 100644 index 000000000..9f33bac8f --- /dev/null +++ b/packages/Webkul/Marketing/src/Providers/ModuleServiceProvider.php @@ -0,0 +1,14 @@ + 'Conditions', 'using' => 'by using this website', 'agreement' => 'Agreement', + 'subscribe-to-newsletter' => 'Subscribe to newsletter', 'success' => 'Account created successfully.', 'success-verify' => 'Account created successfully, an e-mail has been sent for verification.', 'success-verify-email-unsent' => 'Account created successfully, but verification e-mail unsent.', diff --git a/packages/Webkul/Shop/src/Resources/views/customers/account/profile/edit.blade.php b/packages/Webkul/Shop/src/Resources/views/customers/account/profile/edit.blade.php index b6cd773a2..db57418cf 100755 --- a/packages/Webkul/Shop/src/Resources/views/customers/account/profile/edit.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/customers/account/profile/edit.blade.php @@ -100,6 +100,11 @@ @{{ errors.first('password_confirmation') }} +
+ subscribed_to_news_letter ? 'checked' : ''}}> + {{ __('shop::app.customer.signup-form.subscribe-to-newsletter') }} +
+ {!! view_render_event('bagisto.shop.customers.account.profile.edit_form_controls.after', ['customer' => $customer]) !!}
diff --git a/packages/Webkul/Shop/src/Resources/views/customers/signup/index.blade.php b/packages/Webkul/Shop/src/Resources/views/customers/signup/index.blade.php index 9f4fc1b53..9f1598a08 100755 --- a/packages/Webkul/Shop/src/Resources/views/customers/signup/index.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/customers/signup/index.blade.php @@ -70,17 +70,19 @@ @{{ errors.first('agreement') }}
--}} + {{-- + + + Checkbox Value 1 + --}} + +
+ + {{ __('shop::app.customer.signup-form.subscribe-to-newsletter') }} +
+ {!! view_render_event('bagisto.shop.customers.signup_form_controls.after') !!} - {{--
- - - {{ __('shop::app.customer.signup-form.agree') }} - {{ __('shop::app.customer.signup-form.terms') }} & {{ __('shop::app.customer.signup-form.conditions') }} {{ __('shop::app.customer.signup-form.using') }}. - - @{{ errors.first('agreement') }} -
--}} - diff --git a/packages/Webkul/Velocity/src/Resources/views/shop/customers/account/profile/edit.blade.php b/packages/Webkul/Velocity/src/Resources/views/shop/customers/account/profile/edit.blade.php index f76c300e0..94d22a384 100644 --- a/packages/Webkul/Velocity/src/Resources/views/shop/customers/account/profile/edit.blade.php +++ b/packages/Webkul/Velocity/src/Resources/views/shop/customers/account/profile/edit.blade.php @@ -178,6 +178,11 @@ +
+ subscribed_to_news_letter ? 'checked' : ''}} style="width: auto;"> + {{ __('shop::app.customer.signup-form.subscribe-to-newsletter') }} +
+ {!! view_render_event('bagisto.shop.customers.account.profile.edit_form_controls.after', ['customer' => $customer]) !!}