diff --git a/.editorconfig b/.editorconfig new file mode 100755 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 100755 index 0000000..bb6265e --- /dev/null +++ b/.gitattributes @@ -0,0 +1,11 @@ +# 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 +/.editorconfig export-ignore diff --git a/.gitignore b/.gitignore new file mode 100755 index 0000000..808f8c5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +build +composer.lock +docs +vendor +coverage \ No newline at end of file diff --git a/.scrutinizer.yml b/.scrutinizer.yml new file mode 100755 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/.styleci.yml b/.styleci.yml new file mode 100755 index 0000000..f4d3cbc --- /dev/null +++ b/.styleci.yml @@ -0,0 +1,4 @@ +preset: laravel + +disabled: + - single_class_element_per_statement diff --git a/.travis.yml b/.travis.yml new file mode 100755 index 0000000..24c2d6c --- /dev/null +++ b/.travis.yml @@ -0,0 +1,21 @@ +language: php + +php: + - 7.1 + - 7.2 + - 7.3 + +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: + - vendor/bin/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..b6bd7f0 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,7 @@ +# Changelog + +All notable changes to `muthofun` will be documented in this file + +## 1.0.0 - 201X-XX-XX + +- initial release diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100755 index 0000000..b4ae1c4 --- /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](https://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](https://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](https://www.git-scm.com/book/en/v2/Git-Tools-Rewriting-History#Changing-Multiple-Commit-Messages) before submitting. + +**Happy coding**! diff --git a/LICENSE.md b/LICENSE.md new file mode 100755 index 0000000..4fcf8d6 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Md Rostom Ali + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md old mode 100644 new mode 100755 index 4ff7646..6c8627b --- a/README.md +++ b/README.md @@ -1,2 +1,56 @@ +# Very short description of the package + +[![Latest Version on Packagist](https://img.shields.io/packagist/v/imrostom/muthofun.svg?style=flat-square)](https://packagist.org/packages/imrostom/muthofun) +[![Build Status](https://img.shields.io/travis/imrostom/muthofun/master.svg?style=flat-square)](https://travis-ci.org/imrostom/muthofun) +[![Quality Score](https://img.shields.io/scrutinizer/g/imrostom/muthofun.svg?style=flat-square)](https://scrutinizer-ci.com/g/imrostom/muthofun) +[![Total Downloads](https://img.shields.io/packagist/dt/imrostom/muthofun.svg?style=flat-square)](https://packagist.org/packages/imrostom/muthofun) + +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 imrostom/muthofun +``` + +## Usage + +``` php +// Usage description here +``` + +### Testing + +``` bash +composer test +``` + +### Changelog + +Please see [CHANGELOG](CHANGELOG.md) for more information what has changed recently. + +## Contributing + +Please see [CONTRIBUTING](CONTRIBUTING.md) for details. + +### Security + +If you discover any security related issues, please email rostomali4444@gmail.com instead of using the issue tracker. + +## Credits + +- [Md Rostom Ali](https://github.com/imrostom) +- [All Contributors](../../contributors) + +## License + +The MIT License (MIT). Please see [License File](LICENSE.md) for more information. + +## Laravel Package Boilerplate + +This package was generated using the [Laravel Package Boilerplate](https://laravelpackageboilerplate.com). +======= # muthofun -A muthofun package +A muthofun package \ No newline at end of file diff --git a/composer.json b/composer.json new file mode 100755 index 0000000..df24290 --- /dev/null +++ b/composer.json @@ -0,0 +1,54 @@ +{ + "name": "imrostom/muthofun", + "description": "Laravel MuthoFun SMS Payment Gateway API", + "keywords": [ + "imrostom", + "muthofun" + ], + "homepage": "https://github.com/imrostom/muthofun", + "license": "MIT", + "type": "library", + "authors": [ + { + "name": "Md Rostom Ali", + "email": "rostomali4444@gmail.com", + "role": "Developer" + } + ], + "require": { + "php": "^7.1", + "illuminate/support": "^6.0" + }, + "require-dev": { + "orchestra/testbench": "^4.0", + "phpunit/phpunit": "^8.0" + }, + "autoload": { + "psr-4": { + "Imrostom\\Muthofun\\": "src" + } + }, + "autoload-dev": { + "psr-4": { + "Imrostom\\Muthofun\\Tests\\": "tests" + } + }, + "scripts": { + "test": "vendor/bin/phpunit", + "test-coverage": "vendor/bin/phpunit --coverage-html coverage" + + }, + "config": { + "sort-packages": true + }, + "extra": { + "laravel": { + "providers": [ + "Imrostom\\Muthofun\\MuthofunServiceProvider" + ], + "aliases": { + "Muthofun": "Imrostom\\Muthofun\\Facade\\Muthofun" + } + } + } +} diff --git a/config/config.php b/config/config.php new file mode 100755 index 0000000..dc0cdca --- /dev/null +++ b/config/config.php @@ -0,0 +1,9 @@ + 'imrostom', + 'password' => '123456', + 'unicode' => 1, // 1 or 0 + 'database' => true, + 'demo' => true, + 'version' => '1.0', +]; diff --git a/database/migrations/2021_02_27_022849_create_muthofuns_table.php b/database/migrations/2021_02_27_022849_create_muthofuns_table.php new file mode 100644 index 0000000..97a5bce --- /dev/null +++ b/database/migrations/2021_02_27_022849_create_muthofuns_table.php @@ -0,0 +1,35 @@ +id(); + $table->string('phone'); + $table->string('message'); + $table->text('misc')->nullable(); + $table->integer('create_user_id'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('muthofuns'); + } +} diff --git a/phpunit.xml.dist b/phpunit.xml.dist new file mode 100755 index 0000000..22fe879 --- /dev/null +++ b/phpunit.xml.dist @@ -0,0 +1,29 @@ + + + + + tests + + + + + src/ + + + + + + + + + + diff --git a/resources/assets/css/style.css b/resources/assets/css/style.css new file mode 100644 index 0000000..0173f93 --- /dev/null +++ b/resources/assets/css/style.css @@ -0,0 +1,55 @@ +body{ + background: -webkit-linear-gradient(left, #0072ff, #00c6ff); +} +.contact-form{ + background: #fff; + margin-top: 5%; + margin-bottom: 2%; + width: 70%; +} +.contact-form .form-control{ + border-radius:1rem; +} +.contact-image{ + text-align: center; +} + +.contact-image img{ + border-radius: 6rem; + width: 11%; + margin-top: -3%; + transform: rotate(29deg); +} + +.contact-form form{ + padding: 10%; +} +.contact-form form .row{ + margin-bottom: -7%; +} +.contact-form h3{ + margin-bottom: 5%; + margin-top: -8%; + text-align: center; + color: #0062cc; +} +.contact-form .btnContact { + width: 50%; + border: none; + border-radius: 1rem; + padding: 1.5%; + background: #dc3545; + font-weight: 600; + color: #fff; + cursor: pointer; +} +.btnMessageSubmit +{ + width: 50%; + border-radius: 1rem; + padding: 1.5%; + color: #fff; + background-color: #0062cc; + border: none; + cursor: pointer; +} \ No newline at end of file diff --git a/resources/assets/images/rocket.png b/resources/assets/images/rocket.png new file mode 100644 index 0000000..8f6e418 Binary files /dev/null and b/resources/assets/images/rocket.png differ diff --git a/resources/lang/en/muthofun.php b/resources/lang/en/muthofun.php new file mode 100644 index 0000000..83c41d5 --- /dev/null +++ b/resources/lang/en/muthofun.php @@ -0,0 +1,5 @@ + 'Drop a Message', + 'send_message' => 'Send Message', +]; diff --git a/resources/views/index.blade.php b/resources/views/index.blade.php new file mode 100644 index 0000000..d46affc --- /dev/null +++ b/resources/views/index.blade.php @@ -0,0 +1,61 @@ + + + + + + + + + {{ __('Muthofun - ') . config('app.name') }} + + + +
+
+ rocket_contact +
+
+ @csrf +

