Skip to content

Commit 842b8e7

Browse files
committed
Refactor ThemeServiceProvider and enhance SEO metadata structure
- Updated the ThemeServiceProvider.php file to replace the existing encoded content with a new encoded string. - Modified the HasEditor trait to include a new 'seo' array in the toPublic() method, encapsulating meta title, keywords, and description for improved SEO handling.
1 parent b7bd302 commit 842b8e7

13 files changed

+841
-774
lines changed

lib/helpers.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,26 @@ function app_url($path = '', $query = [])
110110
}
111111
}
112112

113+
if (!function_exists('base_route')) {
114+
function base_route($path = '', $query = [])
115+
{
116+
if (empty($path)) {
117+
$url = '/';
118+
} else {
119+
// Check if $path starts with a slash
120+
$separator = (substr($path, 0, 1) === '/') ? '' : '/';
121+
$url = $separator . $path;
122+
}
123+
124+
// Append query parameters if provided
125+
if (!empty($query)) {
126+
$url .= '?' . http_build_query($query);
127+
}
128+
129+
return $url;
130+
}
131+
}
132+
113133
if (!function_exists('user_route')) {
114134
function user_route($path = '', $query = [])
115135
{

src/Coderstm.php

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,18 @@ class Coderstm
100100
*/
101101
protected static $gocardlessClient;
102102

103+
/**
104+
* The cached PayPal client instance.
105+
* @var \Srmklive\PayPal\Services\PayPal
106+
*/
107+
protected static $paypalClient;
108+
109+
/**
110+
* The cached Razorpay client instance.
111+
* @var \Razorpay\Api\Api
112+
*/
113+
protected static $razorpayClient;
114+
103115
/**
104116
* Determine if Coderstm's migrations should be run.
105117
*
@@ -264,4 +276,45 @@ public static function gocardless(array $options = []): \GoCardlessPro\Client
264276

265277
return static::$gocardlessClient = new \GoCardlessPro\Client($clientOptions);
266278
}
279+
280+
/**
281+
* Get the paypal client instance.
282+
* @param array $options
283+
* @return \Srmklive\PayPal\Services\PayPal
284+
*/
285+
public static function paypal(array $options = []): \Srmklive\PayPal\Services\PayPal
286+
{
287+
if (static::$paypalClient) {
288+
return static::$paypalClient;
289+
}
290+
291+
$options = array_merge(config('paypal'), $options);
292+
293+
$provider = new \Srmklive\PayPal\Services\PayPal;
294+
$provider->setApiCredentials(config('paypal'));
295+
$provider->getAccessToken();
296+
297+
return static::$paypalClient = $provider;
298+
}
299+
300+
/**
301+
* Get the razorpay client instance.
302+
* @param array $options
303+
* @return \Razorpay\Api\Api
304+
*/
305+
public static function razorpay(array $options = []): \Razorpay\Api\Api
306+
{
307+
if (static::$razorpayClient) {
308+
return static::$razorpayClient;
309+
}
310+
311+
$keyId = $options['key_id'] ?? config('razorpay.key_id');
312+
$keySecret = $options['key_secret'] ?? config('razorpay.key_secret');
313+
314+
if (empty($keyId) || empty($keySecret)) {
315+
throw new \Exception('Razorpay key ID and secret are required. Please configure your Razorpay payment method.');
316+
}
317+
318+
return static::$razorpayClient = new \Razorpay\Api\Api($keyId, $keySecret);
319+
}
267320
}

src/Http/Controllers/Payment/PaypalController.php

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,18 @@
22

33
namespace Coderstm\Http\Controllers\Payment;
44

5+
use Coderstm\Coderstm;
56
use Illuminate\Support\Str;
67
use Illuminate\Http\Request;
78
use Coderstm\Models\Shop\Order;
89
use Coderstm\Traits\Paymentable;
910
use Coderstm\Models\PaymentMethod;
1011
use Coderstm\Http\Controllers\Controller;
11-
use Srmklive\PayPal\Services\PayPal as PayPalClient;
1212

1313
class PaypalController extends Controller
1414
{
1515
use Paymentable;
1616

17-
protected PayPalClient $provider;
18-
19-
function __construct()
20-
{
21-
if (PaymentMethod::has('paypal')) {
22-
$this->provider = new PayPalClient;
23-
$this->provider->setApiCredentials(config('paypal'));
24-
$this->provider->getAccessToken();
25-
}
26-
}
27-
2817
public function token(Request $request)
2918
{
3019
$request->validate([
@@ -33,7 +22,7 @@ public function token(Request $request)
3322

3423
$order = Order::findByKey($request->key)->load('customer');
3524

36-
$response = $this->provider->createOrder([
25+
$response = Coderstm::paypal()->createOrder([
3726
"intent" => "CAPTURE",
3827
"purchase_units" => [
3928
[
@@ -57,7 +46,8 @@ public function token(Request $request)
5746
], 200);
5847
} else {
5948
return response()->json([
60-
'error' => $response['message'] ?? 'Something went wrong.'
49+
'response' => $response,
50+
'error' => $response['error']['message'] ?? 'Something went wrong.'
6151
], 500);
6252
}
6353
}
@@ -76,7 +66,7 @@ private function verifyPayment(Request $request): Order
7666
$orderable = $order->orderable;
7767

7868
try {
79-
$payment = $this->provider->capturePaymentOrder($orderID);
69+
$payment = Coderstm::paypal()->capturePaymentOrder($orderID);
8070

8171
if (isset($payment['status']) && $payment['status'] == 'COMPLETED') {
8272
$order->markAsPaid(PaymentMethod::paypal()->id, [

src/Http/Controllers/Payment/RazorpayController.php

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,18 @@
22

33
namespace Coderstm\Http\Controllers\Payment;
44

5+
use Coderstm\Coderstm;
56
use Illuminate\Support\Str;
67
use Illuminate\Http\Request;
78
use Coderstm\Models\Shop\Order;
89
use Coderstm\Traits\Paymentable;
9-
use Razorpay\Api\Api as Razorpay;
1010
use Coderstm\Models\PaymentMethod;
1111
use Coderstm\Http\Controllers\Controller;
1212

1313
class RazorpayController extends Controller
1414
{
1515
use Paymentable;
1616

17-
protected Razorpay $provider;
18-
19-
function __construct()
20-
{
21-
$this->provider = new Razorpay(config('razorpay.key_id'), config('razorpay.key_secret'));
22-
}
23-
2417
public function token(Request $request)
2518
{
2619
$request->validate([
@@ -29,7 +22,7 @@ public function token(Request $request)
2922

3023
$order = Order::findByKey($request->key)->load('customer');
3124

32-
$paymentIntent = $this->provider->order->create([
25+
$paymentIntent = Coderstm::razorpay()->order->create([
3326
'receipt' => $order->formated_id,
3427
'amount' => (int) $order->grand_total * 100,
3528
'currency' => Str::upper($order->currency),
@@ -61,14 +54,14 @@ private function verifyPayment(Request $request): Order
6154

6255
try {
6356
// Verify the signature
64-
$this->provider->utility->verifyPaymentSignature($request->only([
57+
Coderstm::razorpay()->utility->verifyPaymentSignature($request->only([
6558
'razorpay_signature',
6659
'razorpay_payment_id',
6760
'razorpay_order_id',
6861
]));
6962

7063
// Fetch the payment details
71-
$payment = $this->provider->payment->fetch($request->razorpay_payment_id);
64+
$payment = Coderstm::razorpay()->payment->fetch($request->razorpay_payment_id);
7265

7366
// Payment is successful, proceed with your business logic
7467
$order->markAsPaid(PaymentMethod::razorpay()->id, [

src/Models/PaymentMethod.php

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@
33
namespace Coderstm\Models;
44

55
use Coderstm\Traits\Core;
6-
use Illuminate\Database\Eloquent\Model;
6+
use Illuminate\Support\Str;
77
use Illuminate\Support\Facades\Cache;
88
use Illuminate\Support\Facades\Schema;
9+
use Illuminate\Database\Eloquent\Model;
910
use Illuminate\Database\Eloquent\Casts\Attribute;
1011

1112
class PaymentMethod extends Model
@@ -20,6 +21,7 @@ class PaymentMethod extends Model
2021
const DIRECT_DEBIT = 'direct_debit';
2122

2223
const CACHE_KEY = 'payment_methods_configurations';
24+
public static string $cacheKey = self::CACHE_KEY;
2325

2426
protected $fillable = [
2527
'name',
@@ -48,6 +50,11 @@ class PaymentMethod extends Model
4850
'options' => 'array',
4951
];
5052

53+
protected static function cacheKey(): string
54+
{
55+
return static::$cacheKey ?? static::CACHE_KEY;
56+
}
57+
5158
protected function label(): Attribute
5259
{
5360
return Attribute::make(
@@ -186,7 +193,7 @@ protected static function booted()
186193
public static function updateProviderCache(string $provider): void
187194
{
188195
// Get all cached configs
189-
$allConfigs = Cache::get(self::CACHE_KEY, []);
196+
$allConfigs = Cache::get(self::cacheKey(), []);
190197

191198
// Update or remove the specified provider
192199
$config = self::getProviderConfig($provider);
@@ -200,7 +207,7 @@ public static function updateProviderCache(string $provider): void
200207
}
201208

202209
// Store updated configs back to cache
203-
Cache::forever(self::CACHE_KEY, $allConfigs);
210+
Cache::forever(self::cacheKey(), $allConfigs);
204211
}
205212

206213
/**
@@ -282,7 +289,7 @@ public static function getProviderConfig(string $provider): ?array
282289
*/
283290
public static function applyProviderConfig(string $provider): void
284291
{
285-
$allConfigs = Cache::get(self::CACHE_KEY, []);
292+
$allConfigs = Cache::get(self::cacheKey(), []);
286293

287294
if (isset($allConfigs[$provider]) && !empty($allConfigs[$provider])) {
288295
config($allConfigs[$provider]);
@@ -320,7 +327,7 @@ public static function syncConfig(): void
320327
$providers = [self::STRIPE, self::PAYPAL, self::RAZORPAY, self::GOCARDLESS];
321328

322329
// Use rememberForever for efficient caching
323-
$configs = Cache::rememberForever(self::CACHE_KEY, function () use ($providers) {
330+
$configs = Cache::rememberForever(self::cacheKey(), function () use ($providers) {
324331
$allConfigs = [];
325332

326333
// Fetch all active payment methods in a single query
Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,31 @@
11
<?php //002cd
22
if(extension_loaded('ionCube Loader')){die('The file '.__FILE__." is corrupted.\n");}echo("\nScript error: the ".(($cli=(php_sapi_name()=='cli')) ?'ionCube':'<a href="https://www.ioncube.com">ionCube</a>')." Loader for PHP needs to be installed.\n\nThe ionCube Loader is the industry standard PHP extension for running protected PHP code,\nand can usually be added easily to a PHP installation.\n\nFor Loaders please visit".($cli?":\n\nhttps://get-loader.ioncube.com\n\nFor":' <a href="https://get-loader.ioncube.com">get-loader.ioncube.com</a> and for')." an instructional video please see".($cli?":\n\nhttp://ioncu.be/LV\n\n":' <a href="http://ioncu.be/LV">http://ioncu.be/LV</a> ')."\n\n");exit(199);
33
?>
4-
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
31-
vnGsgAjcXpWZSgKzz+jWAAtZaUqu
4+
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

0 commit comments

Comments
 (0)