PluginProbe
Moloni / trunk
Moloni vtrunk
5.0.10 5.0.09 5.0.08 5.0.07 5.0.06 trunk 0.4.0.00 0.4.8.1 3.0.10 3.0.11 3.0.35 3.0.36 3.0.37 3.0.38 3.0.40 3.0.41 3.0.42 3.0.43 3.0.44 3.0.45 3.0.46 3.0.47 3.0.48 3.0.49 3.0.50 All 98 releases
moloni / src / Model.php

Model.php in Moloni trunk, at src/Model.php

219 lines 6.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Moloni;
4
5 use Moloni\Services\Mails\AuthenticationExpired;
6
7 class Model
8 {
9 /**
10 * Return the row of moloni_api table with all the session details
11 * @return array|false
12 * @global $wpdb
13 */
14 public static function getTokensRow()
15 {
16 global $wpdb;
17 return $wpdb->get_row("SELECT * FROM " . $wpdb->get_blog_prefix() . "moloni_api ORDER BY id DESC", ARRAY_A);
18 }
19
20 /**
21 * Clear moloni_api and set new access and refresh token
22 *
23 * @param string $accessToken
24 * @param string $refreshToken
25 *
26 * @return true
27 *
28 * @global $wpdb
29 */
30 public static function setTokens($accessToken, $refreshToken)
31 {
32 global $wpdb;
33
34 $wpdb->query("TRUNCATE " . $wpdb->get_blog_prefix() . "moloni_api");
35 $wpdb->insert($wpdb->get_blog_prefix() . 'moloni_api', ['main_token' => $accessToken, 'refresh_token' => $refreshToken]);
36
37 return true;
38 }
39
40 /**
41 * Check if a setting exists on database and update it or create it
42 * @param string $option
43 * @param string $value
44 * @return int
45 * @global $wpdb
46 */
47 public static function setOption($option, $value)
48 {
49 global $wpdb;
50 $setting = $wpdb->get_row(
51 $wpdb->prepare(
52 "SELECT * FROM " . $wpdb->get_blog_prefix() . "moloni_api_config WHERE config = %s", $option
53 ), ARRAY_A);
54
55 if (!empty($setting)) {
56 $wpdb->update($wpdb->get_blog_prefix() . 'moloni_api_config', ['selected' => $value], ['config' => $option]);
57 } else {
58 $wpdb->insert($wpdb->get_blog_prefix() . 'moloni_api_config', ['selected' => $value, 'config' => $option]);
59 }
60
61 return $wpdb->insert_id;
62 }
63
64 /**
65 * Checks if tokens need to be refreshed and refreshes them
66 * If it fails, log user out
67 *
68 * @param int $retryNumber
69 *
70 * @return bool
71 *
72 * @global $wpdb
73 */
74 public static function refreshTokens($retryNumber = 0)
75 {
76 global $wpdb;
77 $tokensRow = self::getTokensRow();
78
79 $expire = false;
80
81 if (!array_key_exists("expiretime", $tokensRow)) {
82 $wpdb->query("ALTER TABLE " . $wpdb->get_blog_prefix() . "moloni_api ADD expiretime varchar(250)");
83 } else {
84 $expire = $tokensRow['expiretime'];
85 }
86
87 if (!$expire || $expire < time()) {
88 $results = Curl::refresh($tokensRow['refresh_token']);
89
90 if (isset($results['access_token'])) {
91 $wpdb->update($wpdb->get_blog_prefix() . "moloni_api", [
92 "main_token" => $results['access_token'],
93 "refresh_token" => $results['refresh_token'],
94 "expiretime" => time() + 3000
95 ], [
96 "id" => $tokensRow['id']
97 ]);
98 } else {
99 $recheckTokens = self::getTokensRow();
100
101 if (empty($recheckTokens) ||
102 empty($recheckTokens['main_token']) ||
103 empty($recheckTokens['refresh_token']) ||
104 $recheckTokens['main_token'] === $tokensRow['main_token'] ||
105 $recheckTokens['refresh_token'] === $tokensRow['refresh_token']) {
106
107 if ($retryNumber <= 3) {
108 $retryNumber++;
109
110 return self::refreshTokens($retryNumber);
111 }
112
113 // Send e-mail notification if email is set
114 if (defined('ALERT_EMAIL') && !empty(ALERT_EMAIL)) {
115 new AuthenticationExpired(ALERT_EMAIL);
116 }
117
118 Storage::$LOGGER->error(
119 str_replace('{0}', $retryNumber, __('A limpar as tokens depois de {0} tentativas.')),
120 [
121 'tag' => 'core:refreshTokens:error',
122 'request' => $recheckTokens,
123 ]
124 );
125
126 self::resetTokens();
127
128 return false;
129 }
130 }
131 }
132
133 return true;
134 }
135
136 /**
137 * Define constants from database
138 */
139 public static function defineValues(): void
140 {
141 $tokensRow = self::getTokensRow();
142
143 Storage::$MOLONI_SESSION_ID = $tokensRow['id'] ?? null;
144 Storage::$MOLONI_ACCESS_TOKEN = $tokensRow['main_token'] ?? null;
145 Storage::$MOLONI_COMPANY_ID = $tokensRow['company_id'] ?? null;
146 }
147
148 /**
149 * Define company selected settings
150 */
151 public static function defineConfigs(): void
152 {
153 global $wpdb;
154 $results = $wpdb->get_results("SELECT * FROM " . $wpdb->get_blog_prefix() . "moloni_api_config ORDER BY id DESC", ARRAY_A);
155
156 if (empty($results)) {
157 return;
158 }
159
160 foreach ($results as $result) {
161 $setting = strtoupper($result['config']);
162
163 if (!defined($setting)) {
164 define($setting, $result['selected']);
165 }
166 }
167 }
168
169 /**
170 * Get all available custom fields to use as vat field
171 *
172 * @return array
173 */
174 public static function getPossibleVatFields(): array
175 {
176 $customFields = [];
177 $args = [
178 'posts_per_page' => 50,
179 'orderby' => 'date',
180 'paginate' => false,
181 'order' => 'DESC',
182 'post_type' => 'shop_order'
183 ];
184
185 $orders = wc_get_orders($args);
186
187 if (empty($orders)) {
188 return $customFields;
189 }
190
191 foreach ($orders as $order) {
192 $metas = $order->get_meta_data();
193
194 if (empty($metas)) {
195 continue;
196 }
197
198 foreach ($metas as $meta) {
199 if (in_array($meta->key, $customFields)) {
200 continue;
201 }
202
203 $customFields[] = $meta->key;
204 }
205 }
206
207 return $customFields;
208 }
209
210 public static function resetTokens()
211 {
212 global $wpdb;
213
214 $wpdb->query("TRUNCATE " . $wpdb->get_blog_prefix() . "moloni_api");
215
216 return true;
217 }
218 }
219