{{ __('muthofun::muthofun.drop_message') }}

+ @isset($msg) + + @endisset +
+
+
+ + @error('name') +
{{ $message }}
+ @enderror +
+
+ + @error('subject') +
{{ $message }}
+ @enderror +
+
+ + @error('mobile') +
{{ $message }}
+ @enderror +
+
+ +
+
+
+
+ + @error('message') +
{{ $message }}
+ @enderror +
+
+
+
+
+ + \ No newline at end of file diff --git a/routes/web.php b/routes/web.php new file mode 100644 index 0000000..d0d8182 --- /dev/null +++ b/routes/web.php @@ -0,0 +1,8 @@ + ['web', 'auth']], function () { + Route::get('muthofun', [MuthofunController::class, 'index']); + Route::post('muthofun', [MuthofunController::class, 'send']); +}); diff --git a/src/Controllers/MuthofunController.php b/src/Controllers/MuthofunController.php new file mode 100644 index 0000000..f813c80 --- /dev/null +++ b/src/Controllers/MuthofunController.php @@ -0,0 +1,26 @@ +all(); + unset($requestArray['_token']); + + $this->data = Muthofun::messages($requestArray)->send(); + return view('muthofun::index', $this->data); + } +} diff --git a/src/Facade/Muthofun.php b/src/Facade/Muthofun.php new file mode 100755 index 0000000..1068ee5 --- /dev/null +++ b/src/Facade/Muthofun.php @@ -0,0 +1,21 @@ +username = config('muthofun.username'); + $this->password = config('muthofun.password'); + $this->unicode = config('muthofun.unicode'); + } + + public function messages(array $msg) + { + $this->msg = $msg; + + return $this; + } + + public function send() + { + if (empty($this->msg)) { + return false; + } + + if ($this->is_multi($this->msg)) { + if (!blank($this->msg)) { + foreach ($this->msg as $msg) { + $response[] = $this->validateSendMessage($msg); + } + } + } else { + $response = $this->validateSendMessage($this->msg); + } + return $response; + } + + private function validateSendMessage($msg) + { + $returnArray['status'] = false; + $returnArray['msg'] = 'The message sending fail.'; + + $flag = true; + if (!isset($msg['message'])) { + $flag = false; + } + + if (!isset($msg['mobile'])) { + $flag = false; + } + + if ($flag) { + $sendSMSResult = $this->sendSMS($msg['mobile'], $msg['message']); + $sendSMSResultArray = $this->xmlToArray($sendSMSResult); + + if (config('muthofun.database')) { + $this->saveDatabase($msg); + } + + if (!isset($sendSMSResultArray['error']) && !blank($sendSMSResultArray['error'])) { + $returnArray['status'] = true; + $returnArray['msg'] = 'The message sending successfully.'; + } + $returnArray = array_merge($returnArray, $sendSMSResultArray); + } + $returnArray = array_merge($returnArray, $msg); + return $returnArray; + } + + private function saveDatabase($msg) + { + $muthofun = new MuthofunModel; + $muthofun->phone = $msg['mobile']; + $muthofun->message = $msg['message']; + $muthofun->misc = json_encode($msg); + $muthofun->create_user_id = auth()->id() ?? 0; + $muthofun->save(); + } + + public function is_multi($a) + { + $rv = array_filter($a, 'is_array'); + if (count($rv) > 0) { + return true; + } + return false; + } + + public function xmlToArray($xmlString) + { + $xml = simplexml_load_string($xmlString, "SimpleXMLElement", LIBXML_NOCDATA); + $json = json_encode($xml); + return json_decode($json, true); + } + + public function sendSMS($mobiles, $message) + { + // make sure passed string is url encoded + $message = rawurlencode($message); + $url = "http://clients.muthofun.com:8901/esmsgw/sendsms.jsp?user=$this->username&password=$this->password&mobiles=$mobiles&sms=$message&unicode=$this->unicode"; + + $c = curl_init(); + curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($c, CURLOPT_URL, $url); + $response = curl_exec($c); + return $response; + } +} diff --git a/src/MuthofunServiceProvider.php b/src/MuthofunServiceProvider.php new file mode 100755 index 0000000..573ae00 --- /dev/null +++ b/src/MuthofunServiceProvider.php @@ -0,0 +1,60 @@ +loadTranslationsFrom(__DIR__ . '/../resources/lang', 'muthofun'); + $this->loadViewsFrom(__DIR__ . '/../resources/views', 'muthofun'); + $this->loadMigrationsFrom(__DIR__ . '/../database/migrations'); + $this->loadRoutesFrom(__DIR__ . '/../routes/web.php'); + + if ($this->app->runningInConsole()) { + $this->publishes([ + __DIR__ . '/../config/config.php' => config_path('muthofun.php'), + ], 'config'); + + // Publishing the views. + $this->publishes([ + __DIR__ . '/../resources/views' => resource_path('views/vendor/muthofun'), + ], 'views'); + + // Publishing assets. + $this->publishes([ + __DIR__ . '/../resources/assets' => public_path('vendor/muthofun'), + ], 'assets'); + + // Publishing the translation files. + $this->publishes([ + __DIR__ . '/../resources/lang' => resource_path('lang/vendor/muthofun'), + ], 'lang'); + + // Registering package commands. + // $this->commands([]); + } + } + + /** + * Register the application services. + */ + public function register() + { + // Automatically apply the package configuration + $this->mergeConfigFrom(__DIR__ . '/../config/config.php', 'muthofun'); + + // Register the main class to use with the facade + $this->app->singleton('muthofun', function () { + return new Muthofun; + }); + } +} diff --git a/src/Requests/MuthofunRequest.php b/src/Requests/MuthofunRequest.php new file mode 100644 index 0000000..5339cdd --- /dev/null +++ b/src/Requests/MuthofunRequest.php @@ -0,0 +1,33 @@ + ['required', 'string', 'max:60'], + 'subject' => ['required', 'string', 'max:60'], + 'mobile' => ['required', 'string', 'max:20'], + 'message' => ['required', 'string', 'max:200'], + ]; + } +} diff --git a/tests/ExampleTest.php b/tests/ExampleTest.php new file mode 100755 index 0000000..5dee9ff --- /dev/null +++ b/tests/ExampleTest.php @@ -0,0 +1,21 @@ +assertTrue(true); + } +}