Version 4.7.0

This commit is contained in:
Neo committed 2025-12-19 16:00:35 -08:00
1 parent 517a5e1f70
commit 8ba7d43898
1933 files changed
+65613 -11332

No files matched your search

+76 -60
View File
@@ -721,7 +721,9 @@
<section class='ipsBox ipsSpacer_top'>
<h2 class='ipsType_sectionTitle ipsType_reset'>{lang="order_review"}</h2>
<div class='ipsPad'>
<a href='{{if $invoice->guest_data and isset( $invoice->guest_data['guestTransactionKey'] )}}{$invoice->url()->setQueryString( array( 'do' => 'printout', 'key' => $invoice->guest_data['guestTransactionKey'] ) )}{{else}}{$invoice->url()->setQueryString( 'do', 'printout' )}{{endif}}' target="_blank" rel='noopener' class='ipsJS_show ipsButton ipsButton_light ipsButton_verySmall ipsPos_right'>{lang="order_invoice_print"}</a>
{{if \IPS\Member::loggedIn()->canAccessModule( \IPS\Application\Module::get( 'nexus', 'clients' ) ) }}
<a href='{{if $invoice->guest_data and isset( $invoice->guest_data['guestTransactionKey'] )}}{$invoice->url()->setQueryString( array( 'do' => 'printout', 'key' => $invoice->guest_data['guestTransactionKey'] ) )}{{else}}{$invoice->url()->setQueryString( 'do', 'printout' )}{{endif}}' target="_blank" rel='noopener' class='ipsJS_show ipsButton ipsButton_light ipsButton_verySmall ipsPos_right'>{lang="order_invoice_print"}</a>
{{endif}}
<h2 class='ipsType_pageTitle'>{lang="order"} #{$invoice->id}</h2>
<hr class='ipsHr'>
<div class='ipsGrid ipsGrid_collapsePhone ipsSpacer_top'>
@@ -1635,7 +1637,7 @@
{{if \count( $item['details'] )}}
<span class="ipsType_light">
{{foreach $item['details'] as $k => $v}}
{lang="$k"}: {$v}<br>
{lang="nexus_pfield_{$k}"}: {$v}<br>
{{endforeach}}
</span>
{{endif}}
@@ -2058,16 +2060,13 @@
<p class='ipsType_reset ipsType_medium ipsSpacer_top ipsSpacer_half ipsType_light'>{lang="customer_since" htmlsprintf="$customer->joined->html()"}</p>
{{if $activeSubscription}}
<p class="ipsType_reset ipsType_center ipsType_positive ipsType_medium ipsSpacer_top ipsSpacer_half">
{{if member.hasAcpRestriction( 'nexus', 'customers', 'purchases_view' ) and $activeSubscription->purchase and ! $activeSubscription->added_manually}}
{{if member.hasAcpRestriction( 'nexus', 'customers', 'purchases_view' ) and $activeSubscription->purchase}}
<a href="{$activeSubscription->purchase->acpUrl()}" class="ipsType_blendLinks">
{{endif}}
<i class="fa fa-certificate"></i> &nbsp; {lang="nexus_subs_subscriber" sprintf="$activeSubscription->package->_title"}
{{if member.hasAcpRestriction( 'nexus', 'customers', 'purchases_view' ) and ! $activeSubscription->added_manually}}
{{if member.hasAcpRestriction( 'nexus', 'customers', 'purchases_view' ) and $activeSubscription->purchase}}
</a>
{{endif}}
{{if $activeSubscription->added_manually}}
<a href="{url="app=nexus&module=subscriptions&controller=subscribers&do=remove&id={$activeSubscription->id}" csrf="true"}" class="ipsButton ipsButton_veryVerySmall ipsButton_link" title='{lang="nexus_subs_delete_member"}' data-confirm data-ipsTooltip>{lang="nexus_subs_remove"}</a>
{{endif}}
</p>
{{endif}}
</div>
@@ -2894,18 +2893,6 @@
</div>
{{endif}}
</form>
</div>]]></template>
<template template_group="forms" template_name="amexExpressCheckout" template_data="$field, $gateway, $clientId" template_location="global" template_app="nexus"><![CDATA[<div data-controller="nexus.global.gateways.stripeamex" data-id="{$gateway->id}" class="ipsType_center" {{if $field->htmlId}}id="{$field->htmlId}"{{endif}}>
<noscript>
<div class="ipsMessage ipsMessage_error">{lang="card_requires_js"}</div>
</noscript>
{{if \IPS\NEXUS_TEST_GATEWAYS}}
<amex:init client_id="86a947f9-098d-4a9c-a0ef-22f30f3322fa" env="qa" callback="aecCallbackHandler" button_color="light"/>
{{else}}
<amex:init client_id="{$clientId}" env="production" callback="aecCallbackHandler"/>
{{endif}}
<input type='hidden' name="{$field->name}" value="" data-role="value">
<div id="amex-express-checkout"></div>
</div>]]></template>
<template template_group="forms" template_name="braintree" template_data="$clientToken, $type, $field, $vaultAccounts, $invoice, $amount, $gateway, $shippingAddress, $venmoProfile, $paymentScreenType, $advancedFraud, $payPalCredit, $googlepayMerchant" template_location="global" template_app="nexus"><![CDATA[<div data-controller="nexus.global.gateways.braintree" data-method="{$type}" data-clientToken="{$clientToken}" data-env="{{if \IPS\NEXUS_TEST_GATEWAYS}}sandbox{{else}}production{{endif}}" data-currency="{$amount->currency}" data-amount="{$amount->amount}" data-id="{$gateway->id}" {{if $field->htmlId}}id="{$field->htmlId}"{{endif}} {{if $shippingAddress}}data-shipping='{$shippingAddress}'{{endif}} data-venmo-profile="{$venmoProfile}" data-fieldName="{$field->name}" data-forceVault="{{if $paymentScreenType === 'card'}}true{{else}}false{{endif}}" data-advanced-fraud="{{if $advancedFraud}}true{{else}}false{{endif}}" data-googlepay-merchant="{$googlepayMerchant}">
<div class="ipsJS_hide" data-role="error">
@@ -2983,7 +2970,7 @@
{{endif}}
</div>
</div>]]></template>
<template template_group="forms" template_name="businessAddress" template_data="$name, $value, $googleApiKey, $minimize=FALSE, $requireFullAddress=TRUE, $htmlId=NULLs, $vat=FALSE" template_location="global" template_app="nexus"><![CDATA[<ul class="ipsField_fieldList" data-ipsAddressForm {{if $googleApiKey}}data-ipsAddressForm-googlePlaces data-ipsAddressForm-googleApiKey="{$googleApiKey}"{{endif}} data-ipsAddressForm-requireFullAddress="{{if $requireFullAddress}}true{{else}}false{{endif}}" {{if $minimize}}data-ipsAddressForm-minimize{{endif}}{{if $value->country AND !$value->city AND !$value->region AND !$value->postalCode}} data-ipsAddressForm-country="{$value->country}"{{endif}} {{if $vat}}data-controller="nexus.global.forms.businessAddressVat"{{endif}}>
<template template_group="forms" template_name="businessAddress" template_data="$name, $value, $googleApiKey, $minimize=FALSE, $requireFullAddress=TRUE, $htmlId=NULLs, $vat=FALSE" template_location="global" template_app="nexus"><![CDATA[<ul class="ipsField_fieldList" data-ipsAddressForm {{if $googleApiKey}}data-ipsAddressForm-googlePlaces data-ipsAddressForm-googleApiKey="{$googleApiKey}"{{endif}} data-ipsAddressForm-requireFullAddress="{{if $requireFullAddress}}true{{else}}false{{endif}}" {{if $minimize}}data-ipsAddressForm-minimize{{endif}}{{if $value->country AND !$value->city AND !$value->region AND !$value->postalCode}} data-ipsAddressForm-country="{$value->country}"{{endif}} data-controller="nexus.global.forms.businessAddressVat">
<li>
<ul class="ipsField_fieldList ipsList_reset" role="radiogroup" id="elRadio_{$name}_{$htmlId}_type">
<li class="ipsFieldRow_inlineCheckbox ipsFieldRow_inlineCheckbox_reducedMargins">
@@ -4582,7 +4569,9 @@
<td colspan="3"><strong class="ipsType_large">{lang="total"}</strong></td>
<td><strong class="ipsType_large">{$summary['total']}</strong></td>
</tr>
{{if $recipients = $invoice->payToRecipients() or ( settings.ref_on and $commission = $invoice->commission( $invoice->total->amount->subtract( \IPS\Math\Number::sum( $recipients ) ) ) )}}
{{$recipients = $invoice->payToRecipients();}}
{{$commission = $invoice->commission( $invoice->total->amount->subtract( \IPS\Math\Number::sum( $recipients ) ) );}}
{{if $recipients or ( $commission AND settings.ref_on )}}
{{$totalForSite = $summary['total']->amount->subtract( \IPS\Math\Number::sum( $recipients ) );}}
{{foreach $recipients as $recipient => $amount}}
{{$customer = \IPS\nexus\Customer::load( $recipient );}}
@@ -4598,6 +4587,7 @@
<td><strong>{money="$amount" currency="$invoice->currency"}</strong></td>
</tr>
{{endforeach}}
{{if isset( $commission ) and $commission['rule']}}
{{$totalForSite = $totalForSite->subtract( $commission['amount']->amount );}}
<tr>
@@ -6988,7 +6978,7 @@
{{elseif $priceDetails['initialTerm']}}
<ul class='ipsList_reset ipsSpacer_both ipsFlex ipsFlex-ai:center ipsFlex-fw:wrap'>
<li class="ipsMargin_vertical:half ipsMargin_right:double">
<div>{lang="package_initial_term_title" sprintf="$priceDetails['initialTerm']"}</div>
<div><span data-role="initialTerm">{lang="package_initial_term_title" sprintf="$priceDetails['initialTerm']"}</span></div>
<span class="cNexusPrice">
<span data-role="price">
{$priceDetails['primaryPrice']}
@@ -7144,11 +7134,18 @@
{template="packageBlockPrice" app="nexus" group="store" params="$package->fullPriceInfo()"}
</div>
{{if $package->physical}}
{{if $package->stock !== 0}}
<span class='ipsType_small cNexusStock cNexusStock_inStock'>{{if settings.nexus_show_stock && $package->stock !== -1 && $package->stock !== -2}}{lang="x_in_stock" pluralize="$package->stock"}{{else}}{lang="in_stock"}{{endif}}</span>
{{else}}
<span class='ipsType_small cNexusStock cNexusStock_notInStock ipsType_warning'>{lang="out_of_stock"}</span>
{{endif}}
{{$stockLevel = $package->stockLevel();}}
{{if $stockLevel === 0}}
<span class='ipsType_small cNexusStock cNexusStock_notInStock ipsType_warning'>{lang="out_of_stock"}</span>
{{else}}
<span class='ipsType_small cNexusStock cNexusStock_inStock'>
{{if $stockLevel and settings.nexus_show_stock}}
{lang="x_in_stock" pluralize="$stockLevel"}
{{else}}
{lang="in_stock"}
{{endif}}
</span>
{{endif}}
{{endif}}
{{if $package->reviewable}}
<div>
@@ -7212,7 +7209,7 @@
{{if $orientation == 'vertical'}}
<a href='{$package->url()}' class='cNexusProduct_image ipsType_center'>
{{if $package->image}}
<img {{if settings.lazy_load_enabled}}src='{expression="\IPS\Text\Parser::blankImage()"}' data-{{endif}}src="{$package->image}" class='ipsImage'>
<img {{if settings.lazy_load_enabled}}src='{expression="\IPS\Text\Parser::blankImage()"}' data-{{endif}}src="{$package->image}" class='ipsImage' alt=''>
{{else}}
<div class='ipsNoThumb ipsNoThumb_product'>&nbsp;</div>
{{endif}}
@@ -7220,7 +7217,7 @@
{{else}}
<a href='{$package->url()}' class='cNexusProduct_image'>
{{if $package->image}}
<img {{if settings.lazy_load_enabled}}src='{expression="\IPS\Text\Parser::blankImage()"}' data-{{endif}}src="{$package->image}" class='ipsImage'>
<img {{if settings.lazy_load_enabled}}src='{expression="\IPS\Text\Parser::blankImage()"}' data-{{endif}}src="{$package->image}" class='ipsImage' alt=''>
{{else}}
<div class='ipsNoThumb ipsThumb_large ipsNoThumb_product'>&nbsp;</div>
{{endif}}
@@ -7231,9 +7228,9 @@
<h2 class='cNexusProduct_title ipsType_normal ipsType_unbold ipsType_reset'>
<a href="{$package->url()}" data-role='productLink' class='{{if $orientation == 'horizontal'}}ipsTruncate ipsTruncate_line{{endif}}'>{$package->_title}</a>
</h2>
<p class='ipsType_reset ipsTruncate ipsTruncate_line cNexusPrice_widget'>
<div class='ipsType_reset ipsTruncate ipsTruncate_line cNexusPrice_widget'>
{template="packageBlockPrice" app="nexus" group="store" params="$package->fullPriceInfo()"}
</p>
</div>
{{if $package->physical}}
{{$stockLevel = $package->stockLevel();}}
{{if $stockLevel === 0}}
@@ -7748,10 +7745,6 @@
{{endif}}
</ul>
]]></template>
<template template_group="subscription" template_name="addMemberMessage" template_data="$form" template_location="admin" template_app="nexus"><![CDATA[<div class="ipsMessage ipsMessage_general">
{lang="nexus_subs_member_message"}
</div>
{$form|raw}]]></template>
<template template_group="subscription" template_name="clientArea" template_data="$package" template_location="front" template_app="nexus"><![CDATA[<div class='ipsBox ipsClearfix'>
<div class='ipsPad'>
<h2 class='ipsType_reset ipsType_large ipsType_blendLinks'>
@@ -7815,9 +7808,9 @@
</div>
<div class="cSubscription_desc ipsType_richText ipsType_normal ipsMargin_top">{$package->description}</div>
</div>
{{if $subscription AND !$subscription->cancelled }}
{{if $subscription}}
{{if $subscription->package and $subscription->purchase }}
{{$upgradeCost = $subscription->active ? $package->costToUpgrade( $subscription->package, \IPS\nexus\Customer::loggedIn() ) : NULL;}}
{{$upgradeCost = (!( $subscription->purchase->billing_agreement and !$subscription->purchase->billing_agreement->canceled ) )? $package->costToUpgradeIncludingTax( $subscription->package, \IPS\nexus\Customer::loggedIn() ) : NULL;}}
{{if $subscription->package->id === $package->id}}
{{if $subscription->purchase->expire and ( $canRenewUntil = $subscription->purchase->canRenewUntil( NULL,TRUE ) or ( $subscription->purchase->can_reactivate ) or ( $pendingInvoice = $subscription->purchase->invoice_pending and $pendingInvoice->status === $pendingInvoice::STATUS_PENDING ) or $subscription->purchase->canCancel())}}
<div class='cSubscriptionInfo ipsBorder_top ipsType_center ipsPadding:half ipsFlex-flex:00'>
@@ -7847,12 +7840,6 @@
{lang="purchase_cancel_renewal"}
</a>
</li>
{{elseif $subscription->canCancel()}}
<li>
<a href="{url="app=nexus&module=subscriptions&controller=subscriptions&do=cancel&id={$subscription->purchase->id}" base="front" csrf="true" )"}&ref={expression="base64_encode( \IPS\Http\Url::internal( 'app=nexus&module=subscriptions&controller=subscriptions', 'front', 'nexus_subscriptions' ) )"}" class="ipsButton ipsButton_small ipsButton_link ipsButton_link--negative ipsButton_fullWidth" data-confirm ">
{lang="nexus_subs_cancel"}
</a>
</li>
{{endif}}
</ul>
</div>
@@ -7864,20 +7851,34 @@
<li>
{{if $upgradeCost->amount->isZero()}}
<a href="{url="app=nexus&module=subscriptions&controller=subscriptions&do=change&id={$package->id}" csrf="true" seoTemplate="nexus_subscription"}" class="ipsButton ipsButton_small ipsButton_light" data-change-subscription data-change-message="{lang="nexus_sub_change_no_charge"}">
{{else}}
<a href="{url="app=nexus&module=subscriptions&controller=subscriptions&do=change&id={$package->id}" csrf="true" seoTemplate="nexus_subscription"}" class="ipsButton ipsButton_small ipsButton_light" data-change-subscription data-change-message="{lang="nexus_sub_change_confirm_upgrade" sprintf="$subscription->package->_title, $package->_title, $upgradeCost"}">
{{endif}}
{lang="nexus_subs_upgrade_button"}
{{elseif !$subscription->active}}
<a href="{url="app=nexus&module=subscriptions&controller=subscriptions&do=change&id={$package->id}" csrf="true" seoTemplate="nexus_subscription"}" class="ipsButton ipsButton_small ipsButton_light" data-change-subscription data-change-message="{lang="nexus_sub_change_confirm_switch" sprintf="$subscription->package->_title, $package->_title, $upgradeCost"}">
{{else}}
<a href="{url="app=nexus&module=subscriptions&controller=subscriptions&do=change&id={$package->id}" csrf="true" seoTemplate="nexus_subscription"}" class="ipsButton ipsButton_small ipsButton_light" data-change-subscription data-change-message="{lang="nexus_sub_change_confirm_upgrade" sprintf="$subscription->package->_title, $package->_title, $upgradeCost"}">
{{endif}}
{{if $subscription->active}}
{lang="nexus_subs_upgrade_button"}
{{else}}
{lang="nexus_subs_switch_button"}
{{endif}}
</a>
</li>
{{else}}
<li>
{{if $upgradeCost->amount->isZero()}}
<a href="{url="app=nexus&module=subscriptions&controller=subscriptions&do=change&id={$package->id}" csrf="true" seoTemplate="nexus_subscription"}" class="ipsButton ipsButton_negative" data-change-subscription data-change-message="{lang="nexus_sub_change_no_charge"}">
{{else}}
<a href="{url="app=nexus&module=subscriptions&controller=subscriptions&do=change&id={$package->id}" csrf="true" seoTemplate="nexus_subscription"}" class="ipsButton ipsButton_negative" data-change-subscription data-change-message="{lang="nexus_sub_change_confirm_downgrade" sprintf="$subscription->package->_title, $package->_title, $upgradeCost"}">
{{endif}}
{lang="nexus_subs_downgrade_button"}
{{elseif !$subscription->active}}
{{$upgradeCost = new \IPS\nexus\Money( $upgradeCost->amount->absolute(), $upgradeCost->currency );}}
<a href="{url="app=nexus&module=subscriptions&controller=subscriptions&do=change&id={$package->id}" csrf="true" seoTemplate="nexus_subscription"}" class="ipsButton ipsButton_negative" data-change-subscription data-change-message="{lang="nexus_sub_change_confirm_switch" sprintf="$subscription->package->_title, $package->_title, $upgradeCost"}">
{{else}}
{{$upgradeCost = new \IPS\nexus\Money( $upgradeCost->amount->absolute(), $upgradeCost->currency );}}
<a href="{url="app=nexus&module=subscriptions&controller=subscriptions&do=change&id={$package->id}" csrf="true" seoTemplate="nexus_subscription"}" class="ipsButton ipsButton_negative" data-change-subscription data-change-message="{lang="nexus_sub_change_confirm_downgrade" sprintf="$subscription->package->_title, $package->_title, $upgradeCost"}">
{{endif}}
{{if $subscription->active}}
{lang="nexus_subs_downgrade_button"}
{{else}}
{lang="nexus_subs_switch_button"}
{{endif}}
</a>
</li>
{{endif}}
@@ -7920,18 +7921,31 @@
{{endif}}]]></template>
<template template_group="subscription" template_name="status" template_data="$active" template_location="admin" template_app="nexus"><![CDATA[<span class="ipsBadge {{if $active}}ipsBadge_positive{{else}}ipsBadge_neutral{{endif}}">{{if $active}}{lang="active"}{{else}}{lang="inactive"}{{endif}}</span>]]></template>
<template template_group="subscription" template_name="table" template_data="$table, $headers, $rows, $quickSearch" template_location="front" template_app="nexus"><![CDATA[<div class='ipsPageHeader ipsClearfix ipsType_center ipsSpacer_bottom ipsSpacer_double'>
{{if isset( \IPS\Request::i()->register ) and \IPS\Settings::i()->nexus_subs_register}}
{{if isset( \IPS\Request::i()->register ) and \IPS\Settings::i()->nexus_subs_register and (int) \IPS\Request::i()->register === 1}}
<h1 class='ipsType_veryLarge'>{lang="nexus_sub_sign_up_title"}</h1>
<p class="ipsType_large ipsType_center ipsType_light">
{lang="nexus_sub_sign_up_desc"}
</p>
{{elseif isset( \IPS\Request::i()->register ) and \IPS\Settings::i()->nexus_subs_register and (int) \IPS\Request::i()->register === 2}}
<h1 class='ipsType_veryLarge'>{lang="nexus_sub_needed_title"}</h1>
<p class="ipsType_large ipsType_center ipsType_light">
{lang="nexus_sub_needed_desc"}
</p>
{{else}}
<h1 class='ipsType_veryLarge'>{lang="nexus_front_subscriptions"}</h1>
{{if $table->activeSubscription and $table->activeSubscription->purchase->billing_agreement and !$table->activeSubscription->purchase->billing_agreement->canceled}}
<p class="ipsMessage ipsMessage_info ipsType_left">
{lang="nexus_sub_active_billingagreement_desc" sprintf="$table->activeSubscription->purchase->billing_agreement->url()"}
</p>
{{endif}}
{{endif}}
{{if \count( \IPS\nexus\Money::currencies() ) > 1}}
<div class='ipsPos_right ipsResponsive_noFloat'>
{{$baseUrl = \IPS\Http\Url::internal('app=nexus&module=subscriptions&controller=subscriptions', 'front', 'nexus_subscriptions');}}
{{if isset( \IPS\Request::i()->register )}}
{{$baseUrl = $baseUrl->setQueryString( 'register', (int) \IPS\Request::i()->register );}}
{{endif}}
{{$memberCurrency = ( ( isset( \IPS\Request::i()->cookie['currency'] ) and \in_array( \IPS\Request::i()->cookie['currency'], \IPS\nexus\Money::currencies() ) ) ? \IPS\Request::i()->cookie['currency'] : \IPS\nexus\Customer::loggedIn()->defaultCurrency() );}}
<a href='#elCurrencyChooser_menu' data-ipsMenu id='elCurrencyChooser' class='ipsButton ipsButton_veryLight ipsButton_small ipsSpacer_top ipsSpacer_half'>{$memberCurrency} <i class='fa fa-caret-down'></i></a>
<ul class='ipsMenu ipsMenu_veryNarrow ipsHide' id='elCurrencyChooser_menu' {{if isset( $_SESSION['cart'] ) and \count( $_SESSION['cart'] )}}data-controller="nexus.front.store.currencySelect"{{endif}}>
@@ -9507,7 +9521,7 @@
<ul class="ipsToolList ipsToolList_horizontal ipsClearfix ipsMargin_bottom:none ipsFlex-flex:00">
<li class='ipsToolList_primaryAction'>
<a class="ipsButton ipsButton_medium ipsButton_important ipsButton_fullWidth" href="{url="app=nexus&module=support&controller=home&do=create" seoTemplate="support_create"}" data-ipsDialog data-ipsDialog-title='{lang="new_request"}'>{lang="new_request"}</a>
<a class="ipsButton ipsButton_medium ipsButton_important ipsButton_fullWidth" href="{url="app=nexus&module=support&controller=home&do=create" seoTemplate="support_create"}" data-ipsDialog data-ipsDialog-title='{lang="new_request"}' rel='nofollow noindex'>{lang="new_request"}</a>
</li>
</ul>
</div>
@@ -10211,7 +10225,7 @@
{lang="card_expires"} {expression="str_pad( $response->androidPayCardDetails->expirationMonth, 2, '0', STR_PAD_LEFT )"}/{$response->androidPayCardDetails->expirationYear}
{{if $response->androidPayCardDetails->countryOfIssuance and $response->androidPayCardDetails->countryOfIssuance !== 'Unknown'}}
&nbsp;
{lang="card_origin"} {lang="country-{$response->applePayCardDetails->countryOfIssuance}"}
{lang="card_origin"} {lang="country-{$response->androidPayCardDetails->countryOfIssuance}"}
{{endif}}
</span>
</p>
@@ -10588,7 +10602,7 @@
{lang="card_origin"} {lang="country-{$response['source']['card']['country']}"}
</span>
</p>
{{foreach array( 'cvc_check', 'address_line1_check', 'address_zip_check' ) as $k}}
{{foreach array( 'cvc_check', 'address_line1_check', 'address_postal_code_check' ) as $k}}
<p class='ipsType_reset ipsType_normal ipsTruncate ipsTruncate_line'>
{{if $response['source']['card'][ $k ] == 'pass'}}
<span class="ipsType_success"><i class="fa fa-check"></i> {lang="stripe_{$k}_pass"}</span>
@@ -10605,7 +10619,7 @@
{{else}}
<span class="ipsType_warning"><i class="fa fa-exclamation-triangle"></i> {lang="stripe_3ds_fail"}</span>
{{endif}}
{{elseif isset( $response['source']['card'] ) and isset( $response['source']['card']['three_d_secure'] )}}
{{elseif isset( $response['source']['card'] ) and isset( $response['source']['card']['three_d_secure'] ) and \is_array( $response['source']['card']['three_d_secure'] )}}
{{if isset( $response['source']['card']['three_d_secure']['succeeded'] ) and $response['source']['card']['three_d_secure']['succeeded']}}
<span class="ipsType_success"><i class="fa fa-check"></i> {lang="stripe_3ds_pass_version" sprintf="$response['source']['card']['three_d_secure']['version']"}</span>
{{else}}
@@ -11236,7 +11250,7 @@
</div>
</div>
<div class='ipsGrid_span6'>
{{if $transaction->member->member_id}}
{{if $transaction->member AND $transaction->member->member_id}}
<div class='ipsBox ipsSpacer_bottom'>
<h2 class="ipsBox_titleBar">{lang="transaction_customer"}</h2>
<div class='ipsPad'>
@@ -11261,12 +11275,12 @@
</div>
{{else}}
<div class='ipsBox ipsSpacer_bottom'>
<h2 class="ipsBox_titleBar">{lang="transaction_history"}</h2>
<h2 class="ipsBox_titleBar">{lang="transaction_customer"}</h2>
<div class='ipsPad'>
<div class='ipsAreaBackground_light ipsPad ipsPhotoPanel ipsPhotoPanel_large ipsClearfix'>
<img src='{$transaction->member->photo}' class='ipsUserPhoto ipsUserPhoto_medium ipsPos_left'>
<img src='{resource="default_photo.png" app="core" location="global"}' class='ipsUserPhoto ipsUserPhoto_medium ipsPos_left'>
<div>
{{if $transaction->invoice}}
{{if $transaction->invoice AND !empty( $transaction->invoice->guest_data )}}
<h3 class="ipsType_sectionHead ipsType_reset">
<strong>
{{if isset( $transaction->invoice->guest_data['member']['name'] )}}
@@ -11277,6 +11291,8 @@
</strong>
&nbsp;&nbsp;<span class='ipsType_normal ipsType_light'>{$transaction->invoice->guest_data['member']['email']}</span>
</h3>
{{elseif !$transaction->member}}
<span class="ipsType_large">{lang="deleted_member"}</span>
{{else}}
<span class="ipsType_large">{lang="guest"}</span>
{{endif}}