From 9cd017fb9a99706878d0c5cd23a1b1c572ebc7c9 Mon Sep 17 00:00:00 2001 From: Kwesi Banson Jnr Date: Thu, 5 Feb 2026 08:38:07 +0000 Subject: [PATCH] fixed shortcode edit issues plus refactoring --- app/Http/Controllers/LoginController.php | 5 +- .../NetworkOperatorsController.php | 4 +- app/Http/Controllers/ShortCodesController.php | 33 +++ app/Http/Controllers/UtilityController.php | 13 + .../CheckCurrentlyLoggedInUsers.php | 6 + app/Models/StaffMember.php | 3 + app/Notifications/DesktopNotification.php | 68 ++++++ app/Notifications/EmailNotification.php | 40 ++++ composer.json | 1 + composer.lock | 149 +++++++++++- info.md | 4 + public/assets/js/shortcode.js | 225 +++++++++++++----- requirements.md | 2 + resources/views/network_ops/edit.blade.php | 7 + resources/views/network_ops/show.blade.php | 8 +- .../partials/edit-short-code.blade.php | 118 +++++++++ resources/views/shortcodes/smsindex.blade.php | 48 +--- .../views/shortcodes/ussdindex.blade.php | 17 +- .../views/shortcodes/voiceindex.blade.php | 15 +- routes/web.php | 6 +- 20 files changed, 655 insertions(+), 117 deletions(-) create mode 100644 app/Notifications/DesktopNotification.php create mode 100644 app/Notifications/EmailNotification.php create mode 100644 resources/views/shortcodes/partials/edit-short-code.blade.php diff --git a/app/Http/Controllers/LoginController.php b/app/Http/Controllers/LoginController.php index 2441ea5..f6ef1f3 100755 --- a/app/Http/Controllers/LoginController.php +++ b/app/Http/Controllers/LoginController.php @@ -23,7 +23,6 @@ class LoginController extends Controller return redirect(url('login'))->withErrors("No session found. You need to be logged in!"); } $otp_code = Str::random(6); - \Log::info($otp_code); request()->session()->put('current_otpuser.otp', $otp_code); $otp_user = session('current_otpuser'); @@ -33,6 +32,7 @@ class LoginController extends Controller 'auth_name' => $otp_user['name'] ]; dispatch(new SendOtpEmailAlert($otp_set)); + \Log::info($otp_code); $data = [ 'otp_user_id' => $otp_user['id'], 'page_title' => 'Login OTP', @@ -46,6 +46,9 @@ class LoginController extends Controller return redirect(url('login'))->withErrors("$random | You need to be logged in "); } $otp_user = session('current_otpuser'); + + // dump(session('current_otpuser.otp')); + \Log::info(session('current_otpuser.otp')); $data = [ 'otp_user_id' => $otp_user['id'], 'page_title' => 'Login OTP', diff --git a/app/Http/Controllers/NetworkOperatorsController.php b/app/Http/Controllers/NetworkOperatorsController.php index 79ec7a5..7ecaf5a 100755 --- a/app/Http/Controllers/NetworkOperatorsController.php +++ b/app/Http/Controllers/NetworkOperatorsController.php @@ -353,6 +353,7 @@ class NetworkOperatorsController extends Controller $status_bg = "danger"; } $rate_types = ['flat_rate' => 'Flat Rate', 'sliding' => 'Sliding Scale']; + $contract_types = ['Bilateral' => 'Bilateral', 'Unilateral' => 'Unilateral']; $data = [ 'page_title' => 'Edit Network Operator', 'network_arr' => $network_arr, @@ -375,7 +376,8 @@ class NetworkOperatorsController extends Controller 'ip_addresses' => $ip_addresses, 'notes_arr' => $notes_arr, 'recent_payments' => $recent_payments, - 'service_type_names' => $service_type_names + 'service_type_names' => $service_type_names, + 'contract_types' => $contract_types ]; return view('network_ops.edit', $data); } diff --git a/app/Http/Controllers/ShortCodesController.php b/app/Http/Controllers/ShortCodesController.php index f024baf..7e674db 100644 --- a/app/Http/Controllers/ShortCodesController.php +++ b/app/Http/Controllers/ShortCodesController.php @@ -98,9 +98,24 @@ class ShortCodesController extends Controller{ ->select('code_type', \DB::raw('count(*) as total')) ->groupBy('code_type') ->get(); + $networks_raw = [ + 'AirtelTigo GH' => 'AirtelTigo GH', + 'MTN GH' => 'MTN GH', + 'Airtel MW' => 'Airtel MW', + 'Airtel Zambia' => 'Airtel Zambia', + 'TNM MW' => 'TNM MW', + 'Airtel MW' => 'Airtel MW', + 'Safaricom Kenya' => 'Safaricom Kenya', + 'Airtel Kenya' => 'Airtel Kenya', + 'Telkom Kenya' => 'Telkom Kenya', + 'Orange Kenya' => 'Orange Kenya' + ]; + sort($networks_raw); + $data = [ 'page_title' => 'Short Codes', 'type' => 'USSD', + 'networks_raw' => array_combine($networks_raw, $networks_raw), 'codes_data' => $codes_data, 'country_network_arr' => $country_networks, 'client_arr' => $client_arr, @@ -145,9 +160,23 @@ class ShortCodesController extends Controller{ ->select('code_type', \DB::raw('count(*) as total')) ->groupBy('code_type') ->get(); + $networks_raw = [ + 'AirtelTigo GH' => 'AirtelTigo GH', + 'MTN GH' => 'MTN GH', + 'Airtel MW' => 'Airtel MW', + 'Airtel Zambia' => 'Airtel Zambia', + 'TNM MW' => 'TNM MW', + 'Airtel MW' => 'Airtel MW', + 'Safaricom Kenya' => 'Safaricom Kenya', + 'Airtel Kenya' => 'Airtel Kenya', + 'Telkom Kenya' => 'Telkom Kenya', + 'Orange Kenya' => 'Orange Kenya' + ]; + sort($networks_raw); $data = [ 'page_title' => 'Short Codes', 'type' => 'Voice', + 'networks_raw' => array_combine($networks_raw, $networks_raw), 'codes_data' => $codes_data, 'country_network_arr' => $country_networks, 'client_arr' => $client_arr, @@ -181,6 +210,10 @@ class ShortCodesController extends Controller{ } return response()->json($shortcode_arr); } + public function handle_delete($id){ + $result = Models\ClientShortCode::destroy($id); + return response()->json(['code' => 1, 'msg' => $result]); + } diff --git a/app/Http/Controllers/UtilityController.php b/app/Http/Controllers/UtilityController.php index 4dac865..5fb2ed1 100644 --- a/app/Http/Controllers/UtilityController.php +++ b/app/Http/Controllers/UtilityController.php @@ -8,6 +8,8 @@ use App\Models; use Spatie\Activitylog\Models\Activity; use Illuminate\Contracts\Mail\Mailer; use App\Jobs\SendTestEmail; +use App\Notifications\EmailNotification; + class UtilityController extends Controller { @@ -247,5 +249,16 @@ class UtilityController extends Controller } + public function sendEmailNotification(Request $request){ + $user = Models\StaffMember::find(1); + + // Create a new instance of your notification + $notification = new EmailNotification('This is a test notification.', 'https://example.com'); + + // Send the notification + $user->notify($notification); + } + + } // https://www.tokyvideo.com/video/sheena-the-queen-of-the-jungle-1984-movie-with-tanya-roberts-ted-wass-donovan-scott diff --git a/app/Http/Middleware/CheckCurrentlyLoggedInUsers.php b/app/Http/Middleware/CheckCurrentlyLoggedInUsers.php index 50b1d8a..a655a04 100644 --- a/app/Http/Middleware/CheckCurrentlyLoggedInUsers.php +++ b/app/Http/Middleware/CheckCurrentlyLoggedInUsers.php @@ -21,6 +21,9 @@ class CheckCurrentlyLoggedInUsers $device = $request->server('HTTP_USER_AGENT'); $realm = $id . $device; $current_user = Models\LoggedUser::where('user_id', $id)->where('device', $device)->first(); + if($current_user == null){ + return $next($request); + } $current_user->last_seen_time = date('Y-m-d H:i:s'); $current_user->ip_address = \Request::ip(); @@ -29,3 +32,6 @@ class CheckCurrentlyLoggedInUsers return $next($request); } } + + + diff --git a/app/Models/StaffMember.php b/app/Models/StaffMember.php index c4b334c..b9c28d7 100644 --- a/app/Models/StaffMember.php +++ b/app/Models/StaffMember.php @@ -3,9 +3,12 @@ namespace App\Models; use Illuminate\Database\Eloquent\Model; +use Illuminate\Notifications\Notifiable; + class StaffMember extends Model { + use Notifiable; protected $guarded = array('id'); public $table = "staff_members"; diff --git a/app/Notifications/DesktopNotification.php b/app/Notifications/DesktopNotification.php new file mode 100644 index 0000000..3ee925d --- /dev/null +++ b/app/Notifications/DesktopNotification.php @@ -0,0 +1,68 @@ +message = $message; + } + + /** + * Get the notification's delivery channels. + * + * @param mixed $notifiable + * @return array + */ + public function via($notifiable) + { + // return ['mail']; + return ['broadcast']; + } + + /** + * Get the mail representation of the notification. + * + * @param mixed $notifiable + * @return \Illuminate\Notifications\Messages\MailMessage + */ + /* + public function toMail($notifiable) + { + return (new MailMessage) + ->line('The introduction to the notification.') + ->action('Notification Action', url('/')) + ->line('Thank you for using our application!'); + } + */ + public function toBroadcast($notifiable){ + return new BroadcastMessage([ + 'message' => $this->message + ]); + } + + /** + * Get the array representation of the notification. + * + * @param mixed $notifiable + * @return array + */ + public function toArray($notifiable) + { + return [ + // + ]; + } +} diff --git a/app/Notifications/EmailNotification.php b/app/Notifications/EmailNotification.php new file mode 100644 index 0000000..e283d83 --- /dev/null +++ b/app/Notifications/EmailNotification.php @@ -0,0 +1,40 @@ +message = $message; + $this->url = $url; + } + + public function via($notifiable) + { + return ['mail']; // Use 'mail' channel + } + + public function toMail($notifiable) + { + $mailMessage = (new MailMessage) + ->greeting('Hello!') + ->line($this->message); + + if ($this->url) { + $mailMessage->action('View Details', $this->url); + } + + return $mailMessage->salutation('Regards, Your Application'); + } +} + +?> \ No newline at end of file diff --git a/composer.json b/composer.json index cf5206e..53b83f5 100755 --- a/composer.json +++ b/composer.json @@ -11,6 +11,7 @@ "laravel/tinker": "~1.0", "laravelcollective/html": "^5.4.0", "maatwebsite/excel": "^3.1", + "pusher/pusher-php-server": "^7.2", "thibaud-dauce/laravel-mattermost-logger": "^1.2" }, "require-dev": { diff --git a/composer.lock b/composer.lock index 6a0e311..91f1b4a 100755 --- 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": "d6b526be34793fb2333359d042baaf53", + "content-hash": "55c340daa242a9f806959c576ed88b31", "packages": [ { "name": "dnoegel/php-xdg-base-dir", @@ -2004,6 +2004,92 @@ }, "time": "2020-10-15T08:29:30+00:00" }, + { + "name": "paragonie/sodium_compat", + "version": "v1.23.0", + "source": { + "type": "git", + "url": "https://github.com/paragonie/sodium_compat.git", + "reference": "b938a5c6844d222a26d46a6c7b80291e4cd8cfab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/sodium_compat/zipball/b938a5c6844d222a26d46a6c7b80291e4cd8cfab", + "reference": "b938a5c6844d222a26d46a6c7b80291e4cd8cfab", + "shasum": "" + }, + "require": { + "paragonie/random_compat": ">=1", + "php": "^5.2.4|^5.3|^5.4|^5.5|^5.6|^7|^8" + }, + "require-dev": { + "phpunit/phpunit": "^3|^4|^5|^6|^7|^8|^9" + }, + "suggest": { + "ext-libsodium": "PHP < 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security.", + "ext-sodium": "PHP >= 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security." + }, + "type": "library", + "autoload": { + "files": [ + "autoload.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "ISC" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com" + }, + { + "name": "Frank Denis", + "email": "jedisct1@pureftpd.org" + } + ], + "description": "Pure PHP implementation of libsodium; uses the PHP extension if it exists", + "keywords": [ + "Authentication", + "BLAKE2b", + "ChaCha20", + "ChaCha20-Poly1305", + "Chapoly", + "Curve25519", + "Ed25519", + "EdDSA", + "Edwards-curve Digital Signature Algorithm", + "Elliptic Curve Diffie-Hellman", + "Poly1305", + "Pure-PHP cryptography", + "RFC 7748", + "RFC 8032", + "Salpoly", + "Salsa20", + "X25519", + "XChaCha20-Poly1305", + "XSalsa20-Poly1305", + "Xchacha20", + "Xsalsa20", + "aead", + "cryptography", + "ecdh", + "elliptic curve", + "elliptic curve cryptography", + "encryption", + "libsodium", + "php", + "public-key cryptography", + "secret-key cryptography", + "side-channel resistant" + ], + "support": { + "issues": "https://github.com/paragonie/sodium_compat/issues", + "source": "https://github.com/paragonie/sodium_compat/tree/v1.23.0" + }, + "time": "2025-10-06T08:53:07+00:00" + }, { "name": "phpoffice/phpspreadsheet", "version": "1.29.0", @@ -2496,6 +2582,67 @@ }, "time": "2019-12-06T14:19:43+00:00" }, + { + "name": "pusher/pusher-php-server", + "version": "7.2.7", + "source": { + "type": "git", + "url": "https://github.com/pusher/pusher-http-php.git", + "reference": "148b0b5100d000ed57195acdf548a2b1b38ee3f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pusher/pusher-http-php/zipball/148b0b5100d000ed57195acdf548a2b1b38ee3f7", + "reference": "148b0b5100d000ed57195acdf548a2b1b38ee3f7", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "guzzlehttp/guzzle": "^7.2", + "paragonie/sodium_compat": "^1.6|^2.0", + "php": "^7.3|^8.0", + "psr/log": "^1.0|^2.0|^3.0" + }, + "require-dev": { + "overtrue/phplint": "^2.3", + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Pusher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Library for interacting with the Pusher REST API", + "keywords": [ + "events", + "messaging", + "php-pusher-server", + "publish", + "push", + "pusher", + "real time", + "real-time", + "realtime", + "rest", + "trigger" + ], + "support": { + "issues": "https://github.com/pusher/pusher-http-php/issues", + "source": "https://github.com/pusher/pusher-http-php/tree/7.2.7" + }, + "time": "2025-01-06T10:56:20+00:00" + }, { "name": "ralouphie/getallheaders", "version": "3.0.3", diff --git a/info.md b/info.md index dc9437e..beb0717 100644 --- a/info.md +++ b/info.md @@ -5,3 +5,7 @@ INSERT INTO `client_finances` (`id`, `client_id`, `invoice_number`, `invoice_amount`, `invoice_date`, `invoice_status`, `user_id`, `services`, `short_code`, `remarks`, `created_at`, `updated_at`) VALUES ('602', '36', '1878', '6.16', '2025-06-17 00:00:00', 'UNPAID', '8', 'A2P', '', 'May 2025 SMS traffic', '2025-06-17 12:13:37', '2025-06-17 12:13:37'); + + + +The stream or file "/var/www/html/general/team_tracker/storage/logs/laravel-2026-01-26.log" could not be opened in append mode: failed to open stream: Permission denied diff --git a/public/assets/js/shortcode.js b/public/assets/js/shortcode.js index 0f8676f..ec1c140 100644 --- a/public/assets/js/shortcode.js +++ b/public/assets/js/shortcode.js @@ -1,72 +1,171 @@ $(document).ready(function(){ + console.log('foo bar'); $('.scdates').datetimepicker({ format: 'YYYY-MM-DD' - }); + }); $('select').select2(); - $('#createSmsShortCodeBtn').click(function(evt){ - evt.preventDefault(); - $('#shortCodeType').val('sms'); - $('#newShortCodeFormModal').modal('show'); - }); - $('#createUssdShortCodeBtn').click(function(evt){ - evt.preventDefault(); - $('#shortCodeType').val('ussd'); - $('#newShortCodeFormModal').modal('show'); - }); - $('#createVoiceShortCodeBtn').click(function(evt){ - evt.preventDefault(); - $('#shortCodeType').val('voice'); - $('#newShortCodeFormModal').modal('show'); - }); - - - - $('#shortCodeForm').submit(function(evt){ - evt.preventDefault(); - var formData = new FormData($(this)[0]); + // $('#shortCodeDelBtn').on('click', function(evt) { + $(document).on('click', '.linkButton', function(){ + var theVal = $(this).siblings('.hiddenInput').val(); + console.log('heere at the wall' + theVal ); $.ajax({ - type: "POST", - url: base_url + '/clients/shortcode_store', - data : formData, - processData: false, - contentType: false, - async: false, - success: function (data){ - if (data.code === 1) { - $.alert({ - title: 'Alert!', - content: 'Short code details successfully saved', - }); - setTimeout(function(){ - location.reload(); - }, 5000); - } - else if (data.code > 1) { - $.alert({ - title: 'Alert!', - content: data.msg, - }); - } - else { - $.alert({ - title: 'Alert!', - content: 'Your request could not be handled. Try again !', - }); - - } - }, - error: function (data) { - var output = $.parseJSON(data.responseText); - // console.log(output.errors); - $('#notifyArea').removeClass('hidden'); - $.each(output.errors, function (key, value) { - // console.log(value[0]); - $('#notifyArea').text(value[0]); - }); - }, - fail : function(errordata){ - // console.log(errordata); + type: "GET", + url: base_url + '/clients/get_shortcode/' + theVal, + processData: false, + contentType: false, + async: false, + success: function (data){ + if (data.code === 1) { + console.log(data); + $('#shortCodeIDEdit').val(theVal); + $('#nameEdit').val(data.result.name); + $('#shortCodeClientIdEdit').val(data.result.client_id); + $('#shortCodeTypeEdit').val(data.result.code_type); + $('#shortCodeEdit').val(data.result.shortcode); + $('#tollFreeEdit').val(data.result.toll_free).change(); + $('#monthlyFeeEdit').val(data.result.monthly_fee); + $('#launchDateEdit').val(data.result.launch_date); + $('#expiryDateEdit').val(data.result.expiry_date); + $('#codeStatusEdit').val(data.result.status).change(); + $('#network').val(data.result.network).change(); + $('#remarksEdit').val(data.result.remarks); + $('#shortCodeEditMain').modal('show'); } + else if (data.code > 1) { + $.alert({ + title: 'Alert!', + content: data.msg, + }); + } + else { + $.alert({ + title: 'Alert!', + content: 'Your request could not be handled. Try again !', + }); + + } + } }); + }); + $('.shortCodeDelBtn').click(function(evt){ + evt.preventDefault(); + $.confirm({ + title: 'Confirm Deletion', + content: 'Are you sure you want to delete this Short Code?', + buttons: { + confirm: function() { + var shortCodeId = $('#shortCodeIDEdit').val(); + + $.ajax({ + type: "GET", + url: base_url + '/allshortcode/remove_code/' + shortCodeId, + // data : formData, + processData: false, + contentType: false, + async: false, + success: function (data){ + if (data.code === 1) { + $.alert({ + title: 'Alert!', + content: 'Short Code Details successfully Removed', + }); + setTimeout(function(){ + location.reload(); + }, 8000); + } + else if (data.code > 1) { + $.alert({ + title: 'Alert!', + content: data.msg, + }); + } + else { + $.alert({ + title: 'Alert!', + content: 'Your request could not be handled. Try again !', + }); + + } + } + }); + }, + cancel: function() { + $.alert({ + title: 'Alert!', + content: 'You cancelled the request. The Short Code has not been deleted!', + }); + } + } + }); + + + + }); + $('#createSmsShortCodeBtn').click(function(evt){ + evt.preventDefault(); + $('#shortCodeType').val('sms'); + $('#newShortCodeFormModal').modal('show'); + }); + $('#createUssdShortCodeBtn').click(function(evt){ + evt.preventDefault(); + $('#shortCodeType').val('ussd'); + $('#newShortCodeFormModal').modal('show'); + }); + $('#createVoiceShortCodeBtn').click(function(evt){ + evt.preventDefault(); + $('#shortCodeType').val('voice'); + $('#newShortCodeFormModal').modal('show'); + }); + + + + $('#shortCodeForm').submit(function(evt){ + evt.preventDefault(); + var formData = new FormData($(this)[0]); + $.ajax({ + type: "POST", + url: base_url + '/clients/shortcode_store', + data : formData, + processData: false, + contentType: false, + async: false, + success: function (data){ + if (data.code === 1) { + $.alert({ + title: 'Alert!', + content: 'Short code details successfully saved', + }); + setTimeout(function(){ + location.reload(); + }, 5000); + } + else if (data.code > 1) { + $.alert({ + title: 'Alert!', + content: data.msg, + }); + } + else { + $.alert({ + title: 'Alert!', + content: 'Your request could not be handled. Try again !', + }); + + } + }, + error: function (data) { + var output = $.parseJSON(data.responseText); + // console.log(output.errors); + $('#notifyArea').removeClass('hidden'); + $.each(output.errors, function (key, value) { + // console.log(value[0]); + $('#notifyArea').text(value[0]); + }); + }, + fail : function(errordata){ + // console.log(errordata); + } + }); + }); }); \ No newline at end of file diff --git a/requirements.md b/requirements.md index 01ec540..68d31f7 100755 --- a/requirements.md +++ b/requirements.md @@ -34,3 +34,5 @@ Approved on Aggregator Active InActive +Prefix Tab on MNO module +Email ref : Fw: Ocotber 2025 Usage Invoice and Traffic Report \ No newline at end of file diff --git a/resources/views/network_ops/edit.blade.php b/resources/views/network_ops/edit.blade.php index affa6ae..c380c79 100755 --- a/resources/views/network_ops/edit.blade.php +++ b/resources/views/network_ops/edit.blade.php @@ -163,6 +163,13 @@ {!! $errors->first('support_phones', '

