diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..cd8eb86 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,15 @@ +; This file is for unifying the coding style for different editors and IDEs. +; More information at http://editorconfig.org + +root = true + +[*] +charset = utf-8 +indent_size = 4 +indent_style = space +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +trim_trailing_whitespace = false diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..b263871 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,10 @@ +# Path-based git attributes +# https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html + +# Ignore all test and documentation with "export-ignore". +/.gitattributes export-ignore +/.gitignore export-ignore +/.travis.yml export-ignore +/phpunit.xml.dist export-ignore +/.scrutinizer.yml export-ignore +/tests export-ignore diff --git a/.gitignore b/.gitignore index 2f87cd7..3f0a634 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ /vendor +build composer.phar composer.lock diff --git a/.scrutinizer.yml b/.scrutinizer.yml new file mode 100644 index 0000000..df16b68 --- /dev/null +++ b/.scrutinizer.yml @@ -0,0 +1,19 @@ +filter: + excluded_paths: [tests/*] + +checks: + php: + remove_extra_empty_lines: true + remove_php_closing_tag: true + remove_trailing_whitespace: true + fix_use_statements: + remove_unused: true + preserve_multiple: false + preserve_blanklines: true + order_alphabetically: true + fix_php_opening_tag: true + fix_linefeed: true + fix_line_ending: true + fix_identation_4spaces: true + fix_doc_comments: true + diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..62dad73 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,20 @@ +language: php + +php: + - 5.6 + - 7.0 + +env: + matrix: + - COMPOSER_FLAGS="--prefer-lowest" + - COMPOSER_FLAGS="" + +before_script: + - travis_retry composer self-update + - travis_retry composer update ${COMPOSER_FLAGS} --no-interaction --prefer-source + +script: + - phpunit --coverage-text --coverage-clover=coverage.clover + +after_script: + - php vendor/bin/ocular code-coverage:upload --format=php-clover coverage.clover diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100755 index 0000000..d7188c5 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,7 @@ +# Changelog + +All Notable changes to `pusher-push-notifications` will be documented in this file + +## 1.0.0 - 2016-XX-XX + +- initial release diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100755 index 0000000..4da74e3 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,55 @@ +# Contributing + +Contributions are **welcome** and will be fully **credited**. + +Please read and understand the contribution guide before creating an issue or pull request. + +## Etiquette + +This project is open source, and as such, the maintainers give their free time to build and maintain the source code +held within. They make the code freely available in the hope that it will be of use to other developers. It would be +extremely unfair for them to suffer abuse or anger for their hard work. + +Please be considerate towards maintainers when raising issues or presenting pull requests. Let's show the +world that developers are civilized and selfless people. + +It's the duty of the maintainer to ensure that all submissions to the project are of sufficient +quality to benefit the project. Many developers have different skillsets, strengths, and weaknesses. Respect the maintainer's decision, and do not be upset or abusive if your submission is not used. + +## Viability + +When requesting or submitting new features, first consider whether it might be useful to others. Open +source projects are used by many developers, who may have entirely different needs to your own. Think about +whether or not your feature is likely to be used by other users of the project. + +## Procedure + +Before filing an issue: + +- Attempt to replicate the problem, to ensure that it wasn't a coincidental incident. +- Check to make sure your feature suggestion isn't already present within the project. +- Check the pull requests tab to ensure that the bug doesn't have a fix in progress. +- Check the pull requests tab to ensure that the feature isn't already in progress. + +Before submitting a pull request: + +- Check the codebase to ensure that your feature doesn't already exist. +- Check the pull requests to ensure that another person hasn't already submitted the feature or fix. + +## Requirements + +If the project maintainer has any additional requirements, you will find them listed here. + +- **[PSR-2 Coding Standard](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md)** - The easiest way to apply the conventions is to install [PHP Code Sniffer](http://pear.php.net/package/PHP_CodeSniffer). + +- **Add tests!** - Your patch won't be accepted if it doesn't have tests. + +- **Document any change in behaviour** - Make sure the `README.md` and any other relevant documentation are kept up-to-date. + +- **Consider our release cycle** - We try to follow [SemVer v2.0.0](http://semver.org/). Randomly breaking public APIs is not an option. + +- **One pull request per feature** - If you want to do more than one thing, send multiple pull requests. + +- **Send coherent history** - Make sure each individual commit in your pull request is meaningful. If you had to make multiple intermediate commits while developing, please [squash them](http://www.git-scm.com/book/en/v2/Git-Tools-Rewriting-History#Changing-Multiple-Commit-Messages) before submitting. + +**Happy coding**! diff --git a/README.md b/README.md index d3baf4c..edc5236 100644 --- a/README.md +++ b/README.md @@ -1 +1,52 @@ -## Pusher Push Notifications [WIP] \ No newline at end of file +# Pusher push notifications channel for Laravel 5.3 + +[![Latest Version on Packagist](https://img.shields.io/packagist/v/LaravelNotificationChannels/pusher-push-notifications.svg?style=flat-square)](https://packagist.org/packages/LaravelNotificationChannels/pusher-push-notifications) +[![Software License](https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square)](LICENSE.md) +[![Build Status](https://img.shields.io/travis/LaravelNotificationChannels/pusher-push-notifications/master.svg?style=flat-square)](https://travis-ci.org/LaravelNotificationChannels/pusher-push-notifications) +[![SensioLabsInsight](https://img.shields.io/sensiolabs/i/xxxxxxxxx.svg?style=flat-square)](https://insight.sensiolabs.com/projects/xxxxxxxxx) +[![Quality Score](https://img.shields.io/scrutinizer/g/LaravelNotificationChannels/pusher-push-notifications.svg?style=flat-square)](https://scrutinizer-ci.com/g/LaravelNotificationChannels/pusher-push-notifications) +[![Total Downloads](https://img.shields.io/packagist/dt/LaravelNotificationChannels/pusher-push-notifications.svg?style=flat-square)](https://packagist.org/packages/LaravelNotificationChannels/pusher-push-notifications) + +This is where your description should go. Try and limit it to a paragraph or two, and maybe throw in a mention of what PSRs you support to avoid any confusion with users and contributors. + +## Installation + +You can install the package via composer: + +``` bash +composer require LaravelNotificationChannels/pusher-push-notifications +``` + +## Usage + +``` php +$skeleton = new Skeleton(); +echo $skeleton->echoPhrase('Hello, Spatie!'); +``` + +## Changelog + +Please see [CHANGELOG](CHANGELOG.md) for more information what has changed recently. + +## Testing + +``` bash +$ composer test +``` + +## Contributing + +Please see [CONTRIBUTING](CONTRIBUTING.md) for details. + +## Security + +If you discover any security related issues, please email theMohamedSaid@gmail.com instead of using the issue tracker. + +## Credits + +- [Mohamed Said](https://github.com/themsaid) +- [All Contributors](../../contributors) + +## License + +The MIT License (MIT). Please see [License File](LICENSE.md) for more information. diff --git a/composer.json b/composer.json index 7c5fc35..98db3a6 100644 --- a/composer.json +++ b/composer.json @@ -1,6 +1,13 @@ { "name": "notificationchannels/pusher-push-notifications", "description": "Pusher native Push Notifications driver.", + "keywords": [ + "pusher-push-notifications", + "laravel", + "pusher", + "notifications" + ], + "homepage": "https://github.com/LaravelNotificationChannels/pusher-push-notifications", "license": "MIT", "authors": [ { @@ -12,12 +19,28 @@ "require": { "php": ">=5.6.4", "illuminate/notifications": "^5.3@dev", + "illuminate/support": "^5.3@dev", + "illuminate/events": "^5.3@dev", "pusher/pusher-php-server": "2.5.0-rc4" }, + "require-dev": { + "phpunit/phpunit": "5.*" + }, "autoload": { "psr-4": { - "NotificationChannels\\PusherPushNotifications": "src" + "NotificationChannels\\PusherPushNotifications\\": "src" } }, + "autoload-dev": { + "psr-4": { + "NotificationChannels\\PusherPushNotifications\\Test\\": "tests" + } + }, + "scripts": { + "test": "vendor/bin/phpunit" + }, + "config": { + "sort-packages": true + }, "minimum-stability": "dev" } \ No newline at end of file diff --git a/phpunit.xml.dist b/phpunit.xml.dist new file mode 100644 index 0000000..563fc80 --- /dev/null +++ b/phpunit.xml.dist @@ -0,0 +1,29 @@ + + + + + tests + + + + + src/ + + + + + + + + + + diff --git a/src/Channel.php b/src/Channel.php new file mode 100644 index 0000000..51f24c6 --- /dev/null +++ b/src/Channel.php @@ -0,0 +1,71 @@ +pusher = new Pusher( + $pusherConfig['key'], + $pusherConfig['secret'], + $pusherConfig['app_id'] + ); + } + + /** + * Send the given notification. + * + * @param mixed $notifiable + * @param \Illuminate\Notifications\Notification $notification + */ + public function send($notifiable, Notification $notification) + { + $interest = $notifiable->routeNotificationFor('PusherPushNotifications') ?: $this->interestName($notifiable); + + $shouldSendMessage = event(new SendingMessage($notifiable, $notification), [], true); + + if (!$shouldSendMessage) { + return; + } + + $response = $this->pusher->notify( + $interest, + $notification->toPushNotification($notifiable)->toArray(), + true + ); + + if ($response['status'] != 200) { + throw CouldNotSendNotification::pusherRespondedWithAnError($response); + } + + event(new MessageWasSent($notifiable, $notification)); + } + + /** + * Get the interest name for the notifiable. + * + * @param $notifiable + * + * @return string + */ + protected function interestName($notifiable) + { + $class = str_replace('\\', '.', get_class($notifiable)); + + return $class.'.'.$notifiable->getKey(); + } +} diff --git a/src/Events/MessageSending.php b/src/Events/MessageWasSent.php similarity index 87% rename from src/Events/MessageSending.php rename to src/Events/MessageWasSent.php index c080c82..0ac30e1 100644 --- a/src/Events/MessageSending.php +++ b/src/Events/MessageWasSent.php @@ -4,17 +4,17 @@ use Illuminate\Notifications\Notification; -class MessageSending +class MessageWasSent { /** * @var */ - private $notifiable; + protected $notifiable; /** * @var \Illuminate\Notifications\Notification */ - private $notification; + protected $notification; /** * MessageSending constructor. @@ -25,6 +25,7 @@ class MessageSending public function __construct($notifiable, Notification $notification) { $this->notifiable = $notifiable; + $this->notification = $notification; } } diff --git a/src/Events/MessageSent.php b/src/Events/SendingMessage.php similarity index 81% rename from src/Events/MessageSent.php rename to src/Events/SendingMessage.php index d5a245a..cc8ccd7 100644 --- a/src/Events/MessageSent.php +++ b/src/Events/SendingMessage.php @@ -4,27 +4,26 @@ use Illuminate\Notifications\Notification; -class MessageSent +class SendingMessage { /** * @var */ - private $notifiable; + protected $notifiable; /** * @var \Illuminate\Notifications\Notification */ - private $notification; + protected $notification; /** - * MessageSending constructor. - * * @param $notifiable * @param \Illuminate\Notifications\Notification $notification */ public function __construct($notifiable, Notification $notification) { $this->notifiable = $notifiable; + $this->notification = $notification; } } diff --git a/src/Exceptions/CouldNotSendNofication.php b/src/Exceptions/CouldNotSendNofication.php new file mode 100644 index 0000000..4de7e25 --- /dev/null +++ b/src/Exceptions/CouldNotSendNofication.php @@ -0,0 +1,13 @@ +platform = 'iOS'; @@ -109,7 +108,8 @@ public function android() /** * Set the message title. * - * @param string $value + * @param string $value + * * @return $this */ public function title($value) @@ -122,7 +122,8 @@ public function title($value) /** * Set the message body. * - * @param string $value + * @param string $value + * * @return $this */ public function body($value) @@ -135,7 +136,8 @@ public function body($value) /** * Set the message sound (Android). * - * @param string $value + * @param string $value + * * @return $this */ public function sound($value) @@ -148,7 +150,8 @@ public function sound($value) /** * Set the message icon (Android). * - * @param string $value + * @param string $value + * * @return $this */ public function icon($value) @@ -161,7 +164,8 @@ public function icon($value) /** * Set the message badge (iOS). * - * @param int $value + * @param int $value + * * @return $this */ public function badge($value) @@ -174,6 +178,7 @@ public function badge($value) /** * @param string $key * @param string $value + * * @return $this */ public function setOption($key, $value) @@ -190,8 +195,9 @@ public function setOption($key, $value) */ public function toArray() { - return $this->platform == 'iOS' ? - $this->toiOS() : $this->toAndroid(); + return $this->platform === 'iOS' + ? $this->toiOS() + : $this->toAndroid(); } /** @@ -209,9 +215,9 @@ public function toiOS() 'body' => $this->body, ], 'sound' => $this->sound, - 'badge' => $this->badge + 'badge' => $this->badge, ], - ] + ], ]; foreach ($this->options as $option => $value) { @@ -234,9 +240,9 @@ public function toAndroid() 'title' => $this->title, 'body' => $this->body, 'sound' => $this->sound, - 'icon' => $this->icon + 'icon' => $this->icon, ], - ] + ], ]; foreach ($this->options as $option => $value) { diff --git a/src/PushNotificationsChannel.php b/src/PushNotificationsChannel.php deleted file mode 100644 index 8796a6c..0000000 --- a/src/PushNotificationsChannel.php +++ /dev/null @@ -1,70 +0,0 @@ -pusher = new Pusher( - config('broadcasting.connections.pusher.key'), - config('broadcasting.connections.pusher.secret'), - config('broadcasting.connections.pusher.app_id') - ); - } - - /** - * Send the given notification. - * - * @param mixed $notifiable - * @param \Illuminate\Notifications\Notification $notification - * @return void - */ - public function send($notifiable, Notification $notification) - { - $interest = $notifiable->routeNotificationFor('PusherPushNotifications') - ?: $this->interestName($notifiable); - - if (event(new MessageSending($notifiable, $notification), [], true) === false) { - return; - } - - $this->pusher->notify( - $interest, - $notification->toPushNotification($notifiable)->toArray() - ); - - event( - new MessageSent($notifiable, $notification) - ); - } - - /** - * Get the interest name for the notifiable. - * - * @return string - */ - protected function interestName($notifiable) - { - $class = str_replace('\\', '.', get_class($notifiable)); - - return $class.'.'.$notifiable->getKey(); - } -} diff --git a/tests/ExampleTest.php b/tests/ExampleTest.php new file mode 100644 index 0000000..31bc4a9 --- /dev/null +++ b/tests/ExampleTest.php @@ -0,0 +1,12 @@ +assertTrue(true); + } +}