PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 2.13.0
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v2.13.0
4.4.2 4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 4.3.0 4.2.3 4.2.2 4.2.1 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.11.0 1.11.1 1.11.2 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.9.0 1.9.1 1.9.2 1.9.3 1.9.4 1.9.5 2.0.0 2.0.1 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.10.0 2.10.1 2.11.0 2.11.1 2.11.2 2.11.3 2.11.4 2.12.0 2.13.0 2.14.0 2.14.1 2.15.0 2.15.1 2.16.0 2.16.1 2.16.2 2.16.3 2.17.0 2.17.1 2.17.2 2.18.0 2.19.0 2.19.2 2.19.3 2.19.4 2.2.0 2.2.1 2.20.0 2.20.1 2.20.2 2.20.3 2.20.4 2.20.5 2.20.6 2.21.0 2.22.0 2.22.1 2.23.0 2.24.0 2.25.0 2.25.1 2.25.2 2.26.0 2.27.0 2.27.1 2.28.0 2.29.0 2.29.1 2.29.2 2.29.3 2.29.4 2.3.0 2.3.1 2.30.0 2.31.0 2.31.1 2.31.2 2.31.3 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.40.0 2.40.1 2.5.0 2.5.1 2.5.2 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.8.2 2.8.3 2.8.4 2.9.0 3.0.0 3.0.0-RC1 3.0.0-RC2 3.0.0-beta1 3.0.0-beta2 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.10.0 3.10.1 3.11.0 3.12.0 3.13.0 3.13.1 3.13.2 3.13.3 3.13.4 3.14.0 3.15.0 3.15.1 3.15.2 3.15.3 3.15.4 3.15.5 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.16.6 3.16.7 3.16.8 3.17.0 3.17.1 3.17.2 3.17.3 3.17.4 3.17.5 3.17.6 3.18.0 3.19.0 3.19.1 3.19.2 3.2.0 3.2.1 3.2.2 3.20.0 3.20.1 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.7.0 3.7.1 3.7.2 3.7.3 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 4.0.0 4.0.1 4.0.2 4.0.3 trunk 4.1.0 0.2.19.1 4.1.1 1.0.0 4.2.0 1.0.1 1.0.2
surecart / app / src / Account / AccountService.php
surecart / app / src / Account Last commit date
AccountService.php 2 years ago AccountServiceProvider.php 2 years ago
AccountService.php
132 lines
1 <?php
2 namespace SureCart\Account;
3
4 use SureCart\Models\Account;
5 use SureCart\Models\ApiToken;
6
7 /**
8 * Service for plugin activation.
9 */
10 class AccountService {
11 /**
12 * Holds the global account model.
13 *
14 * @var \SureCart\Models\Account;
15 */
16 protected $account = null;
17
18 /**
19 * The key for the cache.
20 *
21 * @var string
22 */
23 protected $cache_key = 'surecart_account';
24
25 /**
26 * Bootstrap the service.
27 *
28 * @return void
29 */
30 public function bootstrap() {
31 // clear account cache when account is updated.
32 \add_action( 'surecart/account_updated', [ $this, 'clearCache' ] );
33 }
34
35 /**
36 * We get the account when the service is loaded.
37 * Since this is loaded in a service container, its
38 * cached so it only fetches once, no matter how many calls.
39 *
40 * This is also cached in a 60 second transient to prevent
41 * rate limited calls to the API.
42 *
43 * @param \SureCart\Support\Server $server The server utility to use.
44 */
45 public function __construct( \SureCart\Support\Server $server ) {
46 $cache = null;
47
48 if ( defined( 'SURECART_CACHE_ACCOUNT' ) ) {
49 $cache = SURECART_CACHE_ACCOUNT;
50 }
51
52 // do not cache requests if specifically set to false.
53 if ( false === $cache ) {
54 return $this->fetchAccount();
55 }
56
57 // cache requests if specifically set to true.
58 if ( true === $cache ) {
59 return $this->fetchCachedAccount();
60 }
61
62 // don't cache on localhost if constant is not set.
63 if ( $server->isLocalHost() ) {
64 return $this->fetchAccount();
65 }
66
67 // cache requests if not explicitly set.
68 return $this->fetchCachedAccount();
69 }
70
71 /**
72 * Fetch the cached account.
73 *
74 * @return \SureCart\Models\Account
75 */
76 public function fetchCachedAccount() {
77 $this->account = get_transient( $this->cache_key );
78 if ( false === $this->account ) {
79 // fetch account.
80 $this->account = $this->fetchAccount();
81
82 // there was an error or the account could not be fetched by other means.
83 if ( is_wp_error( $this->account ) || empty( $this->account->id ) ) {
84 delete_transient( $this->cache_key );
85 return $this->account;
86 }
87
88 // set the transient.
89 set_transient( $this->cache_key, $this->account, 15 * MINUTE_IN_SECONDS );
90 }
91 return $this->account;
92 }
93
94 /**
95 * Fetch the account.
96 *
97 * @return \SureCart\Models\Account
98 */
99 protected function fetchAccount() {
100 $this->account = Account::with( [ 'brand', 'brand.address', 'portal_protocol', 'tax_protocol', 'tax_protocol.address', 'subscription_protocol', 'shipping_protocol', 'affiliation_protocol' ] )->find();
101 return $this->account;
102 }
103
104 /**
105 * Clear account cache.
106 *
107 * @return boolean
108 */
109 public function clearCache() {
110 return delete_transient( $this->cache_key );
111 }
112
113 /**
114 * Is the account connected?
115 *
116 * @return boolean
117 */
118 public function isConnected() {
119 return ! empty( ApiToken::get() );
120 }
121
122 /**
123 * Get the account model attribute
124 *
125 * @param string $attribute Attribute name.
126 * @return mixed
127 */
128 public function __get( $attribute ) {
129 return $this->account->$attribute ?? null;
130 }
131 }
132