@@ -11,165 +11,165 @@ |
||
11 | 11 | defined( 'ABSPATH' ) || exit; |
12 | 12 | |
13 | 13 | return array( |
14 | - 'USD' => __( 'US Dollar', 'invoicing' ), |
|
15 | - 'EUR' => __( 'Euro', 'invoicing' ), |
|
16 | - 'GBP' => __( 'Pound Sterling', 'invoicing' ), |
|
17 | - 'AED' => __( 'United Arab Emirates', 'invoicing' ), |
|
18 | - 'AFN' => __( 'Afghan Afghani', 'invoicing' ), |
|
19 | - 'ALL' => __( 'Albanian Lek', 'invoicing' ), |
|
20 | - 'AMD' => __( 'Armenian Dram', 'invoicing' ), |
|
21 | - 'ANG' => __( 'Netherlands Antillean Guilder', 'invoicing' ), |
|
22 | - 'AOA' => __( 'Angolan Kwanza', 'invoicing' ), |
|
23 | - 'ARS' => __( 'Argentine Peso', 'invoicing' ), |
|
24 | - 'AUD' => __( 'Australian Dollar', 'invoicing' ), |
|
25 | - 'AWG' => __( 'Aruban Florin', 'invoicing' ), |
|
26 | - 'AZN' => __( 'Azerbaijani Manat', 'invoicing' ), |
|
27 | - 'BAM' => __( 'Bosnia and Herzegovina Convertible Marka', 'invoicing' ), |
|
28 | - 'BBD' => __( 'Barbadian Dollar', 'invoicing' ), |
|
29 | - 'BDT' => __( 'Bangladeshi Taka', 'invoicing' ), |
|
30 | - 'BGN' => __( 'Bulgarian Lev', 'invoicing' ), |
|
31 | - 'BHD' => __( 'Bahraini Dinar', 'invoicing' ), |
|
32 | - 'BIF' => __( 'Burundian Franc', 'invoicing' ), |
|
33 | - 'BMD' => __( 'Bermudian Dollar', 'invoicing' ), |
|
34 | - 'BND' => __( 'Brunei Dollar', 'invoicing' ), |
|
35 | - 'BOB' => __( 'Bolivian Boliviano', 'invoicing' ), |
|
36 | - 'BRL' => __( 'Brazilian Real', 'invoicing' ), |
|
37 | - 'BSD' => __( 'Bahamian Dollar', 'invoicing' ), |
|
38 | - 'BTC' => __( 'Bitcoin', 'invoicing' ), |
|
39 | - 'BTN' => __( 'Bhutanese Ngultrum', 'invoicing' ), |
|
40 | - 'BWP' => __( 'Botswana Pula', 'invoicing' ), |
|
41 | - 'BYN' => __( 'Belarusian Ruble', 'invoicing' ), |
|
42 | - 'BZD' => __( 'Belize Dollar', 'invoicing' ), |
|
43 | - 'CAD' => __( 'Canadian Dollar', 'invoicing' ), |
|
44 | - 'CDF' => __( 'Congolese Franc', 'invoicing' ), |
|
45 | - 'CHF' => __( 'Swiss Franc', 'invoicing' ), |
|
46 | - 'CLP' => __( 'Chilean Peso', 'invoicing' ), |
|
47 | - 'CNY' => __( 'Chinese Yuan', 'invoicing' ), |
|
48 | - 'COP' => __( 'Colombian Peso', 'invoicing' ), |
|
49 | - 'CRC' => __( 'Costa Rican Colon', 'invoicing' ), |
|
50 | - 'CUC' => __( 'Cuban Convertible Peso', 'invoicing' ), |
|
51 | - 'CUP' => __( 'Cuban Peso', 'invoicing' ), |
|
52 | - 'CVE' => __( 'Cape Verdean escudo', 'invoicing' ), |
|
53 | - 'CZK' => __( 'Czech Koruna', 'invoicing' ), |
|
54 | - 'DJF' => __( 'Djiboutian Franc', 'invoicing' ), |
|
55 | - 'DKK' => __( 'Danish Krone', 'invoicing' ), |
|
56 | - 'DOP' => __( 'Dominican Peso', 'invoicing' ), |
|
57 | - 'DZD' => __( 'Algerian Dinar', 'invoicing' ), |
|
58 | - 'EGP' => __( 'Egyptian Pound', 'invoicing' ), |
|
59 | - 'ERN' => __( 'Eritrean Nakfa', 'invoicing' ), |
|
60 | - 'ETB' => __( 'Ethiopian Irr', 'invoicing' ), |
|
61 | - 'FJD' => __( 'Fijian Dollar', 'invoicing' ), |
|
62 | - 'FKP' => __( 'Falkland Islands Pound', 'invoicing' ), |
|
63 | - 'GEL' => __( 'Georgian Lari', 'invoicing' ), |
|
64 | - 'GGP' => __( 'Guernsey Pound', 'invoicing' ), |
|
65 | - 'GHS' => __( 'Ghana Cedi', 'invoicing' ), |
|
66 | - 'GIP' => __( 'Gibraltar Pound', 'invoicing' ), |
|
67 | - 'GMD' => __( 'Gambian Dalasi', 'invoicing' ), |
|
68 | - 'GNF' => __( 'Guinean Franc', 'invoicing' ), |
|
69 | - 'GTQ' => __( 'Guatemalan Quetzal', 'invoicing' ), |
|
70 | - 'GYD' => __( 'Guyanese Dollar', 'invoicing' ), |
|
71 | - 'HKD' => __( 'Hong Kong Dollar', 'invoicing' ), |
|
72 | - 'HNL' => __( 'Honduran Lempira', 'invoicing' ), |
|
73 | - 'HRK' => __( 'Croatian Kuna', 'invoicing' ), |
|
74 | - 'HTG' => __( 'Haitian Gourde', 'invoicing' ), |
|
75 | - 'HUF' => __( 'Hungarian Forint', 'invoicing' ), |
|
76 | - 'IDR' => __( 'Indonesian Rupiah', 'invoicing' ), |
|
77 | - 'ILS' => __( 'Israeli New Shekel', 'invoicing' ), |
|
78 | - 'IMP' => __( 'Manx Pound', 'invoicing' ), |
|
79 | - 'INR' => __( 'Indian Rupee', 'invoicing' ), |
|
80 | - 'IQD' => __( 'Iraqi Dinar', 'invoicing' ), |
|
81 | - 'IRR' => __( 'Iranian Rial', 'invoicing' ), |
|
82 | - 'IRT' => __( 'Iranian Toman', 'invoicing' ), |
|
83 | - 'ISK' => __( 'Icelandic Krona', 'invoicing' ), |
|
84 | - 'JEP' => __( 'Jersey Pound', 'invoicing' ), |
|
85 | - 'JMD' => __( 'Jamaican Dollar', 'invoicing' ), |
|
86 | - 'JOD' => __( 'Jordanian Dinar', 'invoicing' ), |
|
87 | - 'JPY' => __( 'Japanese Yen', 'invoicing' ), |
|
88 | - 'KES' => __( 'Kenyan Shilling', 'invoicing' ), |
|
89 | - 'KGS' => __( 'Kyrgyzstani Som', 'invoicing' ), |
|
90 | - 'KHR' => __( 'Cambodian Riel', 'invoicing' ), |
|
91 | - 'KMF' => __( 'Comorian Franc', 'invoicing' ), |
|
92 | - 'KPW' => __( 'North Korean Won', 'invoicing' ), |
|
93 | - 'KRW' => __( 'South Korean Won', 'invoicing' ), |
|
94 | - 'KWD' => __( 'Kuwaiti Dinar', 'invoicing' ), |
|
95 | - 'KYD' => __( 'Cayman Islands Dollar', 'invoicing' ), |
|
96 | - 'KZT' => __( 'Kazakhstani Tenge', 'invoicing' ), |
|
97 | - 'LAK' => __( 'Lao Kip', 'invoicing' ), |
|
98 | - 'LBP' => __( 'Lebanese Pound', 'invoicing' ), |
|
99 | - 'LKR' => __( 'Sri Lankan Rupee', 'invoicing' ), |
|
100 | - 'LRD' => __( 'Liberian Dollar', 'invoicing' ), |
|
101 | - 'LSL' => __( 'Lesotho Loti', 'invoicing' ), |
|
102 | - 'LYD' => __( 'Libyan Dinar', 'invoicing' ), |
|
103 | - 'MAD' => __( 'Moroccan Dirham', 'invoicing' ), |
|
104 | - 'MDL' => __( 'Moldovan Leu', 'invoicing' ), |
|
105 | - 'MGA' => __( 'Malagasy Ariary', 'invoicing' ), |
|
106 | - 'MKD' => __( 'Macedonian Denar', 'invoicing' ), |
|
107 | - 'MMK' => __( 'Burmese Kyat', 'invoicing' ), |
|
108 | - 'MNT' => __( 'Mongolian Tughrik', 'invoicing' ), |
|
109 | - 'MOP' => __( 'Macanese Pataca', 'invoicing' ), |
|
110 | - 'MRO' => __( 'Mauritanian Ouguiya', 'invoicing' ), |
|
111 | - 'MUR' => __( 'Mauritian Rupee', 'invoicing' ), |
|
112 | - 'MVR' => __( 'Maldivian Rufiyaa', 'invoicing' ), |
|
113 | - 'MWK' => __( 'Malawian Kwacha', 'invoicing' ), |
|
114 | - 'MXN' => __( 'Mexican Peso', 'invoicing' ), |
|
115 | - 'MYR' => __( 'Malaysian Ringgit', 'invoicing' ), |
|
116 | - 'MZN' => __( 'Mozambican Metical', 'invoicing' ), |
|
117 | - 'NAD' => __( 'Namibian Dollar', 'invoicing' ), |
|
118 | - 'NGN' => __( 'Nigerian Naira', 'invoicing' ), |
|
119 | - 'NIO' => __( 'Nicaraguan Cordoba', 'invoicing' ), |
|
120 | - 'NOK' => __( 'Norwegian Krone', 'invoicing' ), |
|
121 | - 'NPR' => __( 'Nepalese Rupee', 'invoicing' ), |
|
122 | - 'NZD' => __( 'New Zealand Dollar', 'invoicing' ), |
|
123 | - 'OMR' => __( 'Omani Rial', 'invoicing' ), |
|
124 | - 'PAB' => __( 'Panamanian Balboa', 'invoicing' ), |
|
125 | - 'PEN' => __( 'Peruvian Nuevo Sol', 'invoicing' ), |
|
126 | - 'PGK' => __( 'Papua New Guinean Kina', 'invoicing' ), |
|
127 | - 'PHP' => __( 'Philippine Peso', 'invoicing' ), |
|
128 | - 'PKR' => __( 'Pakistani Rupee', 'invoicing' ), |
|
129 | - 'PLN' => __( 'Polish Zloty', 'invoicing' ), |
|
130 | - 'PRB' => __( 'Transnistrian Ruble', 'invoicing' ), |
|
131 | - 'PYG' => __( 'Paraguayan Guarani', 'invoicing' ), |
|
132 | - 'QAR' => __( 'Qatari Riyal', 'invoicing' ), |
|
133 | - 'RON' => __( 'Romanian Leu', 'invoicing' ), |
|
134 | - 'RSD' => __( 'Serbian Dinar', 'invoicing' ), |
|
135 | - 'RUB' => __( 'Russian Ruble', 'invoicing' ), |
|
136 | - 'RWF' => __( 'Rwandan Franc', 'invoicing' ), |
|
137 | - 'SAR' => __( 'Saudi Riyal', 'invoicing' ), |
|
138 | - 'SBD' => __( 'Solomon Islands Dollar', 'invoicing' ), |
|
139 | - 'SCR' => __( 'Seychellois Rupee', 'invoicing' ), |
|
140 | - 'SDG' => __( 'Sudanese Pound', 'invoicing' ), |
|
141 | - 'SEK' => __( 'Swedish Krona', 'invoicing' ), |
|
142 | - 'SGD' => __( 'Singapore Dollar', 'invoicing' ), |
|
143 | - 'SHP' => __( 'Saint Helena Pound', 'invoicing' ), |
|
144 | - 'SLL' => __( 'Sierra Leonean Leone', 'invoicing' ), |
|
145 | - 'SOS' => __( 'Somali Shilling', 'invoicing' ), |
|
146 | - 'SRD' => __( 'Surinamese Dollar', 'invoicing' ), |
|
147 | - 'SSP' => __( 'South Sudanese Pound', 'invoicing' ), |
|
148 | - 'STD' => __( 'Sao Tomean Dobra', 'invoicing' ), |
|
149 | - 'SYP' => __( 'Syrian Pound', 'invoicing' ), |
|
150 | - 'SZL' => __( 'Swazi Lilangeni', 'invoicing' ), |
|
151 | - 'THB' => __( 'Thai Baht', 'invoicing' ), |
|
152 | - 'TJS' => __( 'Tajikistani Somoni', 'invoicing' ), |
|
153 | - 'TMT' => __( 'Turkmenistan Manat', 'invoicing' ), |
|
154 | - 'TND' => __( 'Tunisian Dinar', 'invoicing' ), |
|
155 | - 'TOP' => __( 'Tongan Paʻanga', 'invoicing' ), |
|
156 | - 'TRY' => __( 'Turkish Lira', 'invoicing' ), |
|
157 | - 'TTD' => __( 'Trinidad and Tobago Dollar', 'invoicing' ), |
|
158 | - 'TWD' => __( 'New Taiwan Dollar', 'invoicing' ), |
|
159 | - 'TZS' => __( 'Tanzanian Shilling', 'invoicing' ), |
|
160 | - 'UAH' => __( 'Ukrainian Hryvnia', 'invoicing' ), |
|
161 | - 'UGX' => __( 'Ugandan Shilling', 'invoicing' ), |
|
162 | - 'UYU' => __( 'Uruguayan Peso', 'invoicing' ), |
|
163 | - 'UZS' => __( 'Uzbekistani Som', 'invoicing' ), |
|
164 | - 'VEF' => __( 'Venezuelan Bolívar', 'invoicing' ), |
|
165 | - 'VND' => __( 'Vietnamese Dong', 'invoicing' ), |
|
166 | - 'VUV' => __( 'Vanuatu Vatu', 'invoicing' ), |
|
167 | - 'WST' => __( 'Samoan Tala', 'invoicing' ), |
|
168 | - 'XAF' => __( 'Central African CFA Franc', 'invoicing' ), |
|
169 | - 'XCD' => __( 'East Caribbean Dollar', 'invoicing' ), |
|
170 | - 'XOF' => __( 'West African CFA Franc', 'invoicing' ), |
|
171 | - 'XPF' => __( 'CFP Franc', 'invoicing' ), |
|
172 | - 'YER' => __( 'Yemeni Rial', 'invoicing' ), |
|
173 | - 'ZAR' => __( 'South African Rand', 'invoicing' ), |
|
174 | - 'ZMW' => __( 'Zambian Kwacha', 'invoicing' ), |
|
14 | + 'USD' => __( 'US Dollar', 'invoicing' ), |
|
15 | + 'EUR' => __( 'Euro', 'invoicing' ), |
|
16 | + 'GBP' => __( 'Pound Sterling', 'invoicing' ), |
|
17 | + 'AED' => __( 'United Arab Emirates', 'invoicing' ), |
|
18 | + 'AFN' => __( 'Afghan Afghani', 'invoicing' ), |
|
19 | + 'ALL' => __( 'Albanian Lek', 'invoicing' ), |
|
20 | + 'AMD' => __( 'Armenian Dram', 'invoicing' ), |
|
21 | + 'ANG' => __( 'Netherlands Antillean Guilder', 'invoicing' ), |
|
22 | + 'AOA' => __( 'Angolan Kwanza', 'invoicing' ), |
|
23 | + 'ARS' => __( 'Argentine Peso', 'invoicing' ), |
|
24 | + 'AUD' => __( 'Australian Dollar', 'invoicing' ), |
|
25 | + 'AWG' => __( 'Aruban Florin', 'invoicing' ), |
|
26 | + 'AZN' => __( 'Azerbaijani Manat', 'invoicing' ), |
|
27 | + 'BAM' => __( 'Bosnia and Herzegovina Convertible Marka', 'invoicing' ), |
|
28 | + 'BBD' => __( 'Barbadian Dollar', 'invoicing' ), |
|
29 | + 'BDT' => __( 'Bangladeshi Taka', 'invoicing' ), |
|
30 | + 'BGN' => __( 'Bulgarian Lev', 'invoicing' ), |
|
31 | + 'BHD' => __( 'Bahraini Dinar', 'invoicing' ), |
|
32 | + 'BIF' => __( 'Burundian Franc', 'invoicing' ), |
|
33 | + 'BMD' => __( 'Bermudian Dollar', 'invoicing' ), |
|
34 | + 'BND' => __( 'Brunei Dollar', 'invoicing' ), |
|
35 | + 'BOB' => __( 'Bolivian Boliviano', 'invoicing' ), |
|
36 | + 'BRL' => __( 'Brazilian Real', 'invoicing' ), |
|
37 | + 'BSD' => __( 'Bahamian Dollar', 'invoicing' ), |
|
38 | + 'BTC' => __( 'Bitcoin', 'invoicing' ), |
|
39 | + 'BTN' => __( 'Bhutanese Ngultrum', 'invoicing' ), |
|
40 | + 'BWP' => __( 'Botswana Pula', 'invoicing' ), |
|
41 | + 'BYN' => __( 'Belarusian Ruble', 'invoicing' ), |
|
42 | + 'BZD' => __( 'Belize Dollar', 'invoicing' ), |
|
43 | + 'CAD' => __( 'Canadian Dollar', 'invoicing' ), |
|
44 | + 'CDF' => __( 'Congolese Franc', 'invoicing' ), |
|
45 | + 'CHF' => __( 'Swiss Franc', 'invoicing' ), |
|
46 | + 'CLP' => __( 'Chilean Peso', 'invoicing' ), |
|
47 | + 'CNY' => __( 'Chinese Yuan', 'invoicing' ), |
|
48 | + 'COP' => __( 'Colombian Peso', 'invoicing' ), |
|
49 | + 'CRC' => __( 'Costa Rican Colon', 'invoicing' ), |
|
50 | + 'CUC' => __( 'Cuban Convertible Peso', 'invoicing' ), |
|
51 | + 'CUP' => __( 'Cuban Peso', 'invoicing' ), |
|
52 | + 'CVE' => __( 'Cape Verdean escudo', 'invoicing' ), |
|
53 | + 'CZK' => __( 'Czech Koruna', 'invoicing' ), |
|
54 | + 'DJF' => __( 'Djiboutian Franc', 'invoicing' ), |
|
55 | + 'DKK' => __( 'Danish Krone', 'invoicing' ), |
|
56 | + 'DOP' => __( 'Dominican Peso', 'invoicing' ), |
|
57 | + 'DZD' => __( 'Algerian Dinar', 'invoicing' ), |
|
58 | + 'EGP' => __( 'Egyptian Pound', 'invoicing' ), |
|
59 | + 'ERN' => __( 'Eritrean Nakfa', 'invoicing' ), |
|
60 | + 'ETB' => __( 'Ethiopian Irr', 'invoicing' ), |
|
61 | + 'FJD' => __( 'Fijian Dollar', 'invoicing' ), |
|
62 | + 'FKP' => __( 'Falkland Islands Pound', 'invoicing' ), |
|
63 | + 'GEL' => __( 'Georgian Lari', 'invoicing' ), |
|
64 | + 'GGP' => __( 'Guernsey Pound', 'invoicing' ), |
|
65 | + 'GHS' => __( 'Ghana Cedi', 'invoicing' ), |
|
66 | + 'GIP' => __( 'Gibraltar Pound', 'invoicing' ), |
|
67 | + 'GMD' => __( 'Gambian Dalasi', 'invoicing' ), |
|
68 | + 'GNF' => __( 'Guinean Franc', 'invoicing' ), |
|
69 | + 'GTQ' => __( 'Guatemalan Quetzal', 'invoicing' ), |
|
70 | + 'GYD' => __( 'Guyanese Dollar', 'invoicing' ), |
|
71 | + 'HKD' => __( 'Hong Kong Dollar', 'invoicing' ), |
|
72 | + 'HNL' => __( 'Honduran Lempira', 'invoicing' ), |
|
73 | + 'HRK' => __( 'Croatian Kuna', 'invoicing' ), |
|
74 | + 'HTG' => __( 'Haitian Gourde', 'invoicing' ), |
|
75 | + 'HUF' => __( 'Hungarian Forint', 'invoicing' ), |
|
76 | + 'IDR' => __( 'Indonesian Rupiah', 'invoicing' ), |
|
77 | + 'ILS' => __( 'Israeli New Shekel', 'invoicing' ), |
|
78 | + 'IMP' => __( 'Manx Pound', 'invoicing' ), |
|
79 | + 'INR' => __( 'Indian Rupee', 'invoicing' ), |
|
80 | + 'IQD' => __( 'Iraqi Dinar', 'invoicing' ), |
|
81 | + 'IRR' => __( 'Iranian Rial', 'invoicing' ), |
|
82 | + 'IRT' => __( 'Iranian Toman', 'invoicing' ), |
|
83 | + 'ISK' => __( 'Icelandic Krona', 'invoicing' ), |
|
84 | + 'JEP' => __( 'Jersey Pound', 'invoicing' ), |
|
85 | + 'JMD' => __( 'Jamaican Dollar', 'invoicing' ), |
|
86 | + 'JOD' => __( 'Jordanian Dinar', 'invoicing' ), |
|
87 | + 'JPY' => __( 'Japanese Yen', 'invoicing' ), |
|
88 | + 'KES' => __( 'Kenyan Shilling', 'invoicing' ), |
|
89 | + 'KGS' => __( 'Kyrgyzstani Som', 'invoicing' ), |
|
90 | + 'KHR' => __( 'Cambodian Riel', 'invoicing' ), |
|
91 | + 'KMF' => __( 'Comorian Franc', 'invoicing' ), |
|
92 | + 'KPW' => __( 'North Korean Won', 'invoicing' ), |
|
93 | + 'KRW' => __( 'South Korean Won', 'invoicing' ), |
|
94 | + 'KWD' => __( 'Kuwaiti Dinar', 'invoicing' ), |
|
95 | + 'KYD' => __( 'Cayman Islands Dollar', 'invoicing' ), |
|
96 | + 'KZT' => __( 'Kazakhstani Tenge', 'invoicing' ), |
|
97 | + 'LAK' => __( 'Lao Kip', 'invoicing' ), |
|
98 | + 'LBP' => __( 'Lebanese Pound', 'invoicing' ), |
|
99 | + 'LKR' => __( 'Sri Lankan Rupee', 'invoicing' ), |
|
100 | + 'LRD' => __( 'Liberian Dollar', 'invoicing' ), |
|
101 | + 'LSL' => __( 'Lesotho Loti', 'invoicing' ), |
|
102 | + 'LYD' => __( 'Libyan Dinar', 'invoicing' ), |
|
103 | + 'MAD' => __( 'Moroccan Dirham', 'invoicing' ), |
|
104 | + 'MDL' => __( 'Moldovan Leu', 'invoicing' ), |
|
105 | + 'MGA' => __( 'Malagasy Ariary', 'invoicing' ), |
|
106 | + 'MKD' => __( 'Macedonian Denar', 'invoicing' ), |
|
107 | + 'MMK' => __( 'Burmese Kyat', 'invoicing' ), |
|
108 | + 'MNT' => __( 'Mongolian Tughrik', 'invoicing' ), |
|
109 | + 'MOP' => __( 'Macanese Pataca', 'invoicing' ), |
|
110 | + 'MRO' => __( 'Mauritanian Ouguiya', 'invoicing' ), |
|
111 | + 'MUR' => __( 'Mauritian Rupee', 'invoicing' ), |
|
112 | + 'MVR' => __( 'Maldivian Rufiyaa', 'invoicing' ), |
|
113 | + 'MWK' => __( 'Malawian Kwacha', 'invoicing' ), |
|
114 | + 'MXN' => __( 'Mexican Peso', 'invoicing' ), |
|
115 | + 'MYR' => __( 'Malaysian Ringgit', 'invoicing' ), |
|
116 | + 'MZN' => __( 'Mozambican Metical', 'invoicing' ), |
|
117 | + 'NAD' => __( 'Namibian Dollar', 'invoicing' ), |
|
118 | + 'NGN' => __( 'Nigerian Naira', 'invoicing' ), |
|
119 | + 'NIO' => __( 'Nicaraguan Cordoba', 'invoicing' ), |
|
120 | + 'NOK' => __( 'Norwegian Krone', 'invoicing' ), |
|
121 | + 'NPR' => __( 'Nepalese Rupee', 'invoicing' ), |
|
122 | + 'NZD' => __( 'New Zealand Dollar', 'invoicing' ), |
|
123 | + 'OMR' => __( 'Omani Rial', 'invoicing' ), |
|
124 | + 'PAB' => __( 'Panamanian Balboa', 'invoicing' ), |
|
125 | + 'PEN' => __( 'Peruvian Nuevo Sol', 'invoicing' ), |
|
126 | + 'PGK' => __( 'Papua New Guinean Kina', 'invoicing' ), |
|
127 | + 'PHP' => __( 'Philippine Peso', 'invoicing' ), |
|
128 | + 'PKR' => __( 'Pakistani Rupee', 'invoicing' ), |
|
129 | + 'PLN' => __( 'Polish Zloty', 'invoicing' ), |
|
130 | + 'PRB' => __( 'Transnistrian Ruble', 'invoicing' ), |
|
131 | + 'PYG' => __( 'Paraguayan Guarani', 'invoicing' ), |
|
132 | + 'QAR' => __( 'Qatari Riyal', 'invoicing' ), |
|
133 | + 'RON' => __( 'Romanian Leu', 'invoicing' ), |
|
134 | + 'RSD' => __( 'Serbian Dinar', 'invoicing' ), |
|
135 | + 'RUB' => __( 'Russian Ruble', 'invoicing' ), |
|
136 | + 'RWF' => __( 'Rwandan Franc', 'invoicing' ), |
|
137 | + 'SAR' => __( 'Saudi Riyal', 'invoicing' ), |
|
138 | + 'SBD' => __( 'Solomon Islands Dollar', 'invoicing' ), |
|
139 | + 'SCR' => __( 'Seychellois Rupee', 'invoicing' ), |
|
140 | + 'SDG' => __( 'Sudanese Pound', 'invoicing' ), |
|
141 | + 'SEK' => __( 'Swedish Krona', 'invoicing' ), |
|
142 | + 'SGD' => __( 'Singapore Dollar', 'invoicing' ), |
|
143 | + 'SHP' => __( 'Saint Helena Pound', 'invoicing' ), |
|
144 | + 'SLL' => __( 'Sierra Leonean Leone', 'invoicing' ), |
|
145 | + 'SOS' => __( 'Somali Shilling', 'invoicing' ), |
|
146 | + 'SRD' => __( 'Surinamese Dollar', 'invoicing' ), |
|
147 | + 'SSP' => __( 'South Sudanese Pound', 'invoicing' ), |
|
148 | + 'STD' => __( 'Sao Tomean Dobra', 'invoicing' ), |
|
149 | + 'SYP' => __( 'Syrian Pound', 'invoicing' ), |
|
150 | + 'SZL' => __( 'Swazi Lilangeni', 'invoicing' ), |
|
151 | + 'THB' => __( 'Thai Baht', 'invoicing' ), |
|
152 | + 'TJS' => __( 'Tajikistani Somoni', 'invoicing' ), |
|
153 | + 'TMT' => __( 'Turkmenistan Manat', 'invoicing' ), |
|
154 | + 'TND' => __( 'Tunisian Dinar', 'invoicing' ), |
|
155 | + 'TOP' => __( 'Tongan Paʻanga', 'invoicing' ), |
|
156 | + 'TRY' => __( 'Turkish Lira', 'invoicing' ), |
|
157 | + 'TTD' => __( 'Trinidad and Tobago Dollar', 'invoicing' ), |
|
158 | + 'TWD' => __( 'New Taiwan Dollar', 'invoicing' ), |
|
159 | + 'TZS' => __( 'Tanzanian Shilling', 'invoicing' ), |
|
160 | + 'UAH' => __( 'Ukrainian Hryvnia', 'invoicing' ), |
|
161 | + 'UGX' => __( 'Ugandan Shilling', 'invoicing' ), |
|
162 | + 'UYU' => __( 'Uruguayan Peso', 'invoicing' ), |
|
163 | + 'UZS' => __( 'Uzbekistani Som', 'invoicing' ), |
|
164 | + 'VEF' => __( 'Venezuelan Bolívar', 'invoicing' ), |
|
165 | + 'VND' => __( 'Vietnamese Dong', 'invoicing' ), |
|
166 | + 'VUV' => __( 'Vanuatu Vatu', 'invoicing' ), |
|
167 | + 'WST' => __( 'Samoan Tala', 'invoicing' ), |
|
168 | + 'XAF' => __( 'Central African CFA Franc', 'invoicing' ), |
|
169 | + 'XCD' => __( 'East Caribbean Dollar', 'invoicing' ), |
|
170 | + 'XOF' => __( 'West African CFA Franc', 'invoicing' ), |
|
171 | + 'XPF' => __( 'CFP Franc', 'invoicing' ), |
|
172 | + 'YER' => __( 'Yemeni Rial', 'invoicing' ), |
|
173 | + 'ZAR' => __( 'South African Rand', 'invoicing' ), |
|
174 | + 'ZMW' => __( 'Zambian Kwacha', 'invoicing' ), |
|
175 | 175 | ); |
@@ -1,7 +1,7 @@ |
||
1 | 1 | <?php |
2 | 2 | |
3 | 3 | if ( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) { |
4 | - exit; |
|
4 | + exit; |
|
5 | 5 | } |
6 | 6 | |
7 | 7 | global $wpdb; |
@@ -11,186 +11,186 @@ |
||
11 | 11 | */ |
12 | 12 | class GetPaid_Data_Store { |
13 | 13 | |
14 | - /** |
|
15 | - * Contains an instance of the data store class that we are working with. |
|
16 | - * |
|
17 | - * @var GetPaid_Data_Store |
|
18 | - */ |
|
19 | - private $instance = null; |
|
20 | - |
|
21 | - /** |
|
22 | - * Contains an array of default supported data stores. |
|
23 | - * Format of object name => class name. |
|
24 | - * Example: 'item' => 'GetPaid_Item_Data_Store' |
|
25 | - * You can also pass something like item-<type> for item stores and |
|
26 | - * that type will be used first when available, if a store is requested like |
|
27 | - * this and doesn't exist, then the store would fall back to 'item'. |
|
28 | - * Ran through `getpaid_data_stores`. |
|
29 | - * |
|
30 | - * @var array |
|
31 | - */ |
|
32 | - private $stores = array( |
|
33 | - 'item' => 'GetPaid_Item_Data_Store', |
|
34 | - 'payment_form' => 'GetPaid_Payment_Form_Data_Store', |
|
35 | - 'discount' => 'GetPaid_Discount_Data_Store', |
|
36 | - 'invoice' => 'GetPaid_Invoice_Data_Store', |
|
37 | - 'subscription' => 'GetPaid_Subscription_Data_Store', |
|
38 | - ); |
|
39 | - |
|
40 | - /** |
|
41 | - * Contains the name of the current data store's class name. |
|
42 | - * |
|
43 | - * @var string |
|
44 | - */ |
|
45 | - private $current_class_name = ''; |
|
46 | - |
|
47 | - /** |
|
48 | - * The object type this store works with. |
|
49 | - * |
|
50 | - * @var string |
|
51 | - */ |
|
52 | - private $object_type = ''; |
|
53 | - |
|
54 | - /** |
|
55 | - * Tells GetPaid_Data_Store which object |
|
56 | - * store we want to work with. |
|
57 | - * |
|
58 | - * @param string $object_type Name of object. |
|
59 | - */ |
|
60 | - public function __construct( $object_type ) { |
|
61 | - $this->object_type = $object_type; |
|
62 | - $this->stores = apply_filters( 'getpaid_data_stores', $this->stores ); |
|
63 | - |
|
64 | - // If this object type can't be found, check to see if we can load one |
|
65 | - // level up (so if item-type isn't found, we try item). |
|
66 | - if ( ! array_key_exists( $object_type, $this->stores ) ) { |
|
67 | - $pieces = explode( '-', $object_type ); |
|
68 | - $object_type = $pieces[0]; |
|
69 | - } |
|
70 | - |
|
71 | - if ( array_key_exists( $object_type, $this->stores ) ) { |
|
72 | - $store = apply_filters( 'getpaid_' . $object_type . '_data_store', $this->stores[ $object_type ] ); |
|
73 | - if ( is_object( $store ) ) { |
|
74 | - $this->current_class_name = get_class( $store ); |
|
75 | - $this->instance = $store; |
|
76 | - } else { |
|
77 | - if ( ! class_exists( $store ) ) { |
|
78 | - throw new Exception( __( 'Data store class does not exist.', 'invoicing' ) ); |
|
79 | - } |
|
80 | - $this->current_class_name = $store; |
|
81 | - $this->instance = new $store(); |
|
82 | - } |
|
83 | - } else { |
|
84 | - throw new Exception( __( 'Invalid data store.', 'invoicing' ) ); |
|
85 | - } |
|
86 | - } |
|
87 | - |
|
88 | - /** |
|
89 | - * Only store the object type to avoid serializing the data store instance. |
|
90 | - * |
|
91 | - * @return array |
|
92 | - */ |
|
93 | - public function __sleep() { |
|
94 | - return array( 'object_type' ); |
|
95 | - } |
|
96 | - |
|
97 | - /** |
|
98 | - * Re-run the constructor with the object type. |
|
99 | - * |
|
100 | - * @throws Exception When validation fails. |
|
101 | - */ |
|
102 | - public function __wakeup() { |
|
103 | - $this->__construct( $this->object_type ); |
|
104 | - } |
|
105 | - |
|
106 | - /** |
|
107 | - * Loads a data store. |
|
108 | - * |
|
109 | - * @param string $object_type Name of object. |
|
110 | - * |
|
111 | - * @since 1.0.19 |
|
112 | - * @throws Exception When validation fails. |
|
113 | - * @return GetPaid_Data_Store |
|
114 | - */ |
|
115 | - public static function load( $object_type ) { |
|
116 | - return new GetPaid_Data_Store( $object_type ); |
|
117 | - } |
|
118 | - |
|
119 | - /** |
|
120 | - * Returns the class name of the current data store. |
|
121 | - * |
|
122 | - * @since 1.0.19 |
|
123 | - * @return string |
|
124 | - */ |
|
125 | - public function get_current_class_name() { |
|
126 | - return $this->current_class_name; |
|
127 | - } |
|
128 | - |
|
129 | - /** |
|
130 | - * Returns the object type of the current data store. |
|
131 | - * |
|
132 | - * @since 1.0.19 |
|
133 | - * @return string |
|
134 | - */ |
|
135 | - public function get_object_type() { |
|
136 | - return $this->object_type; |
|
137 | - } |
|
138 | - |
|
139 | - /** |
|
140 | - * Reads an object from the data store. |
|
141 | - * |
|
142 | - * @since 1.0.19 |
|
143 | - * @param GetPaid_Data $data GetPaid data instance. |
|
144 | - */ |
|
145 | - public function read( &$data ) { |
|
146 | - $this->instance->read( $data ); |
|
147 | - } |
|
148 | - |
|
149 | - /** |
|
150 | - * Create an object in the data store. |
|
151 | - * |
|
152 | - * @since 1.0.19 |
|
153 | - * @param GetPaid_Data $data GetPaid data instance. |
|
154 | - */ |
|
155 | - public function create( &$data ) { |
|
156 | - $this->instance->create( $data ); |
|
157 | - } |
|
158 | - |
|
159 | - /** |
|
160 | - * Update an object in the data store. |
|
161 | - * |
|
162 | - * @since 1.0.19 |
|
163 | - * @param GetPaid_Data $data GetPaid data instance. |
|
164 | - */ |
|
165 | - public function update( &$data ) { |
|
166 | - $this->instance->update( $data ); |
|
167 | - } |
|
168 | - |
|
169 | - /** |
|
170 | - * Delete an object from the data store. |
|
171 | - * |
|
172 | - * @since 1.0.19 |
|
173 | - * @param GetPaid_Data $data GetPaid data instance. |
|
174 | - * @param array $args Array of args to pass to the delete method. |
|
175 | - */ |
|
176 | - public function delete( &$data, $args = array() ) { |
|
177 | - $this->instance->delete( $data, $args ); |
|
178 | - } |
|
179 | - |
|
180 | - /** |
|
181 | - * Data stores can define additional function. This passes |
|
182 | - * through to the instance if that function exists. |
|
183 | - * |
|
184 | - * @since 1.0.19 |
|
185 | - * @param string $method Method. |
|
186 | - * @return mixed |
|
187 | - */ |
|
188 | - public function __call( $method, $parameters ) { |
|
189 | - if ( is_callable( array( $this->instance, $method ) ) ) { |
|
190 | - $object = array_shift( $parameters ); |
|
191 | - $parameters = array_merge( array( &$object ), $parameters ); |
|
192 | - return call_user_func_array( array( $this->instance, $method ), $parameters ); |
|
193 | - } |
|
194 | - } |
|
14 | + /** |
|
15 | + * Contains an instance of the data store class that we are working with. |
|
16 | + * |
|
17 | + * @var GetPaid_Data_Store |
|
18 | + */ |
|
19 | + private $instance = null; |
|
20 | + |
|
21 | + /** |
|
22 | + * Contains an array of default supported data stores. |
|
23 | + * Format of object name => class name. |
|
24 | + * Example: 'item' => 'GetPaid_Item_Data_Store' |
|
25 | + * You can also pass something like item-<type> for item stores and |
|
26 | + * that type will be used first when available, if a store is requested like |
|
27 | + * this and doesn't exist, then the store would fall back to 'item'. |
|
28 | + * Ran through `getpaid_data_stores`. |
|
29 | + * |
|
30 | + * @var array |
|
31 | + */ |
|
32 | + private $stores = array( |
|
33 | + 'item' => 'GetPaid_Item_Data_Store', |
|
34 | + 'payment_form' => 'GetPaid_Payment_Form_Data_Store', |
|
35 | + 'discount' => 'GetPaid_Discount_Data_Store', |
|
36 | + 'invoice' => 'GetPaid_Invoice_Data_Store', |
|
37 | + 'subscription' => 'GetPaid_Subscription_Data_Store', |
|
38 | + ); |
|
39 | + |
|
40 | + /** |
|
41 | + * Contains the name of the current data store's class name. |
|
42 | + * |
|
43 | + * @var string |
|
44 | + */ |
|
45 | + private $current_class_name = ''; |
|
46 | + |
|
47 | + /** |
|
48 | + * The object type this store works with. |
|
49 | + * |
|
50 | + * @var string |
|
51 | + */ |
|
52 | + private $object_type = ''; |
|
53 | + |
|
54 | + /** |
|
55 | + * Tells GetPaid_Data_Store which object |
|
56 | + * store we want to work with. |
|
57 | + * |
|
58 | + * @param string $object_type Name of object. |
|
59 | + */ |
|
60 | + public function __construct( $object_type ) { |
|
61 | + $this->object_type = $object_type; |
|
62 | + $this->stores = apply_filters( 'getpaid_data_stores', $this->stores ); |
|
63 | + |
|
64 | + // If this object type can't be found, check to see if we can load one |
|
65 | + // level up (so if item-type isn't found, we try item). |
|
66 | + if ( ! array_key_exists( $object_type, $this->stores ) ) { |
|
67 | + $pieces = explode( '-', $object_type ); |
|
68 | + $object_type = $pieces[0]; |
|
69 | + } |
|
70 | + |
|
71 | + if ( array_key_exists( $object_type, $this->stores ) ) { |
|
72 | + $store = apply_filters( 'getpaid_' . $object_type . '_data_store', $this->stores[ $object_type ] ); |
|
73 | + if ( is_object( $store ) ) { |
|
74 | + $this->current_class_name = get_class( $store ); |
|
75 | + $this->instance = $store; |
|
76 | + } else { |
|
77 | + if ( ! class_exists( $store ) ) { |
|
78 | + throw new Exception( __( 'Data store class does not exist.', 'invoicing' ) ); |
|
79 | + } |
|
80 | + $this->current_class_name = $store; |
|
81 | + $this->instance = new $store(); |
|
82 | + } |
|
83 | + } else { |
|
84 | + throw new Exception( __( 'Invalid data store.', 'invoicing' ) ); |
|
85 | + } |
|
86 | + } |
|
87 | + |
|
88 | + /** |
|
89 | + * Only store the object type to avoid serializing the data store instance. |
|
90 | + * |
|
91 | + * @return array |
|
92 | + */ |
|
93 | + public function __sleep() { |
|
94 | + return array( 'object_type' ); |
|
95 | + } |
|
96 | + |
|
97 | + /** |
|
98 | + * Re-run the constructor with the object type. |
|
99 | + * |
|
100 | + * @throws Exception When validation fails. |
|
101 | + */ |
|
102 | + public function __wakeup() { |
|
103 | + $this->__construct( $this->object_type ); |
|
104 | + } |
|
105 | + |
|
106 | + /** |
|
107 | + * Loads a data store. |
|
108 | + * |
|
109 | + * @param string $object_type Name of object. |
|
110 | + * |
|
111 | + * @since 1.0.19 |
|
112 | + * @throws Exception When validation fails. |
|
113 | + * @return GetPaid_Data_Store |
|
114 | + */ |
|
115 | + public static function load( $object_type ) { |
|
116 | + return new GetPaid_Data_Store( $object_type ); |
|
117 | + } |
|
118 | + |
|
119 | + /** |
|
120 | + * Returns the class name of the current data store. |
|
121 | + * |
|
122 | + * @since 1.0.19 |
|
123 | + * @return string |
|
124 | + */ |
|
125 | + public function get_current_class_name() { |
|
126 | + return $this->current_class_name; |
|
127 | + } |
|
128 | + |
|
129 | + /** |
|
130 | + * Returns the object type of the current data store. |
|
131 | + * |
|
132 | + * @since 1.0.19 |
|
133 | + * @return string |
|
134 | + */ |
|
135 | + public function get_object_type() { |
|
136 | + return $this->object_type; |
|
137 | + } |
|
138 | + |
|
139 | + /** |
|
140 | + * Reads an object from the data store. |
|
141 | + * |
|
142 | + * @since 1.0.19 |
|
143 | + * @param GetPaid_Data $data GetPaid data instance. |
|
144 | + */ |
|
145 | + public function read( &$data ) { |
|
146 | + $this->instance->read( $data ); |
|
147 | + } |
|
148 | + |
|
149 | + /** |
|
150 | + * Create an object in the data store. |
|
151 | + * |
|
152 | + * @since 1.0.19 |
|
153 | + * @param GetPaid_Data $data GetPaid data instance. |
|
154 | + */ |
|
155 | + public function create( &$data ) { |
|
156 | + $this->instance->create( $data ); |
|
157 | + } |
|
158 | + |
|
159 | + /** |
|
160 | + * Update an object in the data store. |
|
161 | + * |
|
162 | + * @since 1.0.19 |
|
163 | + * @param GetPaid_Data $data GetPaid data instance. |
|
164 | + */ |
|
165 | + public function update( &$data ) { |
|
166 | + $this->instance->update( $data ); |
|
167 | + } |
|
168 | + |
|
169 | + /** |
|
170 | + * Delete an object from the data store. |
|
171 | + * |
|
172 | + * @since 1.0.19 |
|
173 | + * @param GetPaid_Data $data GetPaid data instance. |
|
174 | + * @param array $args Array of args to pass to the delete method. |
|
175 | + */ |
|
176 | + public function delete( &$data, $args = array() ) { |
|
177 | + $this->instance->delete( $data, $args ); |
|
178 | + } |
|
179 | + |
|
180 | + /** |
|
181 | + * Data stores can define additional function. This passes |
|
182 | + * through to the instance if that function exists. |
|
183 | + * |
|
184 | + * @since 1.0.19 |
|
185 | + * @param string $method Method. |
|
186 | + * @return mixed |
|
187 | + */ |
|
188 | + public function __call( $method, $parameters ) { |
|
189 | + if ( is_callable( array( $this->instance, $method ) ) ) { |
|
190 | + $object = array_shift( $parameters ); |
|
191 | + $parameters = array_merge( array( &$object ), $parameters ); |
|
192 | + return call_user_func_array( array( $this->instance, $method ), $parameters ); |
|
193 | + } |
|
194 | + } |
|
195 | 195 | |
196 | 196 | } |
@@ -14,346 +14,346 @@ |
||
14 | 14 | */ |
15 | 15 | class GetPaid_Data_Store_WP { |
16 | 16 | |
17 | - /** |
|
18 | - * Meta type. This should match up with |
|
19 | - * the types available at https://developer.wordpress.org/reference/functions/add_metadata/. |
|
20 | - * WP defines 'post', 'user', 'comment', and 'term'. |
|
21 | - * |
|
22 | - * @var string |
|
23 | - */ |
|
24 | - protected $meta_type = 'post'; |
|
25 | - |
|
26 | - /** |
|
27 | - * This only needs set if you are using a custom metadata type. |
|
28 | - * |
|
29 | - * @var string |
|
30 | - */ |
|
31 | - protected $object_id_field_for_meta = ''; |
|
32 | - |
|
33 | - /** |
|
34 | - * Data stored in meta keys, but not considered "meta" for an object. |
|
35 | - * |
|
36 | - * @since 1.0.19 |
|
37 | - * |
|
38 | - * @var array |
|
39 | - */ |
|
40 | - protected $internal_meta_keys = array(); |
|
41 | - |
|
42 | - /** |
|
43 | - * Meta data which should exist in the DB, even if empty. |
|
44 | - * |
|
45 | - * @since 1.0.19 |
|
46 | - * |
|
47 | - * @var array |
|
48 | - */ |
|
49 | - protected $must_exist_meta_keys = array(); |
|
50 | - |
|
51 | - /** |
|
52 | - * A map of meta keys to data props. |
|
53 | - * |
|
54 | - * @since 1.0.19 |
|
55 | - * |
|
56 | - * @var array |
|
57 | - */ |
|
58 | - protected $meta_key_to_props = array(); |
|
59 | - |
|
60 | - /** |
|
61 | - * Returns an array of meta for an object. |
|
62 | - * |
|
63 | - * @since 1.0.19 |
|
64 | - * @param GetPaid_Data $object GetPaid_Data object. |
|
65 | - * @return array |
|
66 | - */ |
|
67 | - public function read_meta( &$object ) { |
|
68 | - global $wpdb; |
|
69 | - $db_info = $this->get_db_info(); |
|
70 | - $raw_meta_data = $wpdb->get_results( |
|
71 | - $wpdb->prepare( |
|
72 | - "SELECT {$db_info['meta_id_field']} as meta_id, meta_key, meta_value |
|
17 | + /** |
|
18 | + * Meta type. This should match up with |
|
19 | + * the types available at https://developer.wordpress.org/reference/functions/add_metadata/. |
|
20 | + * WP defines 'post', 'user', 'comment', and 'term'. |
|
21 | + * |
|
22 | + * @var string |
|
23 | + */ |
|
24 | + protected $meta_type = 'post'; |
|
25 | + |
|
26 | + /** |
|
27 | + * This only needs set if you are using a custom metadata type. |
|
28 | + * |
|
29 | + * @var string |
|
30 | + */ |
|
31 | + protected $object_id_field_for_meta = ''; |
|
32 | + |
|
33 | + /** |
|
34 | + * Data stored in meta keys, but not considered "meta" for an object. |
|
35 | + * |
|
36 | + * @since 1.0.19 |
|
37 | + * |
|
38 | + * @var array |
|
39 | + */ |
|
40 | + protected $internal_meta_keys = array(); |
|
41 | + |
|
42 | + /** |
|
43 | + * Meta data which should exist in the DB, even if empty. |
|
44 | + * |
|
45 | + * @since 1.0.19 |
|
46 | + * |
|
47 | + * @var array |
|
48 | + */ |
|
49 | + protected $must_exist_meta_keys = array(); |
|
50 | + |
|
51 | + /** |
|
52 | + * A map of meta keys to data props. |
|
53 | + * |
|
54 | + * @since 1.0.19 |
|
55 | + * |
|
56 | + * @var array |
|
57 | + */ |
|
58 | + protected $meta_key_to_props = array(); |
|
59 | + |
|
60 | + /** |
|
61 | + * Returns an array of meta for an object. |
|
62 | + * |
|
63 | + * @since 1.0.19 |
|
64 | + * @param GetPaid_Data $object GetPaid_Data object. |
|
65 | + * @return array |
|
66 | + */ |
|
67 | + public function read_meta( &$object ) { |
|
68 | + global $wpdb; |
|
69 | + $db_info = $this->get_db_info(); |
|
70 | + $raw_meta_data = $wpdb->get_results( |
|
71 | + $wpdb->prepare( |
|
72 | + "SELECT {$db_info['meta_id_field']} as meta_id, meta_key, meta_value |
|
73 | 73 | FROM {$db_info['table']} |
74 | 74 | WHERE {$db_info['object_id_field']} = %d |
75 | 75 | ORDER BY {$db_info['meta_id_field']}", |
76 | - $object->get_id() |
|
77 | - ) |
|
78 | - ); |
|
79 | - |
|
80 | - $this->internal_meta_keys = array_merge( array_map( array( $this, 'prefix_key' ), $object->get_data_keys() ), $this->internal_meta_keys ); |
|
81 | - $meta_data = array_filter( $raw_meta_data, array( $this, 'exclude_internal_meta_keys' ) ); |
|
82 | - return apply_filters( "getpaid_data_store_wp_{$this->meta_type}_read_meta", $meta_data, $object, $this ); |
|
83 | - } |
|
84 | - |
|
85 | - /** |
|
86 | - * Deletes meta based on meta ID. |
|
87 | - * |
|
88 | - * @since 1.0.19 |
|
89 | - * @param GetPaid_Data $object GetPaid_Data object. |
|
90 | - * @param stdClass $meta (containing at least ->id). |
|
91 | - */ |
|
92 | - public function delete_meta( &$object, $meta ) { |
|
93 | - delete_metadata_by_mid( $this->meta_type, $meta->id ); |
|
94 | - } |
|
95 | - |
|
96 | - /** |
|
97 | - * Add new piece of meta. |
|
98 | - * |
|
99 | - * @since 1.0.19 |
|
100 | - * @param GetPaid_Data $object GetPaid_Data object. |
|
101 | - * @param stdClass $meta (containing ->key and ->value). |
|
102 | - * @return int meta ID |
|
103 | - */ |
|
104 | - public function add_meta( &$object, $meta ) { |
|
105 | - return add_metadata( $this->meta_type, $object->get_id(), $meta->key, is_string( $meta->value ) ? wp_slash( $meta->value ) : $meta->value, false ); |
|
106 | - } |
|
107 | - |
|
108 | - /** |
|
109 | - * Update meta. |
|
110 | - * |
|
111 | - * @since 1.0.19 |
|
112 | - * @param GetPaid_Data $object GetPaid_Data object. |
|
113 | - * @param stdClass $meta (containing ->id, ->key and ->value). |
|
114 | - */ |
|
115 | - public function update_meta( &$object, $meta ) { |
|
116 | - update_metadata_by_mid( $this->meta_type, $meta->id, $meta->value, $meta->key ); |
|
117 | - } |
|
118 | - |
|
119 | - /** |
|
120 | - * Table structure is slightly different between meta types, this function will return what we need to know. |
|
121 | - * |
|
122 | - * @since 1.0.19 |
|
123 | - * @return array Array elements: table, object_id_field, meta_id_field |
|
124 | - */ |
|
125 | - protected function get_db_info() { |
|
126 | - global $wpdb; |
|
127 | - |
|
128 | - $meta_id_field = 'meta_id'; // users table calls this umeta_id so we need to track this as well. |
|
129 | - $table = $wpdb->prefix; |
|
130 | - |
|
131 | - // If we are dealing with a type of metadata that is not a core type, the table should be prefixed. |
|
132 | - if ( ! in_array( $this->meta_type, array( 'post', 'user', 'comment', 'term' ), true ) ) { |
|
133 | - $table .= 'getpaid_'; |
|
134 | - } |
|
135 | - |
|
136 | - $table .= $this->meta_type . 'meta'; |
|
137 | - $object_id_field = $this->meta_type . '_id'; |
|
138 | - |
|
139 | - // Figure out our field names. |
|
140 | - if ( 'user' === $this->meta_type ) { |
|
141 | - $meta_id_field = 'umeta_id'; |
|
142 | - $table = $wpdb->usermeta; |
|
143 | - } |
|
144 | - |
|
145 | - if ( ! empty( $this->object_id_field_for_meta ) ) { |
|
146 | - $object_id_field = $this->object_id_field_for_meta; |
|
147 | - } |
|
148 | - |
|
149 | - return array( |
|
150 | - 'table' => $table, |
|
151 | - 'object_id_field' => $object_id_field, |
|
152 | - 'meta_id_field' => $meta_id_field, |
|
153 | - ); |
|
154 | - } |
|
155 | - |
|
156 | - /** |
|
157 | - * Internal meta keys we don't want exposed as part of meta_data. This is in |
|
158 | - * addition to all data props with _ prefix. |
|
159 | - * |
|
160 | - * @since 1.0.19 |
|
161 | - * |
|
162 | - * @param string $key Prefix to be added to meta keys. |
|
163 | - * @return string |
|
164 | - */ |
|
165 | - protected function prefix_key( $key ) { |
|
166 | - return '_' === substr( $key, 0, 1 ) ? $key : '_' . $key; |
|
167 | - } |
|
168 | - |
|
169 | - /** |
|
170 | - * Callback to remove unwanted meta data. |
|
171 | - * |
|
172 | - * @param object $meta Meta object to check if it should be excluded or not. |
|
173 | - * @return bool |
|
174 | - */ |
|
175 | - protected function exclude_internal_meta_keys( $meta ) { |
|
176 | - return ! in_array( $meta->meta_key, $this->internal_meta_keys, true ) && 0 !== stripos( $meta->meta_key, 'wp_' ); |
|
177 | - } |
|
178 | - |
|
179 | - /** |
|
180 | - * Gets a list of props and meta keys that need updated based on change state |
|
181 | - * or if they are present in the database or not. |
|
182 | - * |
|
183 | - * @param GetPaid_Data $object The GetPaid_Data object. |
|
184 | - * @param array $meta_key_to_props A mapping of meta keys => prop names. |
|
185 | - * @param string $meta_type The internal WP meta type (post, user, etc). |
|
186 | - * @return array A mapping of meta keys => prop names, filtered by ones that should be updated. |
|
187 | - */ |
|
188 | - protected function get_props_to_update( $object, $meta_key_to_props, $meta_type = 'post' ) { |
|
189 | - $props_to_update = array(); |
|
190 | - $changed_props = $object->get_changes(); |
|
191 | - |
|
192 | - // Props should be updated if they are a part of the $changed array or don't exist yet. |
|
193 | - foreach ( $meta_key_to_props as $meta_key => $prop ) { |
|
194 | - if ( array_key_exists( $prop, $changed_props ) || ! metadata_exists( $meta_type, $object->get_id(), $meta_key ) ) { |
|
195 | - $props_to_update[ $meta_key ] = $prop; |
|
196 | - } |
|
197 | - } |
|
198 | - |
|
199 | - return $props_to_update; |
|
200 | - } |
|
201 | - |
|
202 | - /** |
|
203 | - * Read object data. |
|
204 | - * |
|
205 | - * @param GetPaid_Data $object GetPaid_Data object. |
|
206 | - * @param WP_Post $post_object Post object. |
|
207 | - * @since 1.0.19 |
|
208 | - */ |
|
209 | - protected function read_object_data( &$object, $post_object ) { |
|
210 | - $id = $object->get_id(); |
|
211 | - $props = array(); |
|
212 | - |
|
213 | - foreach ( $this->meta_key_to_props as $meta_key => $prop ) { |
|
214 | - $props[ $prop ] = get_post_meta( $id, $meta_key, true ); |
|
215 | - } |
|
216 | - |
|
217 | - // Set object properties. |
|
218 | - $object->set_props( $props ); |
|
219 | - |
|
220 | - // Gets extra data associated with the object if needed. |
|
221 | - foreach ( $object->get_extra_data_keys() as $key ) { |
|
222 | - $function = 'set_' . $key; |
|
223 | - if ( is_callable( array( $object, $function ) ) ) { |
|
224 | - $object->{$function}( get_post_meta( $object->get_id(), $key, true ) ); |
|
225 | - } |
|
226 | - } |
|
227 | - } |
|
228 | - |
|
229 | - /** |
|
230 | - * Helper method that updates all the post meta for an object based on it's settings in the GetPaid_Data class. |
|
231 | - * |
|
232 | - * @param GetPaid_Data $object GetPaid_Data object. |
|
233 | - * @since 1.0.19 |
|
234 | - */ |
|
235 | - protected function update_post_meta( &$object ) { |
|
236 | - |
|
237 | - $updated_props = array(); |
|
238 | - $props_to_update = $this->get_props_to_update( $object, $this->meta_key_to_props ); |
|
239 | - $object_type = $object->get_object_type(); |
|
240 | - |
|
241 | - foreach ( $props_to_update as $meta_key => $prop ) { |
|
242 | - $value = $object->{"get_$prop"}( 'edit' ); |
|
243 | - $value = is_string( $value ) ? wp_slash( $value ) : $value; |
|
244 | - |
|
245 | - $updated = $this->update_or_delete_post_meta( $object, $meta_key, $value ); |
|
246 | - |
|
247 | - if ( $updated ) { |
|
248 | - $updated_props[] = $prop; |
|
249 | - } |
|
250 | - } |
|
251 | - |
|
252 | - do_action( "getpaid_{$object_type}_object_updated_props", $object, $updated_props ); |
|
253 | - } |
|
254 | - |
|
255 | - /** |
|
256 | - * Update meta data in, or delete it from, the database. |
|
257 | - * |
|
258 | - * Avoids storing meta when it's either an empty string or empty array or null. |
|
259 | - * Other empty values such as numeric 0 should still be stored. |
|
260 | - * Data-stores can force meta to exist using `must_exist_meta_keys`. |
|
261 | - * |
|
262 | - * Note: WordPress `get_metadata` function returns an empty string when meta data does not exist. |
|
263 | - * |
|
264 | - * @param GetPaid_Data $object The GetPaid_Data object. |
|
265 | - * @param string $meta_key Meta key to update. |
|
266 | - * @param mixed $meta_value Value to save. |
|
267 | - * |
|
268 | - * @since 1.0.19 Added to prevent empty meta being stored unless required. |
|
269 | - * |
|
270 | - * @return bool True if updated/deleted. |
|
271 | - */ |
|
272 | - protected function update_or_delete_post_meta( $object, $meta_key, $meta_value ) { |
|
273 | - if ( in_array( $meta_value, array( array(), '', null ), true ) && ! in_array( $meta_key, $this->must_exist_meta_keys, true ) ) { |
|
274 | - $updated = delete_post_meta( $object->get_id(), $meta_key ); |
|
275 | - } else { |
|
276 | - $updated = update_post_meta( $object->get_id(), $meta_key, $meta_value ); |
|
277 | - } |
|
278 | - |
|
279 | - return (bool) $updated; |
|
280 | - } |
|
281 | - |
|
282 | - /** |
|
283 | - * Return list of internal meta keys. |
|
284 | - * |
|
285 | - * @since 1.0.19 |
|
286 | - * @return array |
|
287 | - */ |
|
288 | - public function get_internal_meta_keys() { |
|
289 | - return $this->internal_meta_keys; |
|
290 | - } |
|
291 | - |
|
292 | - /** |
|
293 | - * Clear any caches. |
|
294 | - * |
|
295 | - * @param GetPaid_Data $object GetPaid_Data object. |
|
296 | - * @since 1.0.19 |
|
297 | - */ |
|
298 | - protected function clear_caches( &$object ) { |
|
299 | - clean_post_cache( $object->get_id() ); |
|
300 | - } |
|
301 | - |
|
302 | - /** |
|
303 | - * Method to delete a data object from the database. |
|
304 | - * |
|
305 | - * @param GetPaid_Data $object GetPaid_Data object. |
|
306 | - * @param array $args Array of args to pass to the delete method. |
|
307 | - * |
|
308 | - * @return void |
|
309 | - */ |
|
310 | - public function delete( &$object, $args = array() ) { |
|
311 | - $id = $object->get_id(); |
|
312 | - $object_type = $object->get_object_type(); |
|
313 | - |
|
314 | - if ( 'invoice' == $object_type ) { |
|
315 | - $object_type = $object->get_type(); |
|
316 | - } |
|
317 | - |
|
318 | - $args = wp_parse_args( |
|
319 | - $args, |
|
320 | - array( |
|
321 | - 'force_delete' => false, |
|
322 | - ) |
|
323 | - ); |
|
324 | - |
|
325 | - if ( ! $id ) { |
|
326 | - return; |
|
327 | - } |
|
328 | - |
|
329 | - if ( $args['force_delete'] ) { |
|
330 | - do_action( "getpaid_delete_$object_type", $object ); |
|
331 | - wp_delete_post( $id, true ); |
|
332 | - $object->set_id( 0 ); |
|
333 | - } else { |
|
334 | - do_action( "getpaid_trash_$object_type", $object ); |
|
335 | - wp_trash_post( $id ); |
|
336 | - $object->set_status( 'trash' ); |
|
337 | - } |
|
338 | - } |
|
339 | - |
|
340 | - /** |
|
341 | - * Get the status to save to the post object. |
|
342 | - * |
|
343 | - * |
|
344 | - * @since 1.0.19 |
|
345 | - * @param GetPaid_Data $object GetPaid_Data object. |
|
346 | - * @return string |
|
347 | - */ |
|
348 | - protected function get_post_status( $object ) { |
|
349 | - $object_status = $object->get_status( 'edit' ); |
|
350 | - $object_type = $object->get_object_type(); |
|
351 | - |
|
352 | - if ( ! $object_status ) { |
|
353 | - $object_status = apply_filters( "getpaid_default_{$object_type}_status", 'draft' ); |
|
354 | - } |
|
355 | - |
|
356 | - return $object_status; |
|
357 | - } |
|
76 | + $object->get_id() |
|
77 | + ) |
|
78 | + ); |
|
79 | + |
|
80 | + $this->internal_meta_keys = array_merge( array_map( array( $this, 'prefix_key' ), $object->get_data_keys() ), $this->internal_meta_keys ); |
|
81 | + $meta_data = array_filter( $raw_meta_data, array( $this, 'exclude_internal_meta_keys' ) ); |
|
82 | + return apply_filters( "getpaid_data_store_wp_{$this->meta_type}_read_meta", $meta_data, $object, $this ); |
|
83 | + } |
|
84 | + |
|
85 | + /** |
|
86 | + * Deletes meta based on meta ID. |
|
87 | + * |
|
88 | + * @since 1.0.19 |
|
89 | + * @param GetPaid_Data $object GetPaid_Data object. |
|
90 | + * @param stdClass $meta (containing at least ->id). |
|
91 | + */ |
|
92 | + public function delete_meta( &$object, $meta ) { |
|
93 | + delete_metadata_by_mid( $this->meta_type, $meta->id ); |
|
94 | + } |
|
95 | + |
|
96 | + /** |
|
97 | + * Add new piece of meta. |
|
98 | + * |
|
99 | + * @since 1.0.19 |
|
100 | + * @param GetPaid_Data $object GetPaid_Data object. |
|
101 | + * @param stdClass $meta (containing ->key and ->value). |
|
102 | + * @return int meta ID |
|
103 | + */ |
|
104 | + public function add_meta( &$object, $meta ) { |
|
105 | + return add_metadata( $this->meta_type, $object->get_id(), $meta->key, is_string( $meta->value ) ? wp_slash( $meta->value ) : $meta->value, false ); |
|
106 | + } |
|
107 | + |
|
108 | + /** |
|
109 | + * Update meta. |
|
110 | + * |
|
111 | + * @since 1.0.19 |
|
112 | + * @param GetPaid_Data $object GetPaid_Data object. |
|
113 | + * @param stdClass $meta (containing ->id, ->key and ->value). |
|
114 | + */ |
|
115 | + public function update_meta( &$object, $meta ) { |
|
116 | + update_metadata_by_mid( $this->meta_type, $meta->id, $meta->value, $meta->key ); |
|
117 | + } |
|
118 | + |
|
119 | + /** |
|
120 | + * Table structure is slightly different between meta types, this function will return what we need to know. |
|
121 | + * |
|
122 | + * @since 1.0.19 |
|
123 | + * @return array Array elements: table, object_id_field, meta_id_field |
|
124 | + */ |
|
125 | + protected function get_db_info() { |
|
126 | + global $wpdb; |
|
127 | + |
|
128 | + $meta_id_field = 'meta_id'; // users table calls this umeta_id so we need to track this as well. |
|
129 | + $table = $wpdb->prefix; |
|
130 | + |
|
131 | + // If we are dealing with a type of metadata that is not a core type, the table should be prefixed. |
|
132 | + if ( ! in_array( $this->meta_type, array( 'post', 'user', 'comment', 'term' ), true ) ) { |
|
133 | + $table .= 'getpaid_'; |
|
134 | + } |
|
135 | + |
|
136 | + $table .= $this->meta_type . 'meta'; |
|
137 | + $object_id_field = $this->meta_type . '_id'; |
|
138 | + |
|
139 | + // Figure out our field names. |
|
140 | + if ( 'user' === $this->meta_type ) { |
|
141 | + $meta_id_field = 'umeta_id'; |
|
142 | + $table = $wpdb->usermeta; |
|
143 | + } |
|
144 | + |
|
145 | + if ( ! empty( $this->object_id_field_for_meta ) ) { |
|
146 | + $object_id_field = $this->object_id_field_for_meta; |
|
147 | + } |
|
148 | + |
|
149 | + return array( |
|
150 | + 'table' => $table, |
|
151 | + 'object_id_field' => $object_id_field, |
|
152 | + 'meta_id_field' => $meta_id_field, |
|
153 | + ); |
|
154 | + } |
|
155 | + |
|
156 | + /** |
|
157 | + * Internal meta keys we don't want exposed as part of meta_data. This is in |
|
158 | + * addition to all data props with _ prefix. |
|
159 | + * |
|
160 | + * @since 1.0.19 |
|
161 | + * |
|
162 | + * @param string $key Prefix to be added to meta keys. |
|
163 | + * @return string |
|
164 | + */ |
|
165 | + protected function prefix_key( $key ) { |
|
166 | + return '_' === substr( $key, 0, 1 ) ? $key : '_' . $key; |
|
167 | + } |
|
168 | + |
|
169 | + /** |
|
170 | + * Callback to remove unwanted meta data. |
|
171 | + * |
|
172 | + * @param object $meta Meta object to check if it should be excluded or not. |
|
173 | + * @return bool |
|
174 | + */ |
|
175 | + protected function exclude_internal_meta_keys( $meta ) { |
|
176 | + return ! in_array( $meta->meta_key, $this->internal_meta_keys, true ) && 0 !== stripos( $meta->meta_key, 'wp_' ); |
|
177 | + } |
|
178 | + |
|
179 | + /** |
|
180 | + * Gets a list of props and meta keys that need updated based on change state |
|
181 | + * or if they are present in the database or not. |
|
182 | + * |
|
183 | + * @param GetPaid_Data $object The GetPaid_Data object. |
|
184 | + * @param array $meta_key_to_props A mapping of meta keys => prop names. |
|
185 | + * @param string $meta_type The internal WP meta type (post, user, etc). |
|
186 | + * @return array A mapping of meta keys => prop names, filtered by ones that should be updated. |
|
187 | + */ |
|
188 | + protected function get_props_to_update( $object, $meta_key_to_props, $meta_type = 'post' ) { |
|
189 | + $props_to_update = array(); |
|
190 | + $changed_props = $object->get_changes(); |
|
191 | + |
|
192 | + // Props should be updated if they are a part of the $changed array or don't exist yet. |
|
193 | + foreach ( $meta_key_to_props as $meta_key => $prop ) { |
|
194 | + if ( array_key_exists( $prop, $changed_props ) || ! metadata_exists( $meta_type, $object->get_id(), $meta_key ) ) { |
|
195 | + $props_to_update[ $meta_key ] = $prop; |
|
196 | + } |
|
197 | + } |
|
198 | + |
|
199 | + return $props_to_update; |
|
200 | + } |
|
201 | + |
|
202 | + /** |
|
203 | + * Read object data. |
|
204 | + * |
|
205 | + * @param GetPaid_Data $object GetPaid_Data object. |
|
206 | + * @param WP_Post $post_object Post object. |
|
207 | + * @since 1.0.19 |
|
208 | + */ |
|
209 | + protected function read_object_data( &$object, $post_object ) { |
|
210 | + $id = $object->get_id(); |
|
211 | + $props = array(); |
|
212 | + |
|
213 | + foreach ( $this->meta_key_to_props as $meta_key => $prop ) { |
|
214 | + $props[ $prop ] = get_post_meta( $id, $meta_key, true ); |
|
215 | + } |
|
216 | + |
|
217 | + // Set object properties. |
|
218 | + $object->set_props( $props ); |
|
219 | + |
|
220 | + // Gets extra data associated with the object if needed. |
|
221 | + foreach ( $object->get_extra_data_keys() as $key ) { |
|
222 | + $function = 'set_' . $key; |
|
223 | + if ( is_callable( array( $object, $function ) ) ) { |
|
224 | + $object->{$function}( get_post_meta( $object->get_id(), $key, true ) ); |
|
225 | + } |
|
226 | + } |
|
227 | + } |
|
228 | + |
|
229 | + /** |
|
230 | + * Helper method that updates all the post meta for an object based on it's settings in the GetPaid_Data class. |
|
231 | + * |
|
232 | + * @param GetPaid_Data $object GetPaid_Data object. |
|
233 | + * @since 1.0.19 |
|
234 | + */ |
|
235 | + protected function update_post_meta( &$object ) { |
|
236 | + |
|
237 | + $updated_props = array(); |
|
238 | + $props_to_update = $this->get_props_to_update( $object, $this->meta_key_to_props ); |
|
239 | + $object_type = $object->get_object_type(); |
|
240 | + |
|
241 | + foreach ( $props_to_update as $meta_key => $prop ) { |
|
242 | + $value = $object->{"get_$prop"}( 'edit' ); |
|
243 | + $value = is_string( $value ) ? wp_slash( $value ) : $value; |
|
244 | + |
|
245 | + $updated = $this->update_or_delete_post_meta( $object, $meta_key, $value ); |
|
246 | + |
|
247 | + if ( $updated ) { |
|
248 | + $updated_props[] = $prop; |
|
249 | + } |
|
250 | + } |
|
251 | + |
|
252 | + do_action( "getpaid_{$object_type}_object_updated_props", $object, $updated_props ); |
|
253 | + } |
|
254 | + |
|
255 | + /** |
|
256 | + * Update meta data in, or delete it from, the database. |
|
257 | + * |
|
258 | + * Avoids storing meta when it's either an empty string or empty array or null. |
|
259 | + * Other empty values such as numeric 0 should still be stored. |
|
260 | + * Data-stores can force meta to exist using `must_exist_meta_keys`. |
|
261 | + * |
|
262 | + * Note: WordPress `get_metadata` function returns an empty string when meta data does not exist. |
|
263 | + * |
|
264 | + * @param GetPaid_Data $object The GetPaid_Data object. |
|
265 | + * @param string $meta_key Meta key to update. |
|
266 | + * @param mixed $meta_value Value to save. |
|
267 | + * |
|
268 | + * @since 1.0.19 Added to prevent empty meta being stored unless required. |
|
269 | + * |
|
270 | + * @return bool True if updated/deleted. |
|
271 | + */ |
|
272 | + protected function update_or_delete_post_meta( $object, $meta_key, $meta_value ) { |
|
273 | + if ( in_array( $meta_value, array( array(), '', null ), true ) && ! in_array( $meta_key, $this->must_exist_meta_keys, true ) ) { |
|
274 | + $updated = delete_post_meta( $object->get_id(), $meta_key ); |
|
275 | + } else { |
|
276 | + $updated = update_post_meta( $object->get_id(), $meta_key, $meta_value ); |
|
277 | + } |
|
278 | + |
|
279 | + return (bool) $updated; |
|
280 | + } |
|
281 | + |
|
282 | + /** |
|
283 | + * Return list of internal meta keys. |
|
284 | + * |
|
285 | + * @since 1.0.19 |
|
286 | + * @return array |
|
287 | + */ |
|
288 | + public function get_internal_meta_keys() { |
|
289 | + return $this->internal_meta_keys; |
|
290 | + } |
|
291 | + |
|
292 | + /** |
|
293 | + * Clear any caches. |
|
294 | + * |
|
295 | + * @param GetPaid_Data $object GetPaid_Data object. |
|
296 | + * @since 1.0.19 |
|
297 | + */ |
|
298 | + protected function clear_caches( &$object ) { |
|
299 | + clean_post_cache( $object->get_id() ); |
|
300 | + } |
|
301 | + |
|
302 | + /** |
|
303 | + * Method to delete a data object from the database. |
|
304 | + * |
|
305 | + * @param GetPaid_Data $object GetPaid_Data object. |
|
306 | + * @param array $args Array of args to pass to the delete method. |
|
307 | + * |
|
308 | + * @return void |
|
309 | + */ |
|
310 | + public function delete( &$object, $args = array() ) { |
|
311 | + $id = $object->get_id(); |
|
312 | + $object_type = $object->get_object_type(); |
|
313 | + |
|
314 | + if ( 'invoice' == $object_type ) { |
|
315 | + $object_type = $object->get_type(); |
|
316 | + } |
|
317 | + |
|
318 | + $args = wp_parse_args( |
|
319 | + $args, |
|
320 | + array( |
|
321 | + 'force_delete' => false, |
|
322 | + ) |
|
323 | + ); |
|
324 | + |
|
325 | + if ( ! $id ) { |
|
326 | + return; |
|
327 | + } |
|
328 | + |
|
329 | + if ( $args['force_delete'] ) { |
|
330 | + do_action( "getpaid_delete_$object_type", $object ); |
|
331 | + wp_delete_post( $id, true ); |
|
332 | + $object->set_id( 0 ); |
|
333 | + } else { |
|
334 | + do_action( "getpaid_trash_$object_type", $object ); |
|
335 | + wp_trash_post( $id ); |
|
336 | + $object->set_status( 'trash' ); |
|
337 | + } |
|
338 | + } |
|
339 | + |
|
340 | + /** |
|
341 | + * Get the status to save to the post object. |
|
342 | + * |
|
343 | + * |
|
344 | + * @since 1.0.19 |
|
345 | + * @param GetPaid_Data $object GetPaid_Data object. |
|
346 | + * @return string |
|
347 | + */ |
|
348 | + protected function get_post_status( $object ) { |
|
349 | + $object_status = $object->get_status( 'edit' ); |
|
350 | + $object_type = $object->get_object_type(); |
|
351 | + |
|
352 | + if ( ! $object_status ) { |
|
353 | + $object_status = apply_filters( "getpaid_default_{$object_type}_status", 'draft' ); |
|
354 | + } |
|
355 | + |
|
356 | + return $object_status; |
|
357 | + } |
|
358 | 358 | |
359 | 359 | } |
@@ -13,128 +13,128 @@ |
||
13 | 13 | class GetPaid_Payment_Forms { |
14 | 14 | |
15 | 15 | /** |
16 | - * Class constructor |
|
17 | - * |
|
18 | - */ |
|
19 | - public function __construct() { |
|
20 | - |
|
21 | - // Update a payment form's revenue whenever an invoice is paid for or refunded. |
|
22 | - add_action( 'getpaid_invoice_payment_status_changed', array( $this, 'increment_form_revenue' ) ); |
|
23 | - add_action( 'getpaid_invoice_payment_status_reversed', array( $this, 'decrease_form_revenue' ) ); |
|
24 | - |
|
25 | - // Sync form amount whenever invoice statuses change. |
|
26 | - add_action( 'getpaid_invoice_status_changed', array( $this, 'update_form_failed_amount' ), 10, 3 ); |
|
27 | - add_action( 'getpaid_invoice_status_changed', array( $this, 'update_form_refunded_amount' ), 10, 3 ); |
|
28 | - add_action( 'getpaid_invoice_status_changed', array( $this, 'update_form_cancelled_amount' ), 10, 3 ); |
|
29 | - |
|
30 | - } |
|
31 | - |
|
32 | - /** |
|
33 | - * Increments a form's revenue whenever there is a payment. |
|
34 | - * |
|
35 | - * @param WPInv_Invoice $invoice |
|
36 | - */ |
|
37 | - public function increment_form_revenue( $invoice ) { |
|
38 | - |
|
39 | - $form = new GetPaid_Payment_Form( $invoice->get_payment_form() ); |
|
40 | - if ( $form->get_id() ) { |
|
41 | - $form->set_earned( $form->get_earned() + $invoice->get_total() ); |
|
42 | - $form->save(); |
|
43 | - } |
|
44 | - |
|
45 | - } |
|
46 | - |
|
47 | - /** |
|
48 | - * Decreases form revenue whenever invoice payment changes. |
|
49 | - * |
|
50 | - * @param WPInv_Invoice $invoice |
|
51 | - */ |
|
52 | - public function decrease_form_revenue( $invoice ) { |
|
53 | - |
|
54 | - $form = new GetPaid_Payment_Form( $invoice->get_payment_form() ); |
|
55 | - if ( $form->get_id() ) { |
|
56 | - $form->set_earned( $form->get_earned() - $invoice->get_total() ); |
|
57 | - $form->save(); |
|
58 | - } |
|
59 | - |
|
60 | - } |
|
61 | - |
|
62 | - /** |
|
63 | - * Updates a form's failed amount. |
|
64 | - * |
|
65 | - * @param WPInv_Invoice $invoice |
|
66 | - * @param string $from |
|
67 | - * @param string $to |
|
68 | - */ |
|
69 | - public function update_form_failed_amount( $invoice, $from, $to ) { |
|
70 | - |
|
71 | - $form = new GetPaid_Payment_Form( $invoice->get_payment_form() ); |
|
72 | - if ( $form->get_id() ) { |
|
73 | - return; |
|
74 | - } |
|
75 | - |
|
76 | - if ( 'wpi-failed' == $from ) { |
|
77 | - $form->set_failed( $form->get_failed() - $invoice->get_total() ); |
|
78 | - $form->save(); |
|
79 | - } |
|
80 | - |
|
81 | - if ( 'wpi-failed' == $to ) { |
|
82 | - $form->set_failed( $form->get_failed() + $invoice->get_total() ); |
|
83 | - $form->save(); |
|
84 | - } |
|
85 | - |
|
86 | - } |
|
87 | - |
|
88 | - /** |
|
89 | - * Updates a form's refunded amount. |
|
90 | - * |
|
91 | - * @param WPInv_Invoice $invoice |
|
92 | - * @param string $from |
|
93 | - * @param string $to |
|
94 | - */ |
|
95 | - public function update_form_refunded_amount( $invoice, $from, $to ) { |
|
96 | - |
|
97 | - $form = new GetPaid_Payment_Form( $invoice->get_payment_form() ); |
|
98 | - if ( $form->get_id() ) { |
|
99 | - return; |
|
100 | - } |
|
101 | - |
|
102 | - if ( 'wpi-refunded' == $from ) { |
|
103 | - $form->set_refunded( $form->get_refunded() - $invoice->get_total() ); |
|
104 | - $form->save(); |
|
105 | - } |
|
106 | - |
|
107 | - if ( 'wpi-refunded' == $to ) { |
|
108 | - $form->set_refunded( $form->get_refunded() + $invoice->get_total() ); |
|
109 | - $form->save(); |
|
110 | - } |
|
111 | - |
|
112 | - } |
|
113 | - |
|
114 | - /** |
|
115 | - * Updates a form's cancelled amount. |
|
116 | - * |
|
117 | - * @param WPInv_Invoice $invoice |
|
118 | - * @param string $from |
|
119 | - * @param string $to |
|
120 | - */ |
|
121 | - public function update_form_cancelled_amount( $invoice, $from, $to ) { |
|
122 | - |
|
123 | - $form = new GetPaid_Payment_Form( $invoice->get_payment_form() ); |
|
124 | - if ( $form->get_id() ) { |
|
125 | - return; |
|
126 | - } |
|
127 | - |
|
128 | - if ( 'wpi-cancelled' == $from ) { |
|
129 | - $form->set_cancelled( $form->get_cancelled() - $invoice->get_total() ); |
|
130 | - $form->save(); |
|
131 | - } |
|
132 | - |
|
133 | - if ( 'wpi-cancelled' == $to ) { |
|
134 | - $form->set_cancelled( $form->get_cancelled() + $invoice->get_total() ); |
|
135 | - $form->save(); |
|
136 | - } |
|
137 | - |
|
138 | - } |
|
16 | + * Class constructor |
|
17 | + * |
|
18 | + */ |
|
19 | + public function __construct() { |
|
20 | + |
|
21 | + // Update a payment form's revenue whenever an invoice is paid for or refunded. |
|
22 | + add_action( 'getpaid_invoice_payment_status_changed', array( $this, 'increment_form_revenue' ) ); |
|
23 | + add_action( 'getpaid_invoice_payment_status_reversed', array( $this, 'decrease_form_revenue' ) ); |
|
24 | + |
|
25 | + // Sync form amount whenever invoice statuses change. |
|
26 | + add_action( 'getpaid_invoice_status_changed', array( $this, 'update_form_failed_amount' ), 10, 3 ); |
|
27 | + add_action( 'getpaid_invoice_status_changed', array( $this, 'update_form_refunded_amount' ), 10, 3 ); |
|
28 | + add_action( 'getpaid_invoice_status_changed', array( $this, 'update_form_cancelled_amount' ), 10, 3 ); |
|
29 | + |
|
30 | + } |
|
31 | + |
|
32 | + /** |
|
33 | + * Increments a form's revenue whenever there is a payment. |
|
34 | + * |
|
35 | + * @param WPInv_Invoice $invoice |
|
36 | + */ |
|
37 | + public function increment_form_revenue( $invoice ) { |
|
38 | + |
|
39 | + $form = new GetPaid_Payment_Form( $invoice->get_payment_form() ); |
|
40 | + if ( $form->get_id() ) { |
|
41 | + $form->set_earned( $form->get_earned() + $invoice->get_total() ); |
|
42 | + $form->save(); |
|
43 | + } |
|
44 | + |
|
45 | + } |
|
46 | + |
|
47 | + /** |
|
48 | + * Decreases form revenue whenever invoice payment changes. |
|
49 | + * |
|
50 | + * @param WPInv_Invoice $invoice |
|
51 | + */ |
|
52 | + public function decrease_form_revenue( $invoice ) { |
|
53 | + |
|
54 | + $form = new GetPaid_Payment_Form( $invoice->get_payment_form() ); |
|
55 | + if ( $form->get_id() ) { |
|
56 | + $form->set_earned( $form->get_earned() - $invoice->get_total() ); |
|
57 | + $form->save(); |
|
58 | + } |
|
59 | + |
|
60 | + } |
|
61 | + |
|
62 | + /** |
|
63 | + * Updates a form's failed amount. |
|
64 | + * |
|
65 | + * @param WPInv_Invoice $invoice |
|
66 | + * @param string $from |
|
67 | + * @param string $to |
|
68 | + */ |
|
69 | + public function update_form_failed_amount( $invoice, $from, $to ) { |
|
70 | + |
|
71 | + $form = new GetPaid_Payment_Form( $invoice->get_payment_form() ); |
|
72 | + if ( $form->get_id() ) { |
|
73 | + return; |
|
74 | + } |
|
75 | + |
|
76 | + if ( 'wpi-failed' == $from ) { |
|
77 | + $form->set_failed( $form->get_failed() - $invoice->get_total() ); |
|
78 | + $form->save(); |
|
79 | + } |
|
80 | + |
|
81 | + if ( 'wpi-failed' == $to ) { |
|
82 | + $form->set_failed( $form->get_failed() + $invoice->get_total() ); |
|
83 | + $form->save(); |
|
84 | + } |
|
85 | + |
|
86 | + } |
|
87 | + |
|
88 | + /** |
|
89 | + * Updates a form's refunded amount. |
|
90 | + * |
|
91 | + * @param WPInv_Invoice $invoice |
|
92 | + * @param string $from |
|
93 | + * @param string $to |
|
94 | + */ |
|
95 | + public function update_form_refunded_amount( $invoice, $from, $to ) { |
|
96 | + |
|
97 | + $form = new GetPaid_Payment_Form( $invoice->get_payment_form() ); |
|
98 | + if ( $form->get_id() ) { |
|
99 | + return; |
|
100 | + } |
|
101 | + |
|
102 | + if ( 'wpi-refunded' == $from ) { |
|
103 | + $form->set_refunded( $form->get_refunded() - $invoice->get_total() ); |
|
104 | + $form->save(); |
|
105 | + } |
|
106 | + |
|
107 | + if ( 'wpi-refunded' == $to ) { |
|
108 | + $form->set_refunded( $form->get_refunded() + $invoice->get_total() ); |
|
109 | + $form->save(); |
|
110 | + } |
|
111 | + |
|
112 | + } |
|
113 | + |
|
114 | + /** |
|
115 | + * Updates a form's cancelled amount. |
|
116 | + * |
|
117 | + * @param WPInv_Invoice $invoice |
|
118 | + * @param string $from |
|
119 | + * @param string $to |
|
120 | + */ |
|
121 | + public function update_form_cancelled_amount( $invoice, $from, $to ) { |
|
122 | + |
|
123 | + $form = new GetPaid_Payment_Form( $invoice->get_payment_form() ); |
|
124 | + if ( $form->get_id() ) { |
|
125 | + return; |
|
126 | + } |
|
127 | + |
|
128 | + if ( 'wpi-cancelled' == $from ) { |
|
129 | + $form->set_cancelled( $form->get_cancelled() - $invoice->get_total() ); |
|
130 | + $form->save(); |
|
131 | + } |
|
132 | + |
|
133 | + if ( 'wpi-cancelled' == $to ) { |
|
134 | + $form->set_cancelled( $form->get_cancelled() + $invoice->get_total() ); |
|
135 | + $form->save(); |
|
136 | + } |
|
137 | + |
|
138 | + } |
|
139 | 139 | |
140 | 140 | } |
@@ -56,7 +56,7 @@ |
||
56 | 56 | } |
57 | 57 | |
58 | 58 | function wpinv_admin_messages() { |
59 | - settings_errors( 'wpinv-notices' ); |
|
59 | + settings_errors( 'wpinv-notices' ); |
|
60 | 60 | } |
61 | 61 | add_action( 'admin_notices', 'wpinv_admin_messages' ); |
62 | 62 |
@@ -13,154 +13,154 @@ |
||
13 | 13 | */ |
14 | 14 | class GetPaid_MaxMind_Database_Service { |
15 | 15 | |
16 | - /** |
|
17 | - * The name of the MaxMind database to utilize. |
|
18 | - */ |
|
19 | - const DATABASE = 'GeoLite2-Country'; |
|
20 | - |
|
21 | - /** |
|
22 | - * The extension for the MaxMind database. |
|
23 | - */ |
|
24 | - const DATABASE_EXTENSION = '.mmdb'; |
|
25 | - |
|
26 | - /** |
|
27 | - * A prefix for the MaxMind database filename. |
|
28 | - * |
|
29 | - * @var string |
|
30 | - */ |
|
31 | - private $database_prefix; |
|
32 | - |
|
33 | - /** |
|
34 | - * Class constructor. |
|
35 | - * |
|
36 | - * @param string|null $database_prefix A prefix for the MaxMind database filename. |
|
37 | - */ |
|
38 | - public function __construct( $database_prefix ) { |
|
39 | - $this->database_prefix = $database_prefix; |
|
40 | - } |
|
41 | - |
|
42 | - /** |
|
43 | - * Fetches the path that the database should be stored. |
|
44 | - * |
|
45 | - * @return string The local database path. |
|
46 | - */ |
|
47 | - public function get_database_path() { |
|
48 | - $uploads_dir = wp_upload_dir(); |
|
49 | - |
|
50 | - $database_path = trailingslashit( $uploads_dir['basedir'] ) . 'invoicing/'; |
|
51 | - if ( ! empty( $this->database_prefix ) ) { |
|
52 | - $database_path .= $this->database_prefix . '-'; |
|
53 | - } |
|
54 | - $database_path .= self::DATABASE . self::DATABASE_EXTENSION; |
|
55 | - |
|
56 | - // Filter the geolocation database storage path. |
|
57 | - return apply_filters( 'getpaid_maxmind_geolocation_database_path', $database_path ); |
|
58 | - } |
|
59 | - |
|
60 | - /** |
|
61 | - * Fetches the database from the MaxMind service. |
|
62 | - * |
|
63 | - * @param string $license_key The license key to be used when downloading the database. |
|
64 | - * @return string|WP_Error The path to the database file or an error if invalid. |
|
65 | - */ |
|
66 | - public function download_database( $license_key ) { |
|
67 | - |
|
68 | - $download_uri = add_query_arg( |
|
69 | - array( |
|
70 | - 'edition_id' => self::DATABASE, |
|
71 | - 'license_key' => urlencode( wpinv_clean( $license_key ) ), |
|
72 | - 'suffix' => 'tar.gz', |
|
73 | - ), |
|
74 | - 'https://download.maxmind.com/app/geoip_download' |
|
75 | - ); |
|
76 | - |
|
77 | - // Needed for the download_url call right below. |
|
78 | - require_once ABSPATH . 'wp-admin/includes/file.php'; |
|
79 | - |
|
80 | - $tmp_archive_path = download_url( esc_url_raw( $download_uri ) ); |
|
81 | - |
|
82 | - if ( is_wp_error( $tmp_archive_path ) ) { |
|
83 | - // Transform the error into something more informative. |
|
84 | - $error_data = $tmp_archive_path->get_error_data(); |
|
85 | - if ( isset( $error_data['code'] ) && $error_data['code'] == 401 ) { |
|
86 | - return new WP_Error( |
|
87 | - 'getpaid_maxmind_geolocation_database_license_key', |
|
88 | - __( 'The MaxMind license key is invalid. If you have recently created this key, you may need to wait for it to become active.', 'invoicing' ) |
|
89 | - ); |
|
90 | - } |
|
91 | - |
|
92 | - return new WP_Error( 'getpaid_maxmind_geolocation_database_download', __( 'Failed to download the MaxMind database.', 'invoicing' ) ); |
|
93 | - } |
|
94 | - |
|
95 | - // Extract the database from the archive. |
|
96 | - return $this->extract_downloaded_database( $tmp_archive_path ); |
|
97 | - |
|
98 | - } |
|
99 | - |
|
100 | - /** |
|
101 | - * Extracts the downloaded database. |
|
102 | - * |
|
103 | - * @param string $tmp_archive_path The database archive path. |
|
104 | - * @return string|WP_Error The path to the database file or an error if invalid. |
|
105 | - */ |
|
106 | - protected function extract_downloaded_database( $tmp_archive_path ) { |
|
107 | - |
|
108 | - // Extract the database from the archive. |
|
109 | - $tmp_database_path = ''; |
|
110 | - |
|
111 | - try { |
|
112 | - |
|
113 | - $file = new PharData( $tmp_archive_path ); |
|
114 | - $tmp_database_path = trailingslashit( dirname( $tmp_archive_path ) ) . trailingslashit( $file->current()->getFilename() ) . self::DATABASE . self::DATABASE_EXTENSION; |
|
115 | - |
|
116 | - $file->extractTo( |
|
117 | - dirname( $tmp_archive_path ), |
|
118 | - trailingslashit( $file->current()->getFilename() ) . self::DATABASE . self::DATABASE_EXTENSION, |
|
119 | - true |
|
120 | - ); |
|
121 | - |
|
122 | - } catch ( Exception $exception ) { |
|
123 | - return new WP_Error( 'invoicing_maxmind_geolocation_database_archive', $exception->getMessage() ); |
|
124 | - } finally { |
|
125 | - // Remove the archive since we only care about a single file in it. |
|
126 | - unlink( $tmp_archive_path ); |
|
127 | - } |
|
128 | - |
|
129 | - return $tmp_database_path; |
|
130 | - } |
|
131 | - |
|
132 | - /** |
|
133 | - * Fetches the ISO country code associated with an IP address. |
|
134 | - * |
|
135 | - * @param string $ip_address The IP address to find the country code for. |
|
136 | - * @return string The country code for the IP address, or empty if not found. |
|
137 | - */ |
|
138 | - public function get_iso_country_code_for_ip( $ip_address ) { |
|
139 | - $country_code = ''; |
|
140 | - |
|
141 | - if ( ! class_exists( 'MaxMind\Db\Reader' ) ) { |
|
142 | - return $country_code; |
|
143 | - } |
|
144 | - |
|
145 | - $database_path = $this->get_database_path(); |
|
146 | - if ( ! file_exists( $database_path ) ) { |
|
147 | - return $country_code; |
|
148 | - } |
|
149 | - |
|
150 | - try { |
|
151 | - $reader = new MaxMind\Db\Reader( $database_path ); |
|
152 | - $data = $reader->get( $ip_address ); |
|
153 | - |
|
154 | - if ( isset( $data['country']['iso_code'] ) ) { |
|
155 | - $country_code = $data['country']['iso_code']; |
|
156 | - } |
|
157 | - |
|
158 | - $reader->close(); |
|
159 | - } catch ( Exception $e ) { |
|
160 | - wpinv_error_log( $e->getMessage(), 'SOURCE: MaxMind GeoLocation' ); |
|
161 | - } |
|
162 | - |
|
163 | - return $country_code; |
|
164 | - } |
|
16 | + /** |
|
17 | + * The name of the MaxMind database to utilize. |
|
18 | + */ |
|
19 | + const DATABASE = 'GeoLite2-Country'; |
|
20 | + |
|
21 | + /** |
|
22 | + * The extension for the MaxMind database. |
|
23 | + */ |
|
24 | + const DATABASE_EXTENSION = '.mmdb'; |
|
25 | + |
|
26 | + /** |
|
27 | + * A prefix for the MaxMind database filename. |
|
28 | + * |
|
29 | + * @var string |
|
30 | + */ |
|
31 | + private $database_prefix; |
|
32 | + |
|
33 | + /** |
|
34 | + * Class constructor. |
|
35 | + * |
|
36 | + * @param string|null $database_prefix A prefix for the MaxMind database filename. |
|
37 | + */ |
|
38 | + public function __construct( $database_prefix ) { |
|
39 | + $this->database_prefix = $database_prefix; |
|
40 | + } |
|
41 | + |
|
42 | + /** |
|
43 | + * Fetches the path that the database should be stored. |
|
44 | + * |
|
45 | + * @return string The local database path. |
|
46 | + */ |
|
47 | + public function get_database_path() { |
|
48 | + $uploads_dir = wp_upload_dir(); |
|
49 | + |
|
50 | + $database_path = trailingslashit( $uploads_dir['basedir'] ) . 'invoicing/'; |
|
51 | + if ( ! empty( $this->database_prefix ) ) { |
|
52 | + $database_path .= $this->database_prefix . '-'; |
|
53 | + } |
|
54 | + $database_path .= self::DATABASE . self::DATABASE_EXTENSION; |
|
55 | + |
|
56 | + // Filter the geolocation database storage path. |
|
57 | + return apply_filters( 'getpaid_maxmind_geolocation_database_path', $database_path ); |
|
58 | + } |
|
59 | + |
|
60 | + /** |
|
61 | + * Fetches the database from the MaxMind service. |
|
62 | + * |
|
63 | + * @param string $license_key The license key to be used when downloading the database. |
|
64 | + * @return string|WP_Error The path to the database file or an error if invalid. |
|
65 | + */ |
|
66 | + public function download_database( $license_key ) { |
|
67 | + |
|
68 | + $download_uri = add_query_arg( |
|
69 | + array( |
|
70 | + 'edition_id' => self::DATABASE, |
|
71 | + 'license_key' => urlencode( wpinv_clean( $license_key ) ), |
|
72 | + 'suffix' => 'tar.gz', |
|
73 | + ), |
|
74 | + 'https://download.maxmind.com/app/geoip_download' |
|
75 | + ); |
|
76 | + |
|
77 | + // Needed for the download_url call right below. |
|
78 | + require_once ABSPATH . 'wp-admin/includes/file.php'; |
|
79 | + |
|
80 | + $tmp_archive_path = download_url( esc_url_raw( $download_uri ) ); |
|
81 | + |
|
82 | + if ( is_wp_error( $tmp_archive_path ) ) { |
|
83 | + // Transform the error into something more informative. |
|
84 | + $error_data = $tmp_archive_path->get_error_data(); |
|
85 | + if ( isset( $error_data['code'] ) && $error_data['code'] == 401 ) { |
|
86 | + return new WP_Error( |
|
87 | + 'getpaid_maxmind_geolocation_database_license_key', |
|
88 | + __( 'The MaxMind license key is invalid. If you have recently created this key, you may need to wait for it to become active.', 'invoicing' ) |
|
89 | + ); |
|
90 | + } |
|
91 | + |
|
92 | + return new WP_Error( 'getpaid_maxmind_geolocation_database_download', __( 'Failed to download the MaxMind database.', 'invoicing' ) ); |
|
93 | + } |
|
94 | + |
|
95 | + // Extract the database from the archive. |
|
96 | + return $this->extract_downloaded_database( $tmp_archive_path ); |
|
97 | + |
|
98 | + } |
|
99 | + |
|
100 | + /** |
|
101 | + * Extracts the downloaded database. |
|
102 | + * |
|
103 | + * @param string $tmp_archive_path The database archive path. |
|
104 | + * @return string|WP_Error The path to the database file or an error if invalid. |
|
105 | + */ |
|
106 | + protected function extract_downloaded_database( $tmp_archive_path ) { |
|
107 | + |
|
108 | + // Extract the database from the archive. |
|
109 | + $tmp_database_path = ''; |
|
110 | + |
|
111 | + try { |
|
112 | + |
|
113 | + $file = new PharData( $tmp_archive_path ); |
|
114 | + $tmp_database_path = trailingslashit( dirname( $tmp_archive_path ) ) . trailingslashit( $file->current()->getFilename() ) . self::DATABASE . self::DATABASE_EXTENSION; |
|
115 | + |
|
116 | + $file->extractTo( |
|
117 | + dirname( $tmp_archive_path ), |
|
118 | + trailingslashit( $file->current()->getFilename() ) . self::DATABASE . self::DATABASE_EXTENSION, |
|
119 | + true |
|
120 | + ); |
|
121 | + |
|
122 | + } catch ( Exception $exception ) { |
|
123 | + return new WP_Error( 'invoicing_maxmind_geolocation_database_archive', $exception->getMessage() ); |
|
124 | + } finally { |
|
125 | + // Remove the archive since we only care about a single file in it. |
|
126 | + unlink( $tmp_archive_path ); |
|
127 | + } |
|
128 | + |
|
129 | + return $tmp_database_path; |
|
130 | + } |
|
131 | + |
|
132 | + /** |
|
133 | + * Fetches the ISO country code associated with an IP address. |
|
134 | + * |
|
135 | + * @param string $ip_address The IP address to find the country code for. |
|
136 | + * @return string The country code for the IP address, or empty if not found. |
|
137 | + */ |
|
138 | + public function get_iso_country_code_for_ip( $ip_address ) { |
|
139 | + $country_code = ''; |
|
140 | + |
|
141 | + if ( ! class_exists( 'MaxMind\Db\Reader' ) ) { |
|
142 | + return $country_code; |
|
143 | + } |
|
144 | + |
|
145 | + $database_path = $this->get_database_path(); |
|
146 | + if ( ! file_exists( $database_path ) ) { |
|
147 | + return $country_code; |
|
148 | + } |
|
149 | + |
|
150 | + try { |
|
151 | + $reader = new MaxMind\Db\Reader( $database_path ); |
|
152 | + $data = $reader->get( $ip_address ); |
|
153 | + |
|
154 | + if ( isset( $data['country']['iso_code'] ) ) { |
|
155 | + $country_code = $data['country']['iso_code']; |
|
156 | + } |
|
157 | + |
|
158 | + $reader->close(); |
|
159 | + } catch ( Exception $e ) { |
|
160 | + wpinv_error_log( $e->getMessage(), 'SOURCE: MaxMind GeoLocation' ); |
|
161 | + } |
|
162 | + |
|
163 | + return $country_code; |
|
164 | + } |
|
165 | 165 | |
166 | 166 | } |
@@ -215,16 +215,16 @@ discard block |
||
215 | 215 | function getpaid_prepare_item_tax( $item, $tax_name, $tax_amount, $recurring_tax_amount ) { |
216 | 216 | |
217 | 217 | $initial_tax = $tax_amount; |
218 | - $recurring_tax = 0; |
|
218 | + $recurring_tax = 0; |
|
219 | 219 | |
220 | 220 | if ( $item->is_recurring() ) { |
221 | - $recurring_tax = $recurring_tax_amount; |
|
222 | - } |
|
221 | + $recurring_tax = $recurring_tax_amount; |
|
222 | + } |
|
223 | 223 | |
224 | - return array( |
|
225 | - 'name' => sanitize_text_field( $tax_name ), |
|
226 | - 'initial_tax' => $initial_tax, |
|
227 | - 'recurring_tax' => $recurring_tax, |
|
224 | + return array( |
|
225 | + 'name' => sanitize_text_field( $tax_name ), |
|
226 | + 'initial_tax' => $initial_tax, |
|
227 | + 'recurring_tax' => $recurring_tax, |
|
228 | 228 | ); |
229 | 229 | |
230 | 230 | } |
@@ -328,7 +328,7 @@ discard block |
||
328 | 328 | */ |
329 | 329 | function wpinv_should_validate_vat_number() { |
330 | 330 | $validate = wpinv_get_option( 'validate_vat_number' ); |
331 | - return ! empty( $validate ); |
|
331 | + return ! empty( $validate ); |
|
332 | 332 | } |
333 | 333 | |
334 | 334 | function wpinv_sales_tax_for_year( $year = null ) { |
@@ -8,7 +8,7 @@ discard block |
||
8 | 8 | */ |
9 | 9 | |
10 | 10 | if ( ! defined( 'ABSPATH' ) ) { |
11 | - exit; // Exit if accessed directly |
|
11 | + exit; // Exit if accessed directly |
|
12 | 12 | } |
13 | 13 | |
14 | 14 | /** |
@@ -17,10 +17,10 @@ discard block |
||
17 | 17 | class GetPaid_Meta_Box_Item_VAT { |
18 | 18 | |
19 | 19 | /** |
20 | - * Output the metabox. |
|
21 | - * |
|
22 | - * @param WP_Post $post |
|
23 | - */ |
|
20 | + * Output the metabox. |
|
21 | + * |
|
22 | + * @param WP_Post $post |
|
23 | + */ |
|
24 | 24 | public static function output( $post ) { |
25 | 25 | |
26 | 26 | // Prepare the item. |
@@ -46,10 +46,10 @@ discard block |
||
46 | 46 | } |
47 | 47 | |
48 | 48 | /** |
49 | - * Output the VAT rules settings. |
|
50 | - * |
|
51 | - * @param WPInv_Item $item |
|
52 | - */ |
|
49 | + * Output the VAT rules settings. |
|
50 | + * |
|
51 | + * @param WPInv_Item $item |
|
52 | + */ |
|
53 | 53 | public static function output_vat_rules( $item ) { |
54 | 54 | ?> |
55 | 55 | |
@@ -87,10 +87,10 @@ discard block |
||
87 | 87 | } |
88 | 88 | |
89 | 89 | /** |
90 | - * Output the VAT class settings. |
|
91 | - * |
|
92 | - * @param WPInv_Item $item |
|
93 | - */ |
|
90 | + * Output the VAT class settings. |
|
91 | + * |
|
92 | + * @param WPInv_Item $item |
|
93 | + */ |
|
94 | 94 | public static function output_vat_classes( $item ) { |
95 | 95 | ?> |
96 | 96 |