Version 5.0.6

This commit is contained in:
Neo committed 2025-12-19 18:55:49 -08:00
1 parent a3a4a9ccbd
commit b89858b2ff
1214 files changed
+92828 -14859

No files matched your search

@@ -0,0 +1,76 @@
<?php
/**
* @brief {class}
* @author <a href='https://www.invisioncommunity.com'>Invision Power Services, Inc.</a>
* @copyright (c) Invision Power Services, Inc.
* @license https://www.invisioncommunity.com/legal/standards/
* @package Invision Community
{subpackage}
* @since {date}
*/
namespace IPS\{app}\extensions\nexus\PackageType;
/* To prevent PHP errors (extending class does not exist) revealing path */
use IPS\nexus\Invoice;
use IPS\nexus\Package;
use IPS\nexus\Purchase;
use function defined;
if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
{
header( ( $_SERVER['SERVER_PROTOCOL'] ?? 'HTTP/1.0' ) . ' 403 Forbidden' );
exit;
}
/**
* {class}
*/
class {class} extends Package
{
/**
* @brief Database Table
*/
protected static string $packageDatabaseTable = '{table}';
/**
* @brief Which columns belong to the local table
*/
protected static array $packageDatabaseColumns = array();
/**
* @brief Icon
*/
public static string $icon = '';
/**
* @brief Title
*/
public static string $title = '';
/**
* ACP Fields
*
* @param Package $package The package
* @param bool $custom If TRUE, is for a custom package
* @param bool $customEdit If TRUE, is editing a custom package
* @return array
*/
public static function acpFormFields( Package $package, bool $custom=FALSE, bool $customEdit=FALSE ): array
{
return [];
}
/**
* On Purchase Generated
*
* @param Purchase $purchase The purchase
* @param Invoice $invoice The invoice
* @return void
*/
public function onPurchaseGenerated( Purchase $purchase, Invoice $invoice ): void
{
/** Handle any custom data stored in @see static::$packageDatabaseTable **/
}
}
+34 -28
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<javascript app="nexus">
<file javascript_app="nexus" javascript_location="front" javascript_path="controllers/checkout" javascript_name="ips.checkout.register.js" javascript_type="controller" javascript_version="5000049" javascript_position="1000100">/**
<file javascript_app="nexus" javascript_location="front" javascript_path="controllers/checkout" javascript_name="ips.checkout.register.js" javascript_type="controller" javascript_version="5000074" javascript_position="1000100">/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -34,7 +34,7 @@
}
});
}(jQuery, _));</file>
<file javascript_app="nexus" javascript_location="front" javascript_path="controllers/checkout" javascript_name="ips.checkout.review.js" javascript_type="controller" javascript_version="5000049" javascript_position="1000100"><![CDATA[/**
<file javascript_app="nexus" javascript_location="front" javascript_path="controllers/checkout" javascript_name="ips.checkout.review.js" javascript_type="controller" javascript_version="5000074" javascript_position="1000100"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -91,7 +91,7 @@
}
});
}(jQuery, _));]]></file>
<file javascript_app="nexus" javascript_location="global" javascript_path="controllers/forms" javascript_name="ips.forms.businessAddressVat.js" javascript_type="controller" javascript_version="5000049" javascript_position="1000150"><![CDATA[/**
<file javascript_app="nexus" javascript_location="global" javascript_path="controllers/forms" javascript_name="ips.forms.businessAddressVat.js" javascript_type="controller" javascript_version="5000074" javascript_position="1000150"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -130,7 +130,7 @@
});
}(jQuery, _));]]></file>
<file javascript_app="nexus" javascript_location="global" javascript_path="controllers/gateways" javascript_name="ips.gateways.stripe.js" javascript_type="controller" javascript_version="5000049" javascript_position="1000200"><![CDATA[/**
<file javascript_app="nexus" javascript_location="global" javascript_path="controllers/gateways" javascript_name="ips.gateways.stripe.js" javascript_type="controller" javascript_version="5000074" javascript_position="1000200"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -471,7 +471,7 @@
});
}(jQuery, _));]]></file>
<file javascript_app="nexus" javascript_location="global" javascript_path="controllers/gateways" javascript_name="ips.gateways.stripepaymentrequest.js" javascript_type="controller" javascript_version="5000049" javascript_position="1000200">/**
<file javascript_app="nexus" javascript_location="global" javascript_path="controllers/gateways" javascript_name="ips.gateways.stripepaymentrequest.js" javascript_type="controller" javascript_version="5000074" javascript_position="1000200">/**
* IPS Community Suite 4
* (c) 2017 Invision Power Services - http://www.invisionpower.com
*
@@ -552,7 +552,7 @@
});
}(jQuery, _));</file>
<file javascript_app="nexus" javascript_location="global" javascript_path="controllers/misc" javascript_name="ips.misc.print.js" javascript_type="controller" javascript_version="5000049" javascript_position="1000100">/**
<file javascript_app="nexus" javascript_location="global" javascript_path="controllers/misc" javascript_name="ips.misc.print.js" javascript_type="controller" javascript_version="5000074" javascript_position="1000100">/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -574,7 +574,7 @@
});
}(jQuery, _));</file>
<file javascript_app="nexus" javascript_location="admin" javascript_path="controllers/notifications" javascript_name="ips.notifications.pendingTransactions.js" javascript_type="controller" javascript_version="5000049" javascript_position="1000100">/**
<file javascript_app="nexus" javascript_location="admin" javascript_path="controllers/notifications" javascript_name="ips.notifications.pendingTransactions.js" javascript_type="controller" javascript_version="5000074" javascript_position="1000100">/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -654,7 +654,7 @@
});
}(jQuery, _));</file>
<file javascript_app="nexus" javascript_location="admin" javascript_path="controllers/store" javascript_name="ips.store.productoptions.js" javascript_type="controller" javascript_version="5000049" javascript_position="1000150"><![CDATA[/**
<file javascript_app="nexus" javascript_location="admin" javascript_path="controllers/store" javascript_name="ips.store.productoptions.js" javascript_type="controller" javascript_version="5000074" javascript_position="1000150"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -709,7 +709,7 @@
});
}(jQuery, _));]]></file>
<file javascript_app="nexus" javascript_location="admin" javascript_path="controllers/store" javascript_name="ips.store.productselector.js" javascript_type="controller" javascript_version="5000049" javascript_position="1000150"><![CDATA[/**
<file javascript_app="nexus" javascript_location="admin" javascript_path="controllers/store" javascript_name="ips.store.productselector.js" javascript_type="controller" javascript_version="5000074" javascript_position="1000150"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -769,7 +769,7 @@
});
}(jQuery, _));]]></file>
<file javascript_app="nexus" javascript_location="front" javascript_path="controllers/store" javascript_name="ips.store.cartReview.js" javascript_type="controller" javascript_version="5000049" javascript_position="1000200">/**
<file javascript_app="nexus" javascript_location="front" javascript_path="controllers/store" javascript_name="ips.store.cartReview.js" javascript_type="controller" javascript_version="5000074" javascript_position="1000200">/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -869,7 +869,7 @@
}
});
}(jQuery, _));</file>
<file javascript_app="nexus" javascript_location="front" javascript_path="controllers/store" javascript_name="ips.store.category.js" javascript_type="controller" javascript_version="5000049" javascript_position="1000200"><![CDATA[/**
<file javascript_app="nexus" javascript_location="front" javascript_path="controllers/store" javascript_name="ips.store.category.js" javascript_type="controller" javascript_version="5000074" javascript_position="1000200"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -977,7 +977,7 @@
}
});
}(jQuery, _));]]></file>
<file javascript_app="nexus" javascript_location="front" javascript_path="controllers/store" javascript_name="ips.store.currencySelect.js" javascript_type="controller" javascript_version="5000049" javascript_position="1000200">/**
<file javascript_app="nexus" javascript_location="front" javascript_path="controllers/store" javascript_name="ips.store.currencySelect.js" javascript_type="controller" javascript_version="5000074" javascript_position="1000200"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -986,12 +986,14 @@
* Author: Mark Wade
*/
;( function($, _, undefined){
&quot;use strict&quot;;
"use strict";
ips.controller.register('nexus.front.store.currencySelect', {
currencyChangeWarningConfirmed: false,
initialize: function () {
this.on( 'click', 'a', this.currencyChangeWarning );
this.on( 'submit', 'form', this.currencyChangeWarning );
},
/**
@@ -1001,17 +1003,22 @@
* @returns {void}
*/
currencyChangeWarning: function (e) {
e.preventDefault();
if( this.currencyChangeWarningConfirmed )
{
return;
}
var url = $(e.currentTarget).attr('href');
e.preventDefault();
ips.ui.alert.show({
type: 'confirm',
message: ips.getString('store_currency_change_warning'),
icon: 'warn',
callbacks: {
ok: function () {
window.location = url;
ok: () => {
this.currencyChangeWarningConfirmed = true;
let submitButton = (e instanceof SubmitEvent || e.originalEvent.submitter instanceof Element) ? e.originalEvent.submitter : e.target.querySelector('button[type="submit"], button:not([type]), input[type="submit"]');
submitButton.click();
}
}
});
@@ -1019,8 +1026,8 @@
}
});
}(jQuery, _));</file>
<file javascript_app="nexus" javascript_location="front" javascript_path="controllers/store" javascript_name="ips.store.giftCard.js" javascript_type="controller" javascript_version="5000049" javascript_position="1000200"><![CDATA[/**
}(jQuery, _));]]></file>
<file javascript_app="nexus" javascript_location="front" javascript_path="controllers/store" javascript_name="ips.store.giftCard.js" javascript_type="controller" javascript_version="5000074" javascript_position="1000200"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -1108,7 +1115,7 @@
}
});
}(jQuery, _));]]></file>
<file javascript_app="nexus" javascript_location="front" javascript_path="controllers/store" javascript_name="ips.store.packagePage.js" javascript_type="controller" javascript_version="5000049" javascript_position="1000200"><![CDATA[/**
<file javascript_app="nexus" javascript_location="front" javascript_path="controllers/store" javascript_name="ips.store.packagePage.js" javascript_type="controller" javascript_version="5000074" javascript_position="1000200"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -1385,7 +1392,7 @@
});
}(jQuery, _));]]></file>
<file javascript_app="nexus" javascript_location="front" javascript_path="controllers/store" javascript_name="ips.store.register.js" javascript_type="controller" javascript_version="5000049" javascript_position="1000200"><![CDATA[/**
<file javascript_app="nexus" javascript_location="front" javascript_path="controllers/store" javascript_name="ips.store.register.js" javascript_type="controller" javascript_version="5000074" javascript_position="1000200"><![CDATA[/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -1534,7 +1541,7 @@
},
});
}(jQuery, _));]]></file>
<file javascript_app="nexus" javascript_location="front" javascript_path="controllers/subscriptions" javascript_name="ips.subscriptions.main.js" javascript_type="controller" javascript_version="5000049" javascript_position="1000150">/**
<file javascript_app="nexus" javascript_location="front" javascript_path="controllers/subscriptions" javascript_name="ips.subscriptions.main.js" javascript_type="controller" javascript_version="5000074" javascript_position="1000150">/**
* Invision Community
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
*
@@ -1572,7 +1579,7 @@
}
});
}(jQuery, _));</file>
<file javascript_app="nexus" javascript_location="admin" javascript_path="templates" javascript_name="ips.templates.store.js" javascript_type="template" javascript_version="5000049" javascript_position="1000050"><![CDATA[ips.templates.set('nexus.store.images', `
<file javascript_app="nexus" javascript_location="admin" javascript_path="templates" javascript_name="ips.templates.store.js" javascript_type="template" javascript_version="5000074" javascript_position="1000050"><![CDATA[ips.templates.set('nexus.store.images', `
<div class='ipsUploader__row ipsUploader__row--image ipsAttach {{#done}}ipsAttach_done{{/done}}' id='{{id}}' data-role='file' data-fileid='{{id}}' data-fullsizeurl='{{imagesrc}}' data-thumbnailurl='{{thumbnail}}' data-fileType='image'>
<div class='ipsUploader__rowPreview' data-role='preview'>
{{#thumb}}
@@ -1605,12 +1612,12 @@
ips.templates.set('nexus.store.imagesWrapper', `
<div class='ipsUploader__container ipsUploader__container--images'>{{{content}}}</div>
`);]]></file>
<file javascript_app="nexus" javascript_location="front" javascript_path="templates" javascript_name="ips.templates.store.js" javascript_type="template" javascript_version="5000049" javascript_position="1000050"><![CDATA[ips.templates.set('nexus.store.productImage', " \
<file javascript_app="nexus" javascript_location="front" javascript_path="templates" javascript_name="ips.templates.store.js" javascript_type="template" javascript_version="5000074" javascript_position="1000050"><![CDATA[ips.templates.set('nexus.store.productImage', " \
<a href='{{fullURL}}' data-fullURL='{{fullURL}}' class='cNexusProduct_primaryImage' data-ipsLightbox data-ipsLightbox-group='product' style='background-image:url({{thumbURL}})'>\
<img src='{{thumbURL}}' alt=''>\
</a>\
");]]></file>
<file javascript_app="nexus" javascript_location="global" javascript_path="templates" javascript_name="ips.templates.gateways.js" javascript_type="template" javascript_version="5000049" javascript_position="1000050"><![CDATA[ips.templates.set('nexus.gateway.vaultAccount', " \
<file javascript_app="nexus" javascript_location="global" javascript_path="templates" javascript_name="ips.templates.gateways.js" javascript_type="template" javascript_version="5000074" javascript_position="1000050"><![CDATA[ips.templates.set('nexus.gateway.vaultAccount', " \
<li>\
<input type='radio' name='{{fieldName}}[stored]' value='{{value}}' id='{{fieldName}}_stored{{random}}' data-control='toggle' data-toggles='{{fieldName}}_existing' class='ipsInput ipsInput--toggle'>\
<div class='ipsFieldList__content'>\
@@ -1630,8 +1637,7 @@ mustache
Debug.js
app.js</order>
<order app="global" path="/dev/js//library//jquery">jquery.js
jquery-migrate.js
jquery.transform.js</order>
jquery-migrate.js</order>
<order app="global" path="/dev/js//library//linkify">linkify.min.js
linkify-jquery.min.js</order>
</javascript>
+4 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<language>
<app key="nexus" version="5000049">
<app key="nexus" version="5000074">
<word key="__app_nexus" js="0">Commerce</word>
<word key="menutab__nexus" js="0">Commerce</word>
<word key="menutab__nexus_icon" js="0">usd</word>
@@ -2568,6 +2568,7 @@ At this stage, no further action is required from you. We will send you an addit
<word key="ext__Gateway" js="0">Payment Gateway</word>
<word key="ext__Payout" js="0">Payout Gateway</word>
<word key="ext__LicenseKey" js="0">Add a license key type as used in purchase benefits</word>
<word key="ext__PackageType" js="0">Create a custom package type</word>
<word key="cm_store_view" js="0">Default Store Layout</word>
<word key="cm_store_view_grid" js="0">Grid: show products as cards</word>
<word key="cm_store_view_list" js="0">List: show products in a list</word>
@@ -2575,6 +2576,8 @@ At this stage, no further action is required from you. We will send you an addit
<word key="extension_item_key" js="0">Item Key</word>
<word key="extension_item_key_desc" js="0"><![CDATA[Stored in the nexus_purchases.ps_type field.<br>Must be unique to your application.]]></word>
<word key="err_duplicate_item_key" js="0">This item key is already in use</word>
<word key="extension_packagetype_table" js="0">Database Table</word>
<word key="extension_packagetype_table_desc" js="0">The table where your custom package data will be stored</word>
<word key="acpsearch__nexus_customers_fields" js="0">Customer Fields</word>
<word key="acpsearch__nexus_store_fields" js="0">Package Fields</word>
<word key="acpsearch__nexus_payments_paymentsettings" js="0">Payment Settings</word>
+28 -27
View File
@@ -320,7 +320,9 @@
{{if \count( $recurrings )}}
{{$taxAmount = new \IPS\Math\Number('0');}}
{{foreach $recurrings as $recurring}}
<h3 class="ipsTitle ipsTitle--h3 i-margin-top_3">{lang="renewals_header" sprintf="$recurring['term']->getTermUnit()"}</h3>
<div class="i-padding_3">
<h3 class="ipsTitle ipsTitle--h3 i-margin-top_3">{lang="renewals_header" sprintf="$recurring['term']->getTermUnit()"}</h3>
</div>
<i-data>
<ul class="ipsData ipsData--table ipsData--renewals i-margin-top_3">
{{foreach $recurring['items'] as $rId => $item}}
@@ -1666,7 +1668,7 @@
</ul>
{{endif}}
<dl class='cNexusPurchase_info i-margin-top_3'>
<dl class='cNexusPurchase_info i-margin-top_3' data-ips-hook="purchaseInfo">
<dt class='ipsMinorTitle'><strong>{lang="ps_start"}</strong></dt>
<dd>{$purchase->start->localeDate()}</dd>
{{if $purchase->expire}}
@@ -1778,7 +1780,7 @@
{{endif}}
</div>
</div>
<div class='ipsButtons ipsButtons--fill ipsButtons--start i-padding-top_2'>
<div class='ipsButtons ipsButtons--fill ipsButtons--start i-padding-top_2' data-ips-hook="purchaseButtons">
{{if $fromBillingAgreement}}
<!-- <a href='{$purchase->url()}' class='ipsButton ipsButton--secondary ipsButton--small' title="{lang="purchases_manage_purchase"}"><i class="fa-solid fa-box-open"></i> {lang="view"}</a> -->
{{else}}
@@ -1841,7 +1843,7 @@
<div role='tablist'>
{{foreach $tabs as $k => $tab}}
<a href='{$customer->acpUrl()->setQueryString( array( 'do' => 'view', 'blockKey' => 'nexus_AccountInformation', 'block[nexus_AccountInformation]' => $k ) )}' class='ipsTabs__tab' id='ipsTabs_customer_{$k}' role="tab" aria-controls="ipsTabs_customer_{$k}_panel" aria-selected="{{if $activeTabKey == $k}}true{{else}}{{endif}}" data-ipsTooltip title='{lang="customer_tab_{$k}"}'>
<i class='fa-solid fa-{$tab['icon']}'></i> <span class='ipsResponsive_showPhone'>&nbsp;&nbsp;{lang="customer_tab_{$k}"}</span>
<i class='{$tab['icon']}'></i> <span class='ipsResponsive_showPhone'>{lang="customer_tab_{$k}"}</span>
{{if $tab['count']}}<span class='ipsNotification'>{$tab['count']}</span>{{endif}}
</a>
{{endforeach}}
@@ -1928,10 +1930,10 @@
</div>]]></template>
<template template_group="customers" template_name="accountInformationTablePreview" template_data="$customer, $table, $title, $type" template_location="admin" template_app="nexus"><![CDATA[<div class="i-padding_3">
{{$count = \count( $table->getRows(NULL) );}}
<h3 class='ipsTitle ipsTitle--h3 ipsTruncate ipsTruncate_line {{if !$count}}i-color_soft{{endif}}'>{{if $count}}<strong>{{endif}}{$title}{{if $count}}</strong>{{endif}}</h3>
<h3 class='ipsTitle ipsTitle--h4'>{$title}</h3>
{$table|raw}
<p class='i-margin-top_1'>
<a href='{url="app=core&module=members&controller=members&do=editBlock&block=IPS\\nexus\\extensions\\core\\MemberACPProfileBlocks\\AccountInformation&id={$customer->member_id}&type={$type}"}' data-ipsDialog data-ipsDialog-title='{lang="customer_tab_{$type}"}' class='ipsButton ipsButton--inherit ipsButton--tiny ipsButton--wide'>
<a href='{url="app=core&module=members&controller=members&do=editBlock&block=IPS\\nexus\\extensions\\core\\MemberACPProfileBlocks\\AccountInformation&id={$customer->member_id}&type={$type}"}' data-ipsDialog data-ipsDialog-title='{lang="customer_tab_{$type}"}' class='ipsButton ipsButton--inherit ipsButton--wide'>
{lang="customer_manage_{$type}"} <i class='fa-solid fa-caret-down'></i>
</a>
</p>
@@ -1990,7 +1992,7 @@
{{endif}}]]></template>
<template template_group="customers" template_name="altContactsOverview" template_data="$table, $headers, $rows, $quickSearch" template_location="admin" template_app="nexus"><![CDATA[
{{if \count( $rows )}}
<ul class='cCustomerOther_list i-grid i-gap_3'>
<ul class='cCustomerOther_list i-grid i-gap_2 i-margin-top_2 i-margin-bottom_3'>
{template="$table->rowsTemplate[1]" params="$table, $headers, $rows" object="$table->rowsTemplate[0]"}
</ul>
{{else}}
@@ -1999,10 +2001,10 @@
<template template_group="customers" template_name="altContactsOverviewRows" template_data="$table, $headers, $rows" template_location="admin" template_app="nexus"><![CDATA[
{{foreach $rows as $row}}
<li>
<p class='ipsTruncate ipsTruncate_line'>
<p class='i-font-weight_600 i-color_hard'>
{$row['alt_id']|raw}
</p>
<span class='i-font-size_1 i-color_soft'>{$row['email']}</span>
<span class='i-color_soft'>{$row['email']}</span>
</li>
{{endforeach}}]]></template>
<template template_group="customers" template_name="billingAgreementsOverview" template_data="$table, $headers, $rows, $quickSearch" template_location="admin" template_app="nexus"><![CDATA[
@@ -2654,7 +2656,7 @@
</label>
<div class='ipsFieldRow__content'>
{{if $field->options['dummy']}}
<div class="ipsInput ipsInput--text ipsInput--dummy ipsInput--primary" id="elInput_{$field->htmlId}-number" data-role="dummyCard"></div>
<div class="ipsInput ipsInput--text ipsInput--dummy ipsInput--primary ipsInput--stripeInput" id="elInput_{$field->htmlId}-number" data-role="dummyCard"></div>
{{else}}
<input type="text" class='ipsInput ipsInput--text ipsInput--primary' {{if $field->options['names']}}name="{$field->name}[number]"{{endif}} data-card="number" id="elInput_{$field->htmlId}-number" maxlength="16" value="{$number}" autocomplete="cc-number">
{{endif}}
@@ -2669,7 +2671,7 @@
</label>
<div class='ipsFieldRow__content'>
{{if $field->options['dummy']}}
<div class="ipsInput ipsInput--text ipsInput--dummy" id="elInput_{$field->htmlId}-exp" data-role="dummyExp"></div>
<div class="ipsInput ipsInput--text ipsInput--dummy ipsInput--stripeInput" id="elInput_{$field->htmlId}-exp" data-role="dummyExp"></div>
{{else}}
<select class="ipsInput ipsInput--select" {{if $field->options['names']}}name="{$field->name}[exp_month]"{{endif}} data-card="exp_month" id="elInput_{$field->htmlId}-exp_month" autocomplete="cc-exp-month">
<option {{if $expMonth === NULL}}selected{{endif}} disabled>MM</option>
@@ -2696,7 +2698,7 @@
</label>
<div class='ipsFieldRow__content'>
{{if $field->options['dummy']}}
<div class="ipsInput ipsInput--text ipsInput--dummy" id="elInput_{$field->htmlId}-ccv" data-role="dummyCcv"></div>
<div class="ipsInput ipsInput--text ipsInput--dummy ipsInput--stripeInput" id="elInput_{$field->htmlId}-ccv" data-role="dummyCcv"></div>
{{else}}
<input type="text" class="ipsInput ipsInput--text" size='4' {{if $field->options['names']}}name="{$field->name}[ccv]"{{endif}} data-card="ccv" id="elInput_{$field->htmlId}-ccv" maxlength="4" value="{$ccv}" autocomplete="cc-csc">
{{endif}}
@@ -5216,19 +5218,20 @@
{{$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() );}}
<div class='i-text-align_center ipsBox i-padding_3 i-margin-top_2' {{if isset( $_SESSION['cart'] ) and \count( $_SESSION['cart'] )}}data-controller="nexus.front.store.currencySelect"{{endif}}>
<span>{lang="show_prices_in"}</span><br>
<ul class='ipsList ipsList--inline i-link-color_inherit'>
<form action="{$baseUrl}" method="post">
<input type="hidden" name="csrfKey" value="{expression="\IPS\Session::i()->csrfKey"}">
<ul class='ipsButtons i-link-color_inherit i-margin-top_2'>
{{foreach \IPS\nexus\Money::currencies() as $currency}}
<li>
{{if $currency == $memberCurrency}}
<a data-action="filter" href='{$baseUrl->setQueryString( 'currency', $currency )->csrf()}' title='{lang="set_currency_to" sprintf="$currency"}'>
<strong><i class='fa-solid fa-check'></i> {$currency}</strong>
</a>
<button type="submit" name="currency" value="{$currency}" class='ipsButton ipsButton--primary ipsButton--small'><i class='fa fa-check'></i> {$currency}</button>
{{else}}
<a data-action="filter" href='{$baseUrl->setQueryString( 'currency', $currency )->csrf()}' title='{lang="set_currency_to" sprintf="$currency"}'>{$currency}</a>
<button type="submit" name="currency" value="{$currency}" class='ipsButton ipsButton--soft ipsButton--small' title='{lang="set_currency_to" sprintf="$currency"}'> {$currency}</button>
{{endif}}
</li>
{{endforeach}}
</ul>
</form>
</div>
{{endif}}]]></template>
<template template_group="store" template_name="fraudRuleDesc" template_data="$conditions, $results, $warning" template_location="admin" template_app="nexus"><![CDATA[<div class="i-margin-top_1">
@@ -5681,17 +5684,17 @@
{{if $package->image}}
<img src="{$package->image}" alt="{$package->_title}" loading="lazy">
{{else}}
<i class="fa-solid fa-box-open"></i>
<span class='ipsIcon ipsIcon--fa' aria-hidden="true"><i class="fa-solid fa-box-open"></i></span>
{{endif}}
</a>
<div class='ipsData__content'>
<div class='ipsData__main'>
<div class='ipsTitle ipsTitle--h5 ipsTitle--margin'>
<div class='ipsData__title'>
<h2><a href="{$package->url()}">{$package->_title}</a></h2>
{{if $package->featured}}<span class="ipsBadge ipsBadge--icon ipsBadge--positive" data-ipsTooltip title='{lang="featured"}'><i class='fa-solid fa-star'></i></span>{{endif}}
</div>
{template="packageBlockPrice" app="nexus" group="store" params="$package->fullPriceInfo()"}
{template="richText" group="global" app="core" location="global" params="$package->description, array('ipsTruncate_4', 'i-margin-top_2')"}
<div class="ipsData__desc">{$package->description}</div>
{{if $package->reviewable}}
<div class='i-margin-top_2'>
{template="rating" group="global" app="core" params="'large', $package->item()->averageReviewRating(), \IPS\Settings::i()->reviews_rating_out_of, $package->item()->memberReviewRating()"} <span class='i-color_soft'>({lang="num_reviews" pluralize="$package->item()->reviews"})</span>
@@ -6180,7 +6183,7 @@
</div>
{{endif}}]]></template>
<template template_group="subscription" template_name="row" template_data="$package, $subscription, $showImagePlaceholder=FALSE" template_location="front" template_app="nexus"><![CDATA[<!--{$package->id}-->
<div class='ipsData__item cSubscriptions {{if isset( \IPS\Request::i()->id ) and \IPS\Request::i()->id == $package->id}}cSubscription--highlighted{{endif}} {{if $subscription and $subscription->package and $subscription->package->id === $package->id}}cSubscription--active {{if !$subscription->active}}cSubscription--expired{{endif}}{{endif}} {$package->ui( 'css' )}' {$package->ui( 'dataAttributes' )}>
<div class='ipsData__item cSubscriptions {{if isset( \IPS\Request::i()->id ) and \IPS\Request::i()->id == $package->id}}cSubscription--highlighted{{endif}} {{if $subscription and $subscription->package and $subscription->package->id === $package->id}}cSubscription--active {{if !$subscription->active}}cSubscription--expired{{endif}}{{endif}} {$package->ui( 'css' )}' {$package->ui( 'dataAttributes' )} data-ips-hook="block">
{{if $package->_image || $showImagePlaceholder}}
<div class='ipsData__image' aria-hidden='true'>
{{if $package->_image}}
@@ -6191,7 +6194,7 @@
</div>
{{endif}}
<div class='ipsData__content'>
<div class="ipsData__main">
<div class="ipsData__main" data-ips-hook="header">
<h2 class='ipsData__title'>{$package->_title}</h2>
<div>
{{if $priceInfo = $package->priceInfo() and $priceInfo['primaryPrice']}}
@@ -6212,7 +6215,7 @@
{{$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'>
<div class='cSubscriptionInfo' data-ips-hook="infoActivePurchase">
<ul class='ipsButtons ipsButtons--fill'>
{{if $pendingInvoice = $subscription->purchase->invoice_pending and $pendingInvoice->status === $pendingInvoice::STATUS_PENDING}}
<li>
@@ -6244,7 +6247,7 @@
</div>
{{endif}}
{{elseif $upgradeCost !== NULL}}
<div class='cSubscriptionInfo'>
<div class='cSubscriptionInfo' data-ips-hook="infoExpiredPurchase">
<ul class='ipsButtons ipsButtons--fill'>
{{if $upgradeCost->amount->isGreaterThanZero() or ( $upgradeCost->amount->isZero() and $package->price() >= $subscription->package->price())}}
<li>
@@ -6286,7 +6289,7 @@
{{endif}}
{{endif}}
{{else}}
<div class='cSubscriptionInfo'>
<div class='cSubscriptionInfo' data-ips-hook="infoNoPurchase">
<a href='{url="app=nexus&module=subscriptions&controller=subscriptions&do=purchase&id={$package->id}" csrf="true" seoTemplate="nexus_subscription"}' class="ipsButton ipsButton--primary">{lang="nexus_subs_buy"}</a>
</div>
{{endif}}
@@ -8534,7 +8537,6 @@ ul.cInvoiceUnpaidConsequences ul {
.cInvoiceUnpaidConsequences_warning:before {
font-family: var(--i-font-awesome);
-moz-osx-font-smoothing: grayscale;
-webkit-font-smoothing: antialiased;
text-rendering: auto;
font-weight: 900;
@@ -8566,7 +8568,6 @@ ul.cInvoiceUnpaidConsequences ul {
top: 0px;
inset-inline-start: -22px;
font-family: var(--i-font-awesome);
-moz-osx-font-smoothing: grayscale;
-webkit-font-smoothing: antialiased;
text-rendering: auto;
font-weight: 900;
+33 -1
View File
@@ -268,6 +268,13 @@
"107785": "4.7.19",
"107786": "4.7.19",
"107787": "4.7.19",
"107795": "4.7.20 Beta 1",
"107796": "4.7.20 Beta 2",
"107797": "4.7.20 Beta 3",
"107798": "4.7.20 Beta 4",
"107799": "4.7.20 Beta 5",
"107800": "4.7.20",
"107801": "4.7.20",
"500001": "5.0.0 Alpha 1",
"500002": "5.0.0 Alpha 2",
"5000003": "5.0.0 Alpha 3",
@@ -316,5 +323,30 @@
"5000046": "5.0.0 Beta 14",
"5000047": "5.0.0 Beta 14.1",
"5000048": "5.0.0 Beta 14.2",
"5000049": "5.0.0"
"5000049": "5.0.0",
"5000050": "5.0.0",
"5000051": "5.0.0",
"5000052": "5.0.1",
"5000053": "5.0.1",
"5000054": "5.0.2",
"5000055": "5.0.2",
"5000056": "5.0.2",
"5000057": "5.0.3",
"5000058": "5.0.3",
"5000059": "5.0.3",
"5000060": "5.0.3",
"5000061": "5.0.4 Beta 1",
"5000062": "5.0.4 Beta 1",
"5000063": "5.0.4 Beta 1",
"5000064": "5.0.4 Beta 2",
"5000065": "5.0.4 Beta 3",
"5000066": "5.0.4",
"5000067": "5.0.5 Beta 1",
"5000068": "5.0.5 Beta 2",
"5000069": "5.0.5",
"5000070": "5.0.6 Beta 1",
"5000071": "5.0.6 Beta 2",
"5000072": "5.0.6 Beta 3",
"5000073": "5.0.6 Beta 4",
"5000074": "5.0.6"
}