13 |
├── .editorconfig ├── .env.example ├── .gitattributes ├── .gitignore ├── .styleci.yml ├── README.md ├── app ├── Console │ └── Kernel.php ├── Events │ └── PostPublishEvent.php ├── Exceptions │ └── Handler.php ├── Http │ ├── Controllers │ │ ├── AccountController.php │ │ ├── Auth │ │ │ ├── ConfirmPasswordController.php │ │ │ ├── ForgotPasswordController.php │ │ │ ├── LoginController.php │ │ │ ├── RegisterController.php │ │ │ ├── ResetPasswordController.php │ │ │ └── VerificationController.php │ │ ├── Controller.php │ │ ├── DashboardController.php │ │ ├── MediaController.php │ │ ├── NotificationController.php │ │ ├── PostController.php │ │ ├── ProfileController.php │ │ └── SocialAuthController.php │ ├── Kernel.php │ ├── Middleware │ │ ├── Authenticate.php │ │ ├── EncryptCookies.php │ │ ├── PreventRequestsDuringMaintenance.php │ │ ├── RedirectIfAuthenticated.php │ │ ├── TrimStrings.php │ │ ├── TrustHosts.php │ │ ├── TrustProxies.php │ │ └── VerifyCsrfToken.php │ └── Requests │ │ ├── MediaRequest.php │ │ ├── PostRequest.php │ │ ├── ProfileInfoRequest.php │ │ └── ProfilePasswordRequest.php ├── Jobs │ └── PublishPost.php ├── Listeners │ ├── PostPublishListener.php │ └── SuccessfulLoginListener.php ├── Models │ ├── Account.php │ ├── Casts │ │ └── DiffForHumans.php │ ├── Media.php │ ├── Notification.php │ ├── Post.php │ ├── Session.php │ ├── SocialAuthUser.php │ └── User.php ├── Notifications │ ├── LoginNotification.php │ └── PostNotification.php ├── Policies │ ├── AccountPolicy.php │ ├── MediaPolicy.php │ ├── NotificationPolicy.php │ ├── PostPolicy.php │ └── SessionPolicy.php ├── PostaBot │ ├── Contracts │ │ └── Tokenizable.php │ ├── Exceptions │ │ └── TokenizerException.php │ ├── Facades │ │ └── Publisher.php │ ├── PublisherManager.php │ ├── PublisherProviders │ │ ├── Facebook.php │ │ └── Twitter.php │ └── TokenizerProviders │ │ ├── Facebook.php │ │ └── Twitter.php ├── Providers │ ├── AppServiceProvider.php │ ├── AuthServiceProvider.php │ ├── BroadcastServiceProvider.php │ ├── EventServiceProvider.php │ ├── PostaBotServiceProvider.php │ └── RouteServiceProvider.php ├── Repositories │ └── UserRepository.php ├── Rules │ ├── CheckOldPass.php │ ├── PostAccountsCheck.php │ └── PostMediaCheck.php └── Services │ ├── MediaService.php │ ├── PostService.php │ ├── ProfileService.php │ └── SocialAuthService.php ├── artisan ├── bootstrap ├── app.php └── cache │ └── .gitignore ├── composer.json ├── config ├── app.php ├── auth.php ├── broadcasting.php ├── cache.php ├── cors.php ├── database.php ├── filesystems.php ├── hashing.php ├── logging.php ├── mail.php ├── queue.php ├── services.php ├── session.php ├── view.php └── websockets.php ├── database ├── .gitignore ├── factories │ └── UserFactory.php ├── migrations │ ├── 0000_00_00_000000_create_websockets_statistics_entries_table.php │ ├── 2014_10_12_000000_create_users_table.php │ ├── 2014_10_12_100000_create_password_resets_table.php │ ├── 2019_08_19_000000_create_failed_jobs_table.php │ ├── 2020_10_27_110614_create_media_table.php │ ├── 2020_10_30_110207_create_social_auth_users_table.php │ ├── 2020_10_31_133916_create_sessions_table.php │ ├── 2020_10_31_133920_create_sessions_pub_id_column.php │ ├── 2020_11_04_123546_create_accounts_table.php │ ├── 2020_11_12_031714_create_posts_table.php │ ├── 2021_02_17_140216_create_media_post_table.php │ ├── 2021_02_20_081434_create_jobs_table.php │ ├── 2021_02_24_190312_create_account_post_table.php │ └── 2021_02_28_020647_create_notifications_table.php └── seeders │ └── DatabaseSeeder.php ├── package.json ├── phpunit.xml ├── public ├── .htaccess ├── css │ ├── adminlte.css │ ├── app.css │ ├── calendar.css │ ├── fontawesome.css │ ├── icheck.css │ └── tempusdominus.css ├── favicon.ico ├── images │ ├── avatar.png │ └── logo.png ├── index.php ├── js │ ├── adminlte.js │ ├── app.js │ ├── bootstrap.js │ ├── calendar.js │ └── jquery.js ├── mix-manifest.json ├── resources │ └── js │ │ └── test1.js ├── robots.txt ├── storage ├── web.config └── webfonts │ ├── fa-brands-400.eot │ ├── fa-brands-400.svg │ ├── fa-brands-400.ttf │ ├── fa-brands-400.woff │ ├── fa-brands-400.woff2 │ ├── fa-regular-400.eot │ ├── fa-regular-400.svg │ ├── fa-regular-400.ttf │ ├── fa-regular-400.woff │ ├── fa-regular-400.woff2 │ ├── fa-solid-900.eot │ ├── fa-solid-900.svg │ ├── fa-solid-900.ttf │ ├── fa-solid-900.woff │ └── fa-solid-900.woff2 ├── resources ├── css │ └── app.css ├── js │ ├── app.js │ ├── bootstrap.js │ └── components │ │ ├── EventBus.js │ │ ├── MediaUploader.vue │ │ ├── Notifications.vue │ │ ├── PostCreator.vue │ │ └── PostEditor.vue ├── lang │ └── en │ │ ├── auth.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ └── validation.php ├── sass │ ├── _variables.scss │ └── app.scss └── views │ ├── auth │ ├── login.blade.php │ ├── passwords │ │ ├── confirm.blade.php │ │ ├── email.blade.php │ │ └── reset.blade.php │ ├── register.blade.php │ └── verify.blade.php │ ├── layouts │ ├── app.blade.php │ ├── auth.blade.php │ └── pagination.blade.php │ └── main │ ├── accounts.blade.php │ ├── calendar.blade.php │ ├── dashboard.blade.php │ ├── media.blade.php │ ├── notifications.blade.php │ ├── posts │ ├── create.blade.php │ ├── edit.blade.php │ ├── index.blade.php │ └── show.blade.php │ └── profile.blade.php ├── routes ├── api.php ├── channels.php ├── console.php └── web.php ├── screenshots ├── 1.png ├── 10.png ├── 11.png ├── 2.png ├── 3.png ├── 4.png ├── 5.png ├── 6.png ├── 7.png ├── 8.png ├── 9.png └── logo.png ├── server.php ├── storage ├── app │ └── .gitignore ├── debugbar │ └── .gitignore ├── framework │ ├── .gitignore │ ├── cache │ │ ├── .gitignore │ │ └── data │ │ │ └── .gitignore │ ├── sessions │ │ └── .gitignore │ ├── testing │ │ └── .gitignore │ └── views │ │ └── .gitignore └── logs │ └── .gitignore ├── tests ├── CreatesApplication.php ├── Feature │ └── AuthTest.php └── TestCase.php └── webpack.mix.js /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | end_of_line = lf 6 | insert_final_newline = true 7 | indent_style = space 8 | indent_size = 4 9 | trim_trailing_whitespace = true 10 | 11 | [*.md] 12 | trim_trailing_whitespace = false 13 | 14 | [*.{yml,yaml}] 15 | indent_size = 2 16 | -------------------------------------------------------------------------------- /.env.example: -------------------------------------------------------------------------------- 1 | APP_NAME=Laravel 2 | APP_ENV=local 3 | APP_KEY= 4 | APP_DEBUG=true 5 | APP_URL=http://localhost 6 | 7 | LOG_CHANNEL=stack 8 | LOG_LEVEL=debug 9 | 10 | DB_CONNECTION=mysql 11 | DB_HOST=127.0.0.1 12 | DB_PORT=3306 13 | DB_DATABASE=laravel 14 | DB_USERNAME=root 15 | DB_PASSWORD= 16 | 17 | BROADCAST_DRIVER=pusher 18 | CACHE_DRIVER=file 19 | QUEUE_CONNECTION=database 20 | SESSION_DRIVER=database 21 | SESSION_LIFETIME=35791394 22 | 23 | 24 | 25 | MAIL_MAILER=smtp 26 | MAIL_HOST=smtp.mailtrap.io 27 | MAIL_PORT=2525 28 | MAIL_USERNAME=null 29 | MAIL_PASSWORD=null 30 | MAIL_ENCRYPTION=null 31 | MAIL_FROM_ADDRESS=null 32 | MAIL_FROM_NAME="${APP_NAME}" 33 | 34 | 35 | 36 | PUSHER_APP_ID= 37 | PUSHER_APP_KEY= 38 | PUSHER_APP_SECRET= 39 | PUSHER_APP_CLUSTER=mt1 40 | PUSHER_APP_SCHEME=https 41 | 42 | MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" 43 | MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" 44 | 45 | LARAVEL_WEBSOCKETS_SSL_LOCAL_CERT= 46 | LARAVEL_WEBSOCKETS_SSL_LOCAL_PK= 47 | 48 | FACEBOOK_CLIENT_ID= 49 | FACEBOOK_CLIENT_SECRET= 50 | FACEBOOK_REDIRECT= 51 | 52 | 53 | GOOGLE_CLIENT_ID= 54 | GOOGLE_CLIENT_SECRET= 55 | GOOGLE_REDIRECT= 56 | 57 | 58 | 59 | TWITTER_CLIENT_ID= 60 | TWITTER_CLIENT_SECRET= 61 | TWITTER_REDIRECT= 62 | 63 | 64 | 65 | INSTAGRAM_CLIENT_ID= 66 | INSTAGRAM_CLIENT_SECRET= 67 | INSTAGRAM_REDIRECT= 68 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | *.css linguist-vendored 3 | *.scss linguist-vendored 4 | *.js linguist-vendored 5 | CHANGELOG.md export-ignore 6 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | /public/hot 3 | /storage/*.key 4 | /vendor 5 | .env 6 | .env.backup 7 | .phpunit.result.cache 8 | Homestead.json 9 | Homestead.yaml 10 | npm-debug.log 11 | yarn-error.log 12 | /.idea 13 | /app/PostaBot/TokenizerProviders/Instagram.php 14 | package-lock.json 15 | composer.lock -------------------------------------------------------------------------------- /.styleci.yml: -------------------------------------------------------------------------------- 1 | php: 2 | preset: laravel 3 | disabled: 4 | - no_unused_imports 5 | finder: 6 | not-name: 7 | - index.php 8 | - server.php 9 | js: 10 | finder: 11 | not-name: 12 | - webpack.mix.js 13 | css: true 14 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
7 | social media scheduler 8 |
9 | 10 | 11 | ## About The Project 12 | demo project built with laravel to schedule social media posts for later publish .. project focuses on using laravel framework components , architecture, patterns and tests. 13 | 14 | 15 | ## prerequisite 16 | try to make twitter or facebook application with publish permissions 17 | and update tokens in .env file 18 | 19 | ## Usage 20 | 21 | 1. Clone the repo 22 | 23 | ```sh 24 | git clone https://github.com/civilcoder55/laravel-laposta.git 25 | ``` 26 | 27 | 2. update env file 28 | 29 | ```sh 30 | cp .env.example .env 31 | ``` 32 | 33 | 3. start workers 34 | 35 | ```sh 36 | php artisan queue:work 37 | ``` 38 | 39 | ```sh 40 | php artisan schedule:work 41 | ``` 42 | 43 | ```sh 44 | php artisan websockets:serve 45 | ``` 46 | 47 | 5. start server 48 | 49 | ```sh 50 | php artisan serve 51 | ``` 52 | 53 | 6. access website at 54 | 55 | ```sh 56 | http://127.0.0.1:8000 57 | ``` 58 | 59 | ## Screenshots 60 | 61 |Sign in to start your session
8 | @if (session('status')) 9 |76 | @if (Route::has('password.request')) 77 | I forgot my password 78 | @endif 79 | 80 |
81 |82 | Register a new membership 83 |
84 |You forgot your password? Here you can easily retrieve a new password.
7 | @if (session('status')) 8 |39 | I forgot my password 40 |
41 | @endif 42 |You forgot your password? Here you can easily retrieve a new password.
7 | @if (session('status')) 8 |40 | Login 41 |
42 |43 | Register a new membership 44 |
45 |You are only one step a way from your new password, recover your password now.
8 | 9 | 60 | 61 |62 | Login 63 |
64 |Register a new membership
7 | 8 | 75 | 76 | 87 | 88 | I already have a membership 89 |Type | 46 |Message | 47 |Time | 48 |Action | 49 |
---|---|---|---|
Login | 56 |57 | {{ $notification->data['message'] }} | 58 | @elseif($notification->data["type"] == 'post') 59 |||
Post | 61 |{{ $notification->data['message'] }} | 62 | @endif 63 |{{ $notification->created_at}} 64 | | 65 |66 | 74 | | 75 |
{{ $log['message'] }}
56 |# | 47 |Message | 48 |Media | 49 |Accounts | 50 |Status | 51 |Created_At | 52 |To_Published_At | 53 |Action | 54 |
---|---|---|---|---|---|---|---|
{{ $post->id }} 60 | | 61 | 62 |{{ $post->media_count }} | 63 |{{ $post->accounts_count}} | 64 |{{ $post->draft ? 'draft' : $post->status }} | 65 |{{ $post->created_at }} | 66 |{{ $post->schedule_date }} | 67 |68 | 79 | | 80 |