PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 3.0.0-beta2
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v3.0.0-beta2
4.7.0 4.6.6 4.6.5 4.6.4 4.6.3 4.6.2 4.6.1 4.6.0 4.5.1 4.5.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
150 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
79 // we don't have a cached account.
80 if ( false === $this->account ) {
81 // fetch the account.
82 $this->account = $this->fetchAccount();
83
84 // there was an error or the account could not be fetched by other means.
85 if ( is_wp_error( $this->account ) || empty( $this->account->id ) ) {
86 // get the previously working account.
87 $previously_working_account = get_option( 'sc_previous_account' );
88
89 // if there was no previously working account, return the error.
90 if ( empty( $previously_working_account ) || empty( $previously_working_account->id ) ) {
91 // return the error.
92 return $this->account;
93 }
94
95 // set previously working account and don't try for 5 minutes.
96 set_transient( $this->cache_key, $previously_working_account, 5 * MINUTE_IN_SECONDS );
97
98 // return the account.
99 return $previously_working_account;
100 }
101
102 // store the previously working account in case we need a fallback.
103 update_option( 'sc_previous_account', $this->account );
104
105 // set the transient.
106 set_transient( $this->cache_key, $this->account, 15 * MINUTE_IN_SECONDS );
107 }
108
109 return $this->account;
110 }
111
112 /**
113 * Fetch the account.
114 *
115 * @return \SureCart\Models\Account
116 */
117 protected function fetchAccount() {
118 $this->account = Account::with( [ 'brand', 'brand.address', 'portal_protocol', 'tax_protocol', 'tax_protocol.address', 'subscription_protocol', 'shipping_protocol', 'affiliation_protocol' ] )->find();
119 return $this->account;
120 }
121
122 /**
123 * Clear account cache.
124 *
125 * @return boolean
126 */
127 public function clearCache() {
128 return delete_transient( $this->cache_key );
129 }
130
131 /**
132 * Is the account connected?
133 *
134 * @return boolean
135 */
136 public function isConnected() {
137 return ! empty( ApiToken::get() );
138 }
139
140 /**
141 * Get the account model attribute
142 *
143 * @param string $attribute Attribute name.
144 * @return mixed
145 */
146 public function __get( $attribute ) {
147 return $this->account->$attribute ?? null;
148 }
149 }
150