:message

') !!} +
+ +
+ {!! Form::select('contract_type', $contract_types, old('contract_type'), ['class' => 'form-control ', 'placeholder'=>'Select Contract type' , 'id' => 'contractType']) !!} + {!! $errors->first('contract_type', '

:message

') !!} +
+
diff --git a/resources/views/network_ops/show.blade.php b/resources/views/network_ops/show.blade.php index a597c1c..f31f591 100755 --- a/resources/views/network_ops/show.blade.php +++ b/resources/views/network_ops/show.blade.php @@ -75,7 +75,7 @@

Company Details

- +
@@ -90,7 +90,7 @@ - - +
Name {{ $mnoshow->country }}
Support Emails + support_emails) ? implode(',', json_decode($mnoshow->support_emails)) : ""; ?> @@ -121,7 +121,7 @@
Finace Contact PersonFinance Contact Person contact_person_finance) ?? "N/A"; @@ -134,7 +134,7 @@

Operations

- +
Services diff --git a/resources/views/shortcodes/partials/edit-short-code.blade.php b/resources/views/shortcodes/partials/edit-short-code.blade.php new file mode 100644 index 0000000..7edb71d --- /dev/null +++ b/resources/views/shortcodes/partials/edit-short-code.blade.php @@ -0,0 +1,118 @@ + + diff --git a/resources/views/shortcodes/smsindex.blade.php b/resources/views/shortcodes/smsindex.blade.php index f68517d..88e0473 100644 --- a/resources/views/shortcodes/smsindex.blade.php +++ b/resources/views/shortcodes/smsindex.blade.php @@ -9,7 +9,7 @@ @endsection @section('content') @include('shortcodes.partials.create') -@include('client.partials.edit-shortcodes') +@include('shortcodes.partials.edit-short-code')
@@ -93,6 +93,7 @@