/** * 1.13. GoUrl Payment Box */ public static function pmpro_gourl_cryptocoin_payment($order, $invoice = false) { global $gourl, $pmpro_currency, $current_user, $wpdb; $tmp = ""; if (!$order) { $tmp .= '<h2>' . __('Information', GOURLPMP) . '</h2>' . PHP_EOL; $tmp .= "<div class='pmpro_message pmpro_error'>" . sprintf(__('The GoUrl payment plugin was called to process a payment but could not retrieve the order details for orderID %s. Cannot continue!', GOURLPMP), $order_id) . "</div>"; return $tmp; } if ($order->gateway != "gourl") { return false; } // Initialize // ------------------------ if (class_exists('gourlclass') && defined('GOURL') && is_object($gourl)) { $payments = $gourl->payments(); // Activated Payments $coin_names = $gourl->coin_names(); // All Coins $languages = $gourl->languages(); // All Languages } else { $payments = array(); $coin_names = array(); $languages = array(); } $defcoin = pmpro_getOption("gourl_defcoin"); if (!in_array($defcoin, array_keys($payments))) { $defcoin = current(array_keys($payments)); } $deflang = pmpro_getOption("gourl_deflang"); if (!in_array($deflang, array_keys($languages))) { $deflang = current(array_keys($languages)); } $emultiplier = str_replace("%", "", pmpro_getOption("gourl_emultiplier")); if (!$emultiplier || !is_numeric($emultiplier) || $emultiplier <= 0) { $emultiplier = "1.00"; } $iconwidth = str_replace("px", "", pmpro_getOption("gourl_iconwidth")); if (!$iconwidth || !is_numeric($iconwidth) || $iconwidth < 30 || $iconwidth > 250) { $iconwidth = 60; } $iconwidth = $iconwidth . "px"; // Current Order // ----------------- $order_id = $order->id; $order_total = $order->total; $order_currency = $pmpro_currency; $order_user_id = $order->user_id; // Security // ------------- if (!$order_id) { $tmp .= '<h2>' . __('Information', GOURLPMP) . '</h2>' . PHP_EOL; $tmp .= "<div class='pmpro_message pmpro_error'>" . sprintf(__('The GoUrl payment plugin was called to process a payment but could not retrieve the order details for orderID %s. Cannot continue!', GOURLPMP), $order_id) . "</div>"; } elseif ($order_user_id && $order_user_id != get_current_user_id() && !current_user_can('manage_options')) { return false; } elseif (!class_exists('gourlclass') || !defined('GOURL') || !is_object($gourl)) { $tmp .= '<h2>' . __('Information', GOURLPMP) . '</h2>' . PHP_EOL; $tmp .= "<div class='pmpro_message pmpro_error'>" . sprintf(__("Please try a different payment method. Admin need to install and activate wordpress plugin <a href='%s'>GoUrl Bitcoin Gateway for Wordpress</a> to accept Bitcoin/Altcoin Payments online.", GOURLPMP), "https://gourl.io/bitcoin-wordpress-plugin.html") . "</div>"; } elseif (!$payments || !$defcoin || true === version_compare(PMPRO_VERSION, '1.8.4', '<') || true === version_compare(GOURL_VERSION, '1.3.3', '<') || array_key_exists($order_currency, $coin_names) && !array_key_exists($order_currency, $payments)) { $tmp .= '<h2>' . __('Information', GOURLPMP) . '</h2>' . PHP_EOL; $tmp .= "<div class='pmpro_message pmpro_error'>" . sprintf(__('Sorry, but there was an error processing your order. Please try a different payment method or contact us if you need assistance (GoUrl Bitcoin Plugin not configured / %s not activated)', GOURLPMP), !$payments || !$defcoin || !isset($coin_names[$order_currency]) ? __("Cryptocurrency", GOURLPMP) : $coin_names[$order_currency]) . "</div>"; } else { $plugin = "gourlpmpro"; $amount = $order_total; $currency = $order_currency; $orderID = "order" . $order_id; $userID = $order_user_id; $period = "NOEXPIRY"; $language = $deflang; $coin = $coin_names[$defcoin]; $affiliate_key = "gourl"; $crypto = array_key_exists($currency, $coin_names); if (!$userID) { $userID = "guest"; } // allow guests to make payments if (!$userID) { $tmp .= '<h2>' . __('Information', GOURLPMP) . '</h2>' . PHP_EOL; $tmp .= "<div align='center'><a href='" . wp_login_url(get_permalink()) . "'>\n\t\t\t\t\t<img style='border:none;box-shadow:none;' title='" . __('You need first to login or register on the website to make Bitcoin/Altcoin Payments', GOURLPMP) . "' vspace='10'\n\t\t\t\t\tsrc='" . $gourl->box_image() . "' border='0'></a></div>"; } elseif ($amount <= 0) { $tmp .= '<h2>' . __('Information', GOURLPMP) . '</h2>' . PHP_EOL; $tmp .= "<div class='pmpro_message pmpro_error'>" . sprintf(__("This order's amount is '%s' - it cannot be paid for. Please contact us if you need assistance.", GOURLPMP), $amount . " " . $currency) . "</div>"; } else { // Exchange (optional) // -------------------- if ($currency != "USD" && !$crypto) { $amount = gourl_convert_currency($currency, "USD", $amount); if ($amount <= 0) { $tmp .= '<h2>' . __('Information', GOURLPMP) . '</h2>' . PHP_EOL; $tmp .= "<div class='pmpro_message pmpro_error'>" . sprintf(__('Sorry, but there was an error processing your order. Please try later or use a different payment method. Cannot receive exchange rates for %s/USD from Google Finance', GOURLPMP), $currency) . "</div>"; } else { $currency = "USD"; } } if (!$crypto) { $amount = $amount * $emultiplier; } // Payment Box // ------------------ if ($amount > 0) { // crypto payment gateway $result = $gourl->cryptopayments($plugin, $amount, $currency, $orderID, $period, $language, $coin, $affiliate_key, $userID, $iconwidth); if (!$result["is_paid"]) { // trial used before if ($userID != "guest" && get_option(GOURL . "PMPRO_FREE_" . $userID . "_" . $order->membership_id)) { $tmp .= ($invoice ? "<br>" : "") . "<i>" . sprintf(__('Free Trial already used on %s', GOURLPMP), get_option(GOURL . "PMPRO_FREE_" . $userID . "_" . $order->membership_id)) . ".</i>"; } $tmp .= '<br><h3>' . __('Pay Now -', GOURLPMP) . '</h3>' . PHP_EOL; } if ($result["error"]) { $tmp .= "<div class='pmpro_message pmpro_error'>" . __("Sorry, but there was an error processing your order. Please try a different payment method.", GOURLPMP) . "<br/>" . $result["error"] . "</div>"; } else { // display payment box or successful payment result $tmp .= $result["html_payment_box"]; if ($order_user_id == get_current_user_id()) { // payment received if ($result["is_paid"]) { if ($invoice) { $tmp .= "<div align='center'>" . __('Thank you for your membership.', GOURLPMP) . "</div>"; } else { $tmp .= "<div align='center'>" . sprintf(__('Thank you for your membership to %s.<br>Your %s membership is now active.', GOURLPMP), get_bloginfo("name"), $current_user->membership_level->name) . "</div>"; } } if (!$invoice) { $tmp .= "<br><br><div align='center'><a href=" . pmpro_url("account") . ">" . __('View Your Membership Account', GOURLPMP) . " →</a>"; } } } } } } $tmp .= "<br><br>"; return $tmp; }
public function cryptocoin_payment($order_id) { global $gourl; $order = new WC_Order($order_id); if ($order === false) { echo '<br><h2>' . __('Information', GOURLWC) . '</h2>' . PHP_EOL; echo "<div class='woocommerce-error'>" . sprintf(__('The GoUrl payment plugin was called to process a payment but could not retrieve the order details for orderID %s. Cannot continue!', GOURLWC), $order_id) . "</div>"; } elseif ($order->status == "cancelled" || $order->post_status == "wc-cancelled") { echo '<br><h2>' . __('Information', GOURLWC) . '</h2>' . PHP_EOL; echo "<div class='woocommerce-error'>" . __("This order's status is 'Cancelled' - it cannot be paid for. Please contact us if you need assistance.", GOURLWC) . "</div>"; } elseif (!class_exists('gourlclass') || !defined('GOURL') || !is_object($gourl)) { echo '<br><h2>' . __('Information', GOURLWC) . '</h2>' . PHP_EOL; echo "<div class='woocommerce-error'>" . sprintf(__("Please try a different payment method. Admin need to install and activate wordpress plugin <a href='%s'>GoUrl Bitcoin Gateway for Wordpress</a> to accept Bitcoin/Altcoin Payments online.", GOURLWC), "https://gourl.io/bitcoin-wordpress-plugin.html") . "</div>"; } elseif (!$this->payments || !$this->defcoin || true === version_compare(WOOCOMMERCE_VERSION, '2.1', '<') || true === version_compare(GOURL_VERSION, '1.3.3', '<') || array_key_exists($order->order_currency, $this->coin_names) && !array_key_exists($order->order_currency, $this->payments)) { echo '<br><h2>' . __('Information', GOURLWC) . '</h2>' . PHP_EOL; echo "<div class='woocommerce-error'>" . sprintf(__('Sorry, but there was an error processing your order. Please try a different payment method or contact us if you need assistance (GoUrl Bitcoin Plugin not configured / %s not activated).', GOURLWC), !$this->payments || !$this->defcoin || !isset($this->coin_names[$order->order_currency]) ? $this->title : $this->coin_names[$order->order_currency]) . "</div>"; } else { $plugin = "gourlwoocommerce"; $amount = $order->order_total; $currency = $order->order_currency; if (gourl_wc_fiat_btc($currency)) { $currency = "BTC"; } $orderID = "order" . $order->id; $userID = $order->user_id; $period = "NOEXPIRY"; $language = $this->deflang; $coin = $this->coin_names[$this->defcoin]; $affiliate_key = GOURLWC_AFFILIATE_KEY; $crypto = array_key_exists($currency, $this->coin_names); if (!$userID) { $userID = "guest"; } // allow guests to make checkout (payments) if (!$userID) { echo '<br><h2>' . __('Information', GOURLWC) . '</h2>' . PHP_EOL; echo "<div align='center'><a href='" . wp_login_url(get_permalink()) . "'>\n\t\t\t\t\t\t<img style='border:none;box-shadow:none;' title='" . __('You need first to login or register on the website to make Bitcoin/Altcoin Payments', GOURLWC) . "' vspace='10'\n\t\t\t\t\t\tsrc='" . $gourl->box_image() . "' border='0'></a></div>"; } elseif ($amount <= 0) { echo '<br><h2>' . __('Information', GOURLWC) . '</h2>' . PHP_EOL; echo "<div class='woocommerce-error'>" . sprintf(__("This order's amount is %s - it cannot be paid for. Please contact us if you need assistance.", GOURLWC), $amount . " " . $currency) . "</div>"; } else { // Exchange (optional) // -------------------- if ($currency != "USD" && !$crypto) { $amount = gourl_convert_currency($currency, "USD", $amount); if ($amount <= 0) { echo '<br><h2>' . __('Information', GOURLWC) . '</h2>' . PHP_EOL; echo "<div class='woocommerce-error'>" . sprintf(__('Sorry, but there was an error processing your order. Please try later or use a different payment method. System cannot receive exchange rates for %s/USD from Google Finance', GOURLWC), $currency) . "</div>"; } else { $currency = "USD"; } } if (!$crypto) { $amount = $amount * $this->emultiplier; } // Payment Box // ------------------ if ($amount > 0) { // crypto payment gateway $result = $gourl->cryptopayments($plugin, $amount, $currency, $orderID, $period, $language, $coin, $affiliate_key, $userID, $this->iconwidth); if (!isset($result["is_paid"]) || !$result["is_paid"]) { echo '<br><h2>' . __('Pay Now -', GOURLWC) . '</h2>' . PHP_EOL; } if ($result["error"]) { echo "<div class='woocommerce-error'>" . __("Sorry, but there was an error processing your order. Please try a different payment method.", GOURLWC) . "<br>" . $result["error"] . "</div>"; } else { // display payment box or successful payment result echo $result["html_payment_box"]; // payment received if ($result["is_paid"]) { if (false) { echo "<div align='center'>" . sprintf(__('%s Payment ID: #%s', GOURLWC), ucfirst($result["coinname"]), $result["paymentID"]) . "</div>"; } echo "<br>"; } } } } } echo "<br>"; return true; }
public function cryptocoin_payment($payment) { global $gourl; if (!is_object($payment) || edd_get_payment_gateway($payment->ID) != "gourl") { return true; } // Current Order Details $status = $payment->post_status; $amount = edd_get_payment_amount($payment->ID); $currency = edd_get_payment_currency_code($payment->ID); $userID = edd_get_payment_user_id($payment->ID); $orderID = "order" . $payment->ID; // file shortcode-receipt.php // filter 'edd_payment_receipt_before' inside <table> echo '</thead></table>'; if (!$payment || !$payment->ID) { echo '<h3>' . __('Information', GOURLEDD) . '</h3>' . PHP_EOL; echo "<div class='edd-alert edd-alert-error'>" . __('The GoUrl payment plugin was called to process a payment but could not retrieve the order details. Cannot continue!', GOURLEDD) . "</div>"; } elseif (!in_array($status, array("pending", "publish"))) { echo '<h3>' . __('Information', GOURLEDD) . '</h3>' . PHP_EOL; echo "<div class='edd-alert edd-alert-error'>" . sprintf(__("This order's status is '%s' - it cannot be paid for. Please contact us if you need assistance.", GOURLEDD), $status) . "</div>"; } elseif (!class_exists('gourlclass') || !defined('GOURL') || !is_object($gourl)) { echo '<h3>' . __('Information', GOURLEDD) . '</h3>' . PHP_EOL; echo "<div class='edd-alert edd-alert-error'>" . sprintf(__("Please try a different payment method. Admin need to install and activate wordpress plugin <a href='%s'>GoUrl Bitcoin Gateway for Wordpress</a> to accept Bitcoin/Altcoin Payments online.", GOURLEDD), "https://gourl.io/bitcoin-wordpress-plugin.html") . "</div>"; } elseif (!$this->payments || !$this->defcoin || true === version_compare(EDD_VERSION, '2.4.2', '<') || true === version_compare(GOURL_VERSION, '1.3.4', '<') || array_key_exists($currency, $this->coin_names) && !array_key_exists($currency, $this->payments)) { echo '<h3>' . __('Information', GOURLEDD) . '</h3>' . PHP_EOL; echo "<div class='edd-alert edd-alert-error'>" . sprintf(__('Sorry, but there was an error processing your order. Please try a different payment method or contact us if you need assistance (GoUrl Bitcoin Plugin not configured / %s not activated).', GOURLEDD), !$this->payments || !$this->defcoin || !isset($this->coin_names[$currency]) ? $this->title : $this->coin_names[$currency]) . "</div>"; } else { $plugin = "gourledd"; $period = "NOEXPIRY"; $language = $this->deflang; $coin = $this->coin_names[$this->defcoin]; $affiliate_key = 'gourl'; $crypto = array_key_exists($currency, $this->coin_names); if (!$userID) { $userID = "guest"; } // allow guests to make checkout (payments) if (!$userID) { echo '<h3>' . __('Information', GOURLEDD) . '</h3>' . PHP_EOL; echo "<div align='center'><a href='" . wp_login_url(get_permalink()) . "'>\n\t\t\t\t\t\t\t<img style='border:none;box-shadow:none;' title='" . __('You need first to login or register on the website to make Bitcoin/Altcoin Payments', GOURLEDD) . "' vspace='10'\n\t\t\t\t\t\t\tsrc='" . $gourl->box_image() . "' border='0'></a></div>"; } elseif ($amount <= 0) { echo '<h3>' . __('Information', GOURLEDD) . '</h3>' . PHP_EOL; echo "<div class='edd-alert edd-alert-error'>" . sprintf(__("This order's amount is %s - it cannot be paid for. Please contact us if you need assistance.", GOURLEDD), $amount . " " . $currency) . "</div>"; } else { // Exchange (optional) // -------------------- if ($currency != "USD" && !$crypto) { $amount = gourl_convert_currency($currency, "USD", $amount); if ($amount <= 0) { echo '<h3>' . __('Information', GOURLEDD) . '</h3>' . PHP_EOL; echo "<div class='edd-alert edd-alert-error'>" . sprintf(__('Sorry, but there was an error processing your order. Please try later or use a different payment method. System cannot receive exchange rates for %s/USD from Google Finance', GOURLEDD), $currency) . "</div>"; } else { $currency = "USD"; } } if (!$crypto) { $amount = $amount * $this->emultiplier; } // Payment Box // ------------------ if ($amount > 0) { // crypto payment gateway $result = $gourl->cryptopayments($plugin, $amount, $currency, $orderID, $period, $language, $coin, $affiliate_key, $userID, $this->iconwidth); if (!isset($result["is_paid"]) || !$result["is_paid"]) { echo '<h3>' . __('Pay Now -', GOURLEDD) . '</h3>' . PHP_EOL; } if ($result["error"]) { echo "<div class='edd-alert edd-alert-error'>" . __("Sorry, but there was an error processing your order. Please try a different payment method.", GOURLEDD) . "<br/>" . $result["error"] . "</div>"; } else { // display payment box or successful payment result echo $result["html_payment_box"]; // payment received if ($result["is_paid"]) { if (false) { echo "<div align='center'>" . sprintf(__('%s Payment ID: #%s', GOURLEDD), ucfirst($result["coinname"]), $result["paymentID"]) . "</div>"; } echo "<br/>"; if ($status == 'pending') { header('Location: ' . $_SERVER['REQUEST_URI']); } } } } } } echo '<br/><br/><table id="edd_purchase_receipt"><thead>'; return true; }
/** * 3.4 */ public static function cryptocoin_payment($arr) { global $gourl, $wpdb; static $flag = false; if ($flag) { return false; } $flag = true; // Initialize // ------------------------ if (class_exists('gourlclass') && defined('GOURL') && is_object($gourl)) { $payments = $gourl->payments(); // Activated Payments $coin_names = $gourl->coin_names(); // All Coins $languages = $gourl->languages(); // All Languages } else { $payments = array(); $coin_names = array(); $languages = array(); } $statuses = array(2 => 'Order Received', 3 => 'Accepted Payment', 4 => 'Job Dispatched', 5 => 'Closed Order'); $mainplugin_url = admin_url("plugin-install.php?tab=search&type=term&s=GoUrl+Bitcoin+Payment+Gateway+Downloads"); $defcoin = get_option(GOURLWPSC . 'defcoin'); if (!in_array($defcoin, array_keys($payments))) { $defcoin = current(array_keys($payments)); } $deflang = get_option(GOURLWPSC . 'deflang'); if (!in_array($deflang, array_keys($languages))) { $deflang = current(array_keys($languages)); } $emultiplier = str_replace("%", "", get_option(GOURLWPSC . 'emultiplier')); if (!$emultiplier || !is_numeric($emultiplier) || $emultiplier <= 0) { $emultiplier = "1.00"; } $ostatus = get_option(GOURLWPSC . 'ostatus'); if (!in_array($ostatus, array_keys($statuses))) { $ostatus = 3; } // Accepted Payment $ostatus2 = get_option(GOURLWPSC . 'ostatus2'); if (!in_array($ostatus2, array_keys($statuses))) { $ostatus2 = 3; } // Accepted Payment $iconwidth = str_replace("px", "", get_option(GOURLWPSC . 'iconwidth')); if (!$iconwidth || !is_numeric($iconwidth) || $iconwidth < 30 || $iconwidth > 250) { $iconwidth = 60; } $iconwidth = $iconwidth . "px"; // Current Order // ----------------- $order_id = $arr["purchase_id"]; $order_total = $arr["purchase_log"]["totalprice"]; $order_currency = version_compare(WPSC_VERSION, '3.8.14', '<') ? current($wpdb->get_results("SELECT code FROM `" . WPSC_TABLE_CURRENCY_LIST . "` WHERE id = " . intval(get_option('currency_type')) . " LIMIT 1", ARRAY_A))["code"] : WPSC_Countries::get_currency_code(get_option('currency_type')); $order_user_id = $arr["purchase_log"]["user_ID"]; if ($order_currency == "DOG") { $order_currency = "DOGE"; } // WP eCommerce allow max 3 symbols for coin symbol if ($order_currency == "DAS") { $order_currency = "DASH"; } // WP eCommerce allow max 3 symbols for coin symbol // Security // ------------- if (!$order_id) { throw new Exception('The GoUrl payment plugin was called to process a payment but could not retrieve the order details for order_id. Cannot continue!'); } if ($arr["purchase_log"]["gateway"] != "wpsc_gourl_gateway" || $order_user_id && $order_user_id != get_current_user_id()) { return false; } if (!class_exists('gourlclass') || !defined('GOURL') || !is_object($gourl)) { echo '<h2>' . __('Information', GOURLWPSC) . '</h2>' . PHP_EOL; echo "<div style='border:1px solid #eee;margin:20px 10px;padding:10px'>" . __("Please try a different payment method. Admin need to install and activate wordpress plugin 'GoUrl Bitcoin Gateway' (https://gourl.io/bitcoin-wordpress-plugin.html) to accept Bitcoin/Altcoin Payments online", GOURLWPSC) . "</div>"; } elseif (!$payments || !$defcoin || true === version_compare(WPSC_VERSION, '3.8.10', '<') || true === version_compare(GOURL_VERSION, '1.3', '<') || array_key_exists($order_currency, $coin_names) && !array_key_exists($order_currency, $payments)) { echo '<h2>' . __('Information', GOURLWPSC) . '</h2>' . PHP_EOL; echo "<div style='border:1px solid #eee;margin:20px 10px;padding:10px'>" . sprintf(__('Sorry, but there was an error processing your order. Please try a different payment method or contact us if you need assistance. (GoUrl Bitcoin Plugin not configured - %s not activated)', GOURLWPSC), !$payments || !$defcoin ? "Cryptocurrency" : $coin_names[$order_currency]) . "</div>"; } else { $plugin = "gourlwpecommerce"; $amount = $order_total; $currency = $order_currency; $orderID = "order" . $order_id; $userID = $order_user_id; $period = "NOEXPIRY"; $language = $deflang; $coin = $coin_names[$defcoin]; $affiliate_key = "gourl"; $crypto = array_key_exists($currency, $coin_names); if (!$userID) { $userID = "guest"; } // allow guests to make checkout (payments) if (!$userID) { echo '<h2>' . __('Information', GOURLWPSC) . '</h2>' . PHP_EOL; echo "<div align='center'><a href='" . wp_login_url(get_permalink()) . "'>\n\t\t\t\t\t<img style='border:none;box-shadow:none;' title='" . __('You need first to login or register on the website to make Bitcoin/Altcoin Payments', GOURLWPSC) . "' vspace='10'\n\t\t\t\t\tsrc='" . $gourl->box_image() . "' border='0'></a></div>"; } elseif ($amount <= 0) { echo '<h2>' . __('Information', GOURLWPSC) . '</h2>' . PHP_EOL; echo "<div style='border:1px solid #eee;margin:20px 10px;padding:10px'>" . sprintf(__('This order’s amount is “%s” — it cannot be paid for. Please contact us if you need assistance.', GOURLWPSC), $amount . " " . $currency) . "</div>"; } else { // Exchange (optional) // -------------------- if ($currency != "USD" && !$crypto) { $amount = gourl_convert_currency($currency, "USD", $amount); if ($amount <= 0) { echo '<h2>' . __('Information', GOURLWPSC) . '</h2>' . PHP_EOL; echo "<div style='border:1px solid #eee;margin:20px 10px;padding:10px'>" . sprintf(__('Sorry, but there was an error processing your order. Please try later or use a different payment method. Cannot receive exchange rates for %s/USD from Google Finance', GOURLWPSC), $currency) . "</div>"; } else { $currency = "USD"; } } if (!$crypto) { $amount = $amount * $emultiplier; } // Payment Box // ------------------ if ($amount > 0) { // crypto payment gateway $result = $gourl->cryptopayments($plugin, $amount, $currency, $orderID, $period, $language, $coin, $affiliate_key, $userID, $iconwidth); if (!$result["is_paid"]) { echo '<h2>' . __('Pay Now', GOURLWPSC) . '</h2>' . PHP_EOL; } if ($result["error"]) { echo "<div style='border:1px solid #eee;margin:20px 10px;padding:10px'>" . __("Sorry, but there was an error processing your order. Please try a different payment method.", GOURLWPSC) . "<br/>" . $result["error"] . "</div>"; } else { // display payment box or successful payment result echo $result["html_payment_box"]; // payment received if ($result["is_paid"]) { echo "<div align='center'>" . sprintf(__('%s payment ID: #%s, order ID: #%s', GOURLWPSC), ucfirst($result["coinname"]), $result["paymentID"], $order_id) . "</div><br>"; } } } } } echo "<br><br>"; return true; }