Version Description
01-04-2021 =
Fix - Transaction ID missing
Download this release
Release Info
Developer | carmen222 |
Plugin | Mollie Payments for WooCommerce |
Version | 6.2.1 |
Comparing to | |
See all releases |
Code changes from version 6.2.0 to 6.2.1
- mollie-payments-for-woocommerce.php +13 -14
- readme.txt +5 -1
- src/Mollie/WC/Gateway/IngHomePay.php +0 -46
- src/Mollie/WC/Payment/Order.php +3 -3
- src/Mollie/WC/Payment/Payment.php +1 -1
- src/Mollie/WC/Plugin.php +1 -1
- src/subscriptions_status_check_functions.php +5 -14
- vendor/mollie/mollie-api-php/vendor/symfony/polyfill-intl-idn/bootstrap.php +0 -1
- vendor/mollie/mollie-api-php/vendor/symfony/polyfill-intl-normalizer/Normalizer.php +18 -18
mollie-payments-for-woocommerce.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
* Plugin Name: Mollie Payments for WooCommerce
|
4 |
* Plugin URI: https://www.mollie.com
|
5 |
* Description: Accept payments in WooCommerce with the official Mollie plugin
|
6 |
-
* Version: 6.2.
|
7 |
* Author: Mollie
|
8 |
* Author URI: https://www.mollie.com
|
9 |
* Requires at least: 3.8
|
@@ -100,20 +100,19 @@ function mollieWcNoticeApiKeyMissing(){
|
|
100 |
|
101 |
function mollie_wc_plugin_autoload()
|
102 |
{
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
if (file_exists($mollieSdkAutoload)) {
|
111 |
-
/** @noinspection PhpIncludeInspection */
|
112 |
-
require $mollieSdkAutoload;
|
113 |
-
}
|
114 |
-
return class_exists(Mollie_WC_Plugin::class);
|
115 |
-
}
|
116 |
|
|
|
|
|
|
|
|
|
|
|
|
|
117 |
function mollie_wc_plugin_init() {
|
118 |
load_plugin_textdomain('mollie-payments-for-woocommerce', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/');
|
119 |
Mollie_WC_Plugin::init();
|
3 |
* Plugin Name: Mollie Payments for WooCommerce
|
4 |
* Plugin URI: https://www.mollie.com
|
5 |
* Description: Accept payments in WooCommerce with the official Mollie plugin
|
6 |
+
* Version: 6.2.1
|
7 |
* Author: Mollie
|
8 |
* Author URI: https://www.mollie.com
|
9 |
* Requires at least: 3.8
|
100 |
|
101 |
function mollie_wc_plugin_autoload()
|
102 |
{
|
103 |
+
$autoloader = __DIR__ . '/vendor/autoload.php';
|
104 |
+
$mollieSdkAutoload = __DIR__ . '/vendor/mollie/mollie-api-php/vendor/autoload.php';
|
105 |
+
if (file_exists($autoloader)) {
|
106 |
+
/** @noinspection PhpIncludeInspection */
|
107 |
+
require $autoloader;
|
108 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
109 |
|
110 |
+
if (file_exists($mollieSdkAutoload)) {
|
111 |
+
/** @noinspection PhpIncludeInspection */
|
112 |
+
require $mollieSdkAutoload;
|
113 |
+
}
|
114 |
+
return class_exists(Mollie_WC_Plugin::class);
|
115 |
+
}
|
116 |
function mollie_wc_plugin_init() {
|
117 |
load_plugin_textdomain('mollie-payments-for-woocommerce', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/');
|
118 |
Mollie_WC_Plugin::init();
|
readme.txt
CHANGED
@@ -3,7 +3,7 @@ Contributors: daanvm, danielhuesken, davdebcom, dinamiko, inpsyde, l.vangunst, n
|
|
3 |
Tags: mollie, payments, payment gateway, woocommerce, credit card, ideal, bancontact, klarna, sofort, giropay, woocommerce subscriptions
|
4 |
Requires at least: 3.8
|
5 |
Tested up to: 5.7
|
6 |
-
Stable tag: 6.2.
|
7 |
Requires PHP: 5.6
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
@@ -181,6 +181,10 @@ Automatic updates should work like a charm; as always though, ensure you backup
|
|
181 |
|
182 |
== Changelog ==
|
183 |
|
|
|
|
|
|
|
|
|
184 |
= 6.2.0 - 22-03-2021 =
|
185 |
|
186 |
* Feature - No longer support for WooCommerce version below 3.0
|
3 |
Tags: mollie, payments, payment gateway, woocommerce, credit card, ideal, bancontact, klarna, sofort, giropay, woocommerce subscriptions
|
4 |
Requires at least: 3.8
|
5 |
Tested up to: 5.7
|
6 |
+
Stable tag: 6.2.1
|
7 |
Requires PHP: 5.6
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
181 |
|
182 |
== Changelog ==
|
183 |
|
184 |
+
= 6.2.1 - 01-04-2021 =
|
185 |
+
|
186 |
+
* Fix - Transaction ID missing
|
187 |
+
|
188 |
= 6.2.0 - 22-03-2021 =
|
189 |
|
190 |
* Feature - No longer support for WooCommerce version below 3.0
|
src/Mollie/WC/Gateway/IngHomePay.php
DELETED
@@ -1,46 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
use Mollie\Api\Types\PaymentMethod;
|
4 |
-
|
5 |
-
class Mollie_WC_Gateway_IngHomePay extends Mollie_WC_Gateway_AbstractSepaRecurring {
|
6 |
-
/**
|
7 |
-
*
|
8 |
-
*/
|
9 |
-
public function __construct() {
|
10 |
-
$this->supports = array (
|
11 |
-
'products',
|
12 |
-
'refunds',
|
13 |
-
);
|
14 |
-
|
15 |
-
parent::__construct();
|
16 |
-
}
|
17 |
-
|
18 |
-
/**
|
19 |
-
* @return string
|
20 |
-
*/
|
21 |
-
public function getMollieMethodId() {
|
22 |
-
return PaymentMethod::INGHOMEPAY;
|
23 |
-
}
|
24 |
-
|
25 |
-
/**
|
26 |
-
* @return string
|
27 |
-
*/
|
28 |
-
public function getDefaultTitle() {
|
29 |
-
return __( 'ING Home\'Pay', 'mollie-payments-for-woocommerce' );
|
30 |
-
}
|
31 |
-
|
32 |
-
/**
|
33 |
-
* @return string
|
34 |
-
*/
|
35 |
-
protected function getSettingsDescription() {
|
36 |
-
return '';
|
37 |
-
}
|
38 |
-
|
39 |
-
/**
|
40 |
-
* @return string
|
41 |
-
*/
|
42 |
-
protected function getDefaultDescription() {
|
43 |
-
return '';
|
44 |
-
}
|
45 |
-
|
46 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/Mollie/WC/Payment/Order.php
CHANGED
@@ -245,7 +245,7 @@ class Mollie_WC_Payment_Order extends Mollie_WC_Payment_Object {
|
|
245 |
// Add messages to log
|
246 |
Mollie_WC_Plugin::debug( __METHOD__ . " called for order {$orderId}" );
|
247 |
|
248 |
-
$order->payment_complete();
|
249 |
|
250 |
// Add messages to log
|
251 |
Mollie_WC_Plugin::debug( __METHOD__ . ' WooCommerce payment_complete() processed and returned to ' . __METHOD__ . " for order {$orderId}" );
|
@@ -296,7 +296,7 @@ class Mollie_WC_Payment_Order extends Mollie_WC_Payment_Object {
|
|
296 |
Mollie_WC_Plugin::debug( __METHOD__ . ' called for order ' . $orderId );
|
297 |
|
298 |
// WooCommerce 2.2.0 has the option to store the Payment transaction id.
|
299 |
-
$order->payment_complete();
|
300 |
|
301 |
// Add messages to log
|
302 |
Mollie_WC_Plugin::debug( __METHOD__ . ' WooCommerce payment_complete() processed and returned to ' . __METHOD__ . ' for order ' . $orderId );
|
@@ -340,7 +340,7 @@ class Mollie_WC_Payment_Order extends Mollie_WC_Payment_Object {
|
|
340 |
// Add messages to log
|
341 |
Mollie_WC_Plugin::debug( __METHOD__ . ' called for order ' . $orderId );
|
342 |
|
343 |
-
$order->payment_complete();
|
344 |
// Add messages to log
|
345 |
Mollie_WC_Plugin::debug( __METHOD__ . ' WooCommerce payment_complete() processed and returned to ' . __METHOD__ . ' for order ' . $orderId );
|
346 |
|
245 |
// Add messages to log
|
246 |
Mollie_WC_Plugin::debug( __METHOD__ . " called for order {$orderId}" );
|
247 |
|
248 |
+
$order->payment_complete($payment->id);
|
249 |
|
250 |
// Add messages to log
|
251 |
Mollie_WC_Plugin::debug( __METHOD__ . ' WooCommerce payment_complete() processed and returned to ' . __METHOD__ . " for order {$orderId}" );
|
296 |
Mollie_WC_Plugin::debug( __METHOD__ . ' called for order ' . $orderId );
|
297 |
|
298 |
// WooCommerce 2.2.0 has the option to store the Payment transaction id.
|
299 |
+
$order->payment_complete($payment->id);
|
300 |
|
301 |
// Add messages to log
|
302 |
Mollie_WC_Plugin::debug( __METHOD__ . ' WooCommerce payment_complete() processed and returned to ' . __METHOD__ . ' for order ' . $orderId );
|
340 |
// Add messages to log
|
341 |
Mollie_WC_Plugin::debug( __METHOD__ . ' called for order ' . $orderId );
|
342 |
|
343 |
+
$order->payment_complete($payment->id);
|
344 |
// Add messages to log
|
345 |
Mollie_WC_Plugin::debug( __METHOD__ . ' WooCommerce payment_complete() processed and returned to ' . __METHOD__ . ' for order ' . $orderId );
|
346 |
|
src/Mollie/WC/Payment/Payment.php
CHANGED
@@ -204,7 +204,7 @@ class Mollie_WC_Payment_Payment extends Mollie_WC_Payment_Object {
|
|
204 |
Mollie_WC_Plugin::debug( __METHOD__ . ' called for payment ' . $orderId );
|
205 |
|
206 |
// WooCommerce 2.2.0 has the option to store the Payment transaction id.
|
207 |
-
$order->payment_complete();
|
208 |
|
209 |
// Add messages to log
|
210 |
Mollie_WC_Plugin::debug( __METHOD__ . ' WooCommerce payment_complete() processed and returned to ' . __METHOD__ . ' for payment ' . $orderId );
|
204 |
Mollie_WC_Plugin::debug( __METHOD__ . ' called for payment ' . $orderId );
|
205 |
|
206 |
// WooCommerce 2.2.0 has the option to store the Payment transaction id.
|
207 |
+
$order->payment_complete($payment->id);
|
208 |
|
209 |
// Add messages to log
|
210 |
Mollie_WC_Plugin::debug( __METHOD__ . ' WooCommerce payment_complete() processed and returned to ' . __METHOD__ . ' for payment ' . $orderId );
|
src/Mollie/WC/Plugin.php
CHANGED
@@ -8,7 +8,7 @@ class Mollie_WC_Plugin
|
|
8 |
{
|
9 |
const PLUGIN_ID = 'mollie-payments-for-woocommerce';
|
10 |
const PLUGIN_TITLE = 'Mollie Payments for WooCommerce';
|
11 |
-
const PLUGIN_VERSION = '6.2.
|
12 |
|
13 |
const DB_VERSION = '1.0';
|
14 |
const DB_VERSION_PARAM_NAME = 'mollie-db-version';
|
8 |
{
|
9 |
const PLUGIN_ID = 'mollie-payments-for-woocommerce';
|
10 |
const PLUGIN_TITLE = 'Mollie Payments for WooCommerce';
|
11 |
+
const PLUGIN_VERSION = '6.2.1';
|
12 |
|
13 |
const DB_VERSION = '1.0';
|
14 |
const DB_VERSION_PARAM_NAME = 'mollie-db-version';
|
src/subscriptions_status_check_functions.php
CHANGED
@@ -62,22 +62,13 @@ class WC_Tools_Subscriptions_Status_Button {
|
|
62 |
// Loop through all subscriptions
|
63 |
foreach ( $subscriptions as $subscription ) {
|
64 |
|
65 |
-
|
66 |
-
if ( version_compare( mollieWooCommerceWcVersion(), '3.0', '<' ) ) {
|
67 |
-
$subscription_is_manual = get_post_meta( $subscription->id, '_requires_manual_renewal', true );
|
68 |
-
$subscription_status = $subscription->status;
|
69 |
|
70 |
-
|
71 |
-
|
72 |
-
} else {
|
73 |
-
$subscription = new WC_Subscription( $subscription->ID );
|
74 |
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
$mollie_customer_id = $subscription->get_meta( '_mollie_customer_id' );
|
79 |
-
$subscription_id = $subscription->get_id();
|
80 |
-
}
|
81 |
|
82 |
// Only continue if the subscription is set to require manual renewal and status is On-Hold
|
83 |
if ( ( $subscription_is_manual ) && ( $subscription_status == 'on-hold' ) ) {
|
62 |
// Loop through all subscriptions
|
63 |
foreach ( $subscriptions as $subscription ) {
|
64 |
|
65 |
+
$subscription = new WC_Subscription( $subscription->ID );
|
|
|
|
|
|
|
66 |
|
67 |
+
$subscription_is_manual = $subscription->is_manual();
|
68 |
+
$subscription_status = $subscription->get_status();
|
|
|
|
|
69 |
|
70 |
+
$mollie_customer_id = $subscription->get_meta( '_mollie_customer_id' );
|
71 |
+
$subscription_id = $subscription->get_id();
|
|
|
|
|
|
|
|
|
72 |
|
73 |
// Only continue if the subscription is set to require manual renewal and status is On-Hold
|
74 |
if ( ( $subscription_is_manual ) && ( $subscription_status == 'on-hold' ) ) {
|
vendor/mollie/mollie-api-php/vendor/symfony/polyfill-intl-idn/bootstrap.php
CHANGED
@@ -14,7 +14,6 @@ use _PhpScoper3234cdc49fbb\Symfony\Polyfill\Intl\Idn as p;
|
|
14 |
if (\extension_loaded('intl')) {
|
15 |
return;
|
16 |
}
|
17 |
-
|
18 |
if (!\defined('U_IDNA_PROHIBITED_ERROR')) {
|
19 |
\define('U_IDNA_PROHIBITED_ERROR', 66560);
|
20 |
}
|
14 |
if (\extension_loaded('intl')) {
|
15 |
return;
|
16 |
}
|
|
|
17 |
if (!\defined('U_IDNA_PROHIBITED_ERROR')) {
|
18 |
\define('U_IDNA_PROHIBITED_ERROR', 66560);
|
19 |
}
|
vendor/mollie/mollie-api-php/vendor/symfony/polyfill-intl-normalizer/Normalizer.php
CHANGED
@@ -22,19 +22,19 @@ namespace _PhpScoper3234cdc49fbb\Symfony\Polyfill\Intl\Normalizer;
|
|
22 |
*/
|
23 |
class Normalizer
|
24 |
{
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
private static $C;
|
34 |
private static $D;
|
35 |
private static $KD;
|
36 |
private static $cC;
|
37 |
-
private static $ulenMask = ["�" => 2, "�" => 2, "�" => 3, "�" => 4];
|
38 |
private static $ASCII = " eiasntrolud][cmp'\ng|hv.fb,:=-q10C2*yx)(L9AS/P\"EjMIk3>5T<D4}B{8FwR67UGN;JzV#HOW_&!K?XQ%Y\\\tZ+~^\$@`\0\1\2\3\4\5\6\7\10\v\f\r\16\17\20\21\22\23\24\25\26\27\30\31\32\33\34\35\36\37";
|
39 |
public static function isNormalized(string $s, int $form = self::FORM_C)
|
40 |
{
|
@@ -49,7 +49,7 @@ class Normalizer
|
|
49 |
}
|
50 |
return self::normalize($s, $form) === $s;
|
51 |
}
|
52 |
-
public static function normalize(
|
53 |
{
|
54 |
if (!\preg_match('//u', $s)) {
|
55 |
return \false;
|
@@ -112,12 +112,12 @@ class Normalizer
|
|
112 |
$combClass = self::$cC;
|
113 |
$ulenMask = self::$ulenMask;
|
114 |
$result = $tail = '';
|
115 |
-
$i = $s[0] < "�" ? 1 : $ulenMask[$s[0] & "�"];
|
116 |
$len = \strlen($s);
|
117 |
$lastUchr = \substr($s, 0, $i);
|
118 |
$lastUcls = isset($combClass[$lastUchr]) ? 256 : 0;
|
119 |
while ($i < $len) {
|
120 |
-
if ($s[$i] < "�") {
|
121 |
// ASCII chars
|
122 |
if ($tail) {
|
123 |
$lastUchr .= $tail;
|
@@ -133,7 +133,7 @@ class Normalizer
|
|
133 |
++$i;
|
134 |
continue;
|
135 |
}
|
136 |
-
$ulen = $ulenMask[$s[$i] & "�"];
|
137 |
$uchr = \substr($s, $i, $ulen);
|
138 |
if ($lastUchr < "ᄀ" || "ᄒ" < $lastUchr || $uchr < "ᅡ" || "ᅵ" < $uchr || $lastUcls) {
|
139 |
// Table lookup and combining chars composition
|
@@ -182,7 +182,7 @@ class Normalizer
|
|
182 |
$i = 0;
|
183 |
$len = \strlen($s);
|
184 |
while ($i < $len) {
|
185 |
-
if ($s[$i] < "�") {
|
186 |
// ASCII chars
|
187 |
if ($c) {
|
188 |
\ksort($c);
|
@@ -194,7 +194,7 @@ class Normalizer
|
|
194 |
$i += $j;
|
195 |
continue;
|
196 |
}
|
197 |
-
$ulen = $ulenMask[$s[$i] & "�"];
|
198 |
$uchr = \substr($s, $i, $ulen);
|
199 |
$i += $ulen;
|
200 |
if ($uchr < "가" || "힣" < $uchr) {
|
@@ -202,7 +202,7 @@ class Normalizer
|
|
202 |
if ($uchr !== ($j = $compatMap[$uchr] ?? $decompMap[$uchr] ?? $uchr)) {
|
203 |
$uchr = $j;
|
204 |
$j = \strlen($uchr);
|
205 |
-
$ulen = $uchr[0] < "�" ? 1 : $ulenMask[$uchr[0] & "�"];
|
206 |
if ($ulen != $j) {
|
207 |
// Put trailing chars in $s
|
208 |
$j -= $ulen;
|
@@ -230,9 +230,9 @@ class Normalizer
|
|
230 |
// Hangul chars
|
231 |
$uchr = \unpack('C*', $uchr);
|
232 |
$j = ($uchr[1] - 224 << 12) + ($uchr[2] - 128 << 6) + $uchr[3] - 0xac80;
|
233 |
-
$uchr = "�" . \chr(0x80 + (int) ($j / 588)) . "�" . \chr(0xa1 + (int) ($j % 588 / 28));
|
234 |
if ($j %= 28) {
|
235 |
-
$uchr .= $j < 25 ? "�" . \chr(0xa7 + $j) : "�" . \chr(0x67 + $j);
|
236 |
}
|
237 |
}
|
238 |
if ($c) {
|
22 |
*/
|
23 |
class Normalizer
|
24 |
{
|
25 |
+
const FORM_D = \Normalizer::FORM_D;
|
26 |
+
const FORM_KD = \Normalizer::FORM_KD;
|
27 |
+
const FORM_C = \Normalizer::FORM_C;
|
28 |
+
const FORM_KC = \Normalizer::FORM_KC;
|
29 |
+
const NFD = \Normalizer::NFD;
|
30 |
+
const NFKD = \Normalizer::NFKD;
|
31 |
+
const NFC = \Normalizer::NFC;
|
32 |
+
const NFKC = \Normalizer::NFKC;
|
33 |
private static $C;
|
34 |
private static $D;
|
35 |
private static $KD;
|
36 |
private static $cC;
|
37 |
+
private static $ulenMask = ["�" => 2, "�" => 2, "�" => 3, "�" => 4];
|
38 |
private static $ASCII = " eiasntrolud][cmp'\ng|hv.fb,:=-q10C2*yx)(L9AS/P\"EjMIk3>5T<D4}B{8FwR67UGN;JzV#HOW_&!K?XQ%Y\\\tZ+~^\$@`\0\1\2\3\4\5\6\7\10\v\f\r\16\17\20\21\22\23\24\25\26\27\30\31\32\33\34\35\36\37";
|
39 |
public static function isNormalized(string $s, int $form = self::FORM_C)
|
40 |
{
|
49 |
}
|
50 |
return self::normalize($s, $form) === $s;
|
51 |
}
|
52 |
+
public static function normalize($s, $form = self::FORM_C)
|
53 |
{
|
54 |
if (!\preg_match('//u', $s)) {
|
55 |
return \false;
|
112 |
$combClass = self::$cC;
|
113 |
$ulenMask = self::$ulenMask;
|
114 |
$result = $tail = '';
|
115 |
+
$i = $s[0] < "�" ? 1 : $ulenMask[$s[0] & "�"];
|
116 |
$len = \strlen($s);
|
117 |
$lastUchr = \substr($s, 0, $i);
|
118 |
$lastUcls = isset($combClass[$lastUchr]) ? 256 : 0;
|
119 |
while ($i < $len) {
|
120 |
+
if ($s[$i] < "�") {
|
121 |
// ASCII chars
|
122 |
if ($tail) {
|
123 |
$lastUchr .= $tail;
|
133 |
++$i;
|
134 |
continue;
|
135 |
}
|
136 |
+
$ulen = $ulenMask[$s[$i] & "�"];
|
137 |
$uchr = \substr($s, $i, $ulen);
|
138 |
if ($lastUchr < "ᄀ" || "ᄒ" < $lastUchr || $uchr < "ᅡ" || "ᅵ" < $uchr || $lastUcls) {
|
139 |
// Table lookup and combining chars composition
|
182 |
$i = 0;
|
183 |
$len = \strlen($s);
|
184 |
while ($i < $len) {
|
185 |
+
if ($s[$i] < "�") {
|
186 |
// ASCII chars
|
187 |
if ($c) {
|
188 |
\ksort($c);
|
194 |
$i += $j;
|
195 |
continue;
|
196 |
}
|
197 |
+
$ulen = $ulenMask[$s[$i] & "�"];
|
198 |
$uchr = \substr($s, $i, $ulen);
|
199 |
$i += $ulen;
|
200 |
if ($uchr < "가" || "힣" < $uchr) {
|
202 |
if ($uchr !== ($j = $compatMap[$uchr] ?? $decompMap[$uchr] ?? $uchr)) {
|
203 |
$uchr = $j;
|
204 |
$j = \strlen($uchr);
|
205 |
+
$ulen = $uchr[0] < "�" ? 1 : $ulenMask[$uchr[0] & "�"];
|
206 |
if ($ulen != $j) {
|
207 |
// Put trailing chars in $s
|
208 |
$j -= $ulen;
|
230 |
// Hangul chars
|
231 |
$uchr = \unpack('C*', $uchr);
|
232 |
$j = ($uchr[1] - 224 << 12) + ($uchr[2] - 128 << 6) + $uchr[3] - 0xac80;
|
233 |
+
$uchr = "�" . \chr(0x80 + (int) ($j / 588)) . "�" . \chr(0xa1 + (int) ($j % 588 / 28));
|
234 |
if ($j %= 28) {
|
235 |
+
$uchr .= $j < 25 ? "�" . \chr(0xa7 + $j) : "�" . \chr(0x67 + $j);
|
236 |
}
|
237 |
}
|
238 |
if ($c) {
|