Version 4.7.0
This commit is contained in:
1 parent
517a5e1f70
commit
8ba7d43898
1933 files changed
+65613
-11332
No files matched your search
@@ -30,6 +30,14 @@ class _Application extends \IPS\Application
|
||||
*/
|
||||
public function init()
|
||||
{
|
||||
if ( !\IPS\Request::i()->isAjax() )
|
||||
{
|
||||
if ( \IPS\Settings::i()->gateways_counts and $decoded = json_decode( \IPS\Settings::i()->gateways_counts, TRUE ) and isset( $decoded['Stripe'] ) and $decoded['Stripe'] > 0 )
|
||||
{
|
||||
\IPS\Output::i()->jsFiles[] = 'https://js.stripe.com/v3/';
|
||||
}
|
||||
}
|
||||
|
||||
if ( \IPS\Request::i()->app == 'nexus' and \IPS\Request::i()->module == 'payments' and \IPS\Request::i()->section == 'receive' and \IPS\Request::i()->validate == 'paypal' )
|
||||
{
|
||||
if ( ( \IPS\Request::i()->txn_type == 'subscr_payment' or \IPS\Request::i()->txn_type == 'recurring_payment' ) and \IPS\Request::i()->payment_status == 'Completed' )
|
||||
@@ -343,6 +351,61 @@ class _Application extends \IPS\Application
|
||||
{
|
||||
return 'shopping-cart';
|
||||
}
|
||||
|
||||
/**
|
||||
* A list of whitelisted modules which should be accessible without the subscription check.
|
||||
*
|
||||
* @var string[]
|
||||
*/
|
||||
static $bypassSubscriptionCheckControllers = ['store', 'checkout', 'subscriptions', 'system'];
|
||||
|
||||
/**
|
||||
* Do Member Check
|
||||
*
|
||||
* @return \IPS\Http\Url|NULL
|
||||
*/
|
||||
public function doMemberCheck(): ?\IPS\Http\Url
|
||||
{
|
||||
/* These checks do not apply to staff accounts or support account */
|
||||
if( \is_array( \IPS\Member::loggedIn()->modPermissions() ) OR \IPS\Member::loggedIn()->isAdmin() OR \IPS\Member::loggedIn()->members_bitoptions['is_support_account'] )
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if ( \IPS\Settings::i()->nexus_subs_enabled AND \IPS\Settings::i()->nexus_subs_register AND !\in_array( \IPS\Dispatcher::i()->module->key, static::$bypassSubscriptionCheckControllers ) )
|
||||
{
|
||||
if( !isset( \IPS\Data\Store::i()->nexus_sub_count ) )
|
||||
{
|
||||
\IPS\Data\Store::i()->nexus_sub_count = \IPS\Db::i()->select( 'count(*)', 'nexus_member_subscription_packages', [ 'sp_enabled=?', 1 ] )->first();
|
||||
}
|
||||
|
||||
/* This user didn't join recently, so we don't need to redirect them */
|
||||
if( \IPS\Data\Store::i()->nexus_sub_count AND (int) \IPS\Settings::i()->nexus_subs_register === 1 AND !\IPS\Member::loggedIn()->joinedRecently() )
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if ( \IPS\Data\Store::i()->nexus_sub_count AND !\IPS\nexus\Subscription::loadByMember( \IPS\Member::loggedIn(), (int) \IPS\Settings::i()->nexus_subs_register === 2 ? TRUE : FALSE ) )
|
||||
{
|
||||
return \IPS\Http\Url::internal( "app=nexus&module=subscriptions&controller=subscriptions®ister=" . (int) \IPS\Settings::i()->nexus_subs_register, 'front', 'nexus_subscriptions' );
|
||||
}
|
||||
}
|
||||
|
||||
if ( \IPS\Settings::i()->nexus_reg_force AND !\in_array( \IPS\Dispatcher::i()->module->key, static::$bypassSubscriptionCheckControllers ) AND \IPS\Member::loggedIn()->joinedRecently() )
|
||||
{
|
||||
if( !isset( \IPS\Data\Store::i()->nexus_reg_product_count ) )
|
||||
{
|
||||
\IPS\Data\Store::i()->nexus_reg_product_count = \IPS\nexus\Package::haveRegistrationProducts();
|
||||
}
|
||||
|
||||
if ( \IPS\Data\Store::i()->nexus_reg_product_count AND !\IPS\Db::i()->select( 'COUNT(*)', 'nexus_purchases', array( "ps_member=? AND ps_active=?", \IPS\Member::loggedIn()->member_id, 1 ) )->first() )
|
||||
{
|
||||
return \IPS\Output::i()->redirect( \IPS\Http\Url::internal( 'app=nexus&module=store&controller=store&do=register', 'front', 'store' ) );
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Can view page even when user is a guest when guests cannot access the site
|
||||
@@ -489,19 +552,24 @@ class _Application extends \IPS\Application
|
||||
}
|
||||
|
||||
/**
|
||||
* Return an array of specific links to add to the sitemap
|
||||
* Returns a list of all existing webhooks and their payload in this app.
|
||||
*
|
||||
* @return array
|
||||
* @return array
|
||||
*/
|
||||
public function sitemapLinks()
|
||||
public function getWebhooks(): array
|
||||
{
|
||||
$return = array( \IPS\Http\Url::internal( 'app=nexus&module=store&controller=store', 'front', 'store' ) );
|
||||
|
||||
if( \IPS\Settings::i()->nexus_subs_enabled )
|
||||
foreach( [
|
||||
\IPS\nexus\Support\Request::class,
|
||||
\IPS\nexus\Support\Reply::class,
|
||||
] as $class )
|
||||
{
|
||||
$return[] = \IPS\Http\Url::internal( 'app=nexus&module=subscriptions&controller=subscriptions', 'front', 'nexus_subscriptions' );
|
||||
$key = str_replace( '\\', '', \substr( $class, 3 ) );
|
||||
$hooks[$key .'_create'] = $class;
|
||||
$hooks[$key .'_delete'] = $class;
|
||||
\IPS\Member::loggedIn()->language()->words[ 'webhook_' . $key .'_create' ] = \IPS\Member::loggedIn()->language()->addToStack('webhook_contentitem_created', FALSE, ['sprintf' => [ $class::_indefiniteArticle() ]]);
|
||||
\IPS\Member::loggedIn()->language()->words[ 'webhook_' . $key .'_delete' ] = \IPS\Member::loggedIn()->language()->addToStack('webhook_contentitem_deleted', FALSE, ['sprintf' => [ $class::_indefiniteArticle() ]]);
|
||||
}
|
||||
|
||||
return $return;
|
||||
return $hooks;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -178,8 +178,15 @@ class _supportreplies extends \IPS\Content\Api\CommentController
|
||||
}
|
||||
else
|
||||
{
|
||||
$author = new \IPS\Member;
|
||||
$author->name = \IPS\Request::i()->author_name;
|
||||
if ( \IPS\Request::i()->author === 0 )
|
||||
{
|
||||
$author = new \IPS\Member;
|
||||
$author->name = \IPS\Request::i()->author_name;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new \IPS\Api\Exception( 'NO_AUTHOR', '1X314/3', 400 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -74,7 +74,7 @@
|
||||
<setting key="nexus_donate_loggedin"><![CDATA[{"key":"nexus_donate_loggedin","default":"0","report":"full"}]]></setting>
|
||||
<setting key="nexus_enom_pw"><![CDATA[{"key":"nexus_enom_pw","default":"","report":"none"}]]></setting>
|
||||
<setting key="nexus_enom_un"><![CDATA[{"key":"nexus_enom_un","default":"","report":"bool"}]]></setting>
|
||||
<setting key="nexus_gift_vouchers"><![CDATA[{"key":"nexus_gift_vouchers","default":"","report":"bool"}]]></setting>
|
||||
<setting key="nexus_gift_vouchers"><![CDATA[{"key":"nexus_gift_vouchers","default":"{}","report":"bool"}]]></setting>
|
||||
<setting key="nexus_gift_vouchers_free"><![CDATA[{"key":"nexus_gift_vouchers_free","default":"0","report":"full"}]]></setting>
|
||||
<setting key="nexus_hosting_allow_change_domain"><![CDATA[{"key":"nexus_hosting_allow_change_domain","default":"1","report":"full"}]]></setting>
|
||||
<setting key="nexus_hosting_allow_own_domain"><![CDATA[{"key":"nexus_hosting_allow_own_domain","default":"1","report":"full"}]]></setting>
|
||||
@@ -101,7 +101,7 @@
|
||||
<setting key="nexus_payout_unlimited_times"><![CDATA[{"key":"nexus_payout_unlimited_times","default":"1","report":"full"}]]></setting>
|
||||
<setting key="nexus_reg_force"><![CDATA[{"key":"nexus_reg_force","default":"0","report":"full"}]]></setting>
|
||||
<setting key="nexus_reg_group"><![CDATA[{"key":"nexus_reg_group","default":"0","report":"bool"}]]></setting>
|
||||
<setting key="nexus_require_billing"><![CDATA[{"key":"nexus_require_billing","default":"product,giftvoucher,donation,domain,other","report":"bool"}]]></setting>
|
||||
<setting key="nexus_require_billing"><![CDATA[{"key":"nexus_require_billing","default":"product,giftvoucher,donation,domain,other,subscriptions","report":"bool"}]]></setting>
|
||||
<setting key="nexus_revw_sa"><![CDATA[{"key":"nexus_revw_sa","default":"0","report":"full"}]]></setting>
|
||||
<setting key="nexus_severities"><![CDATA[{"key":"nexus_severities","default":"1","report":"full"}]]></setting>
|
||||
<setting key="nexus_show_renew_option_savings"><![CDATA[{"key":"nexus_show_renew_option_savings","default":"amount","report":"full"}]]></setting>
|
||||
@@ -113,7 +113,7 @@
|
||||
<setting key="nexus_split_payments"><![CDATA[{"key":"nexus_split_payments","default":"0","report":"full"}]]></setting>
|
||||
<setting key="nexus_store_new"><![CDATA[{"key":"nexus_store_new","default":"10,30","report":"bool"}]]></setting>
|
||||
<setting key="nexus_store_popular"><![CDATA[{"key":"nexus_store_popular","default":"10,365","report":"bool"}]]></setting>
|
||||
<setting key="nexus_subs_downgrade"><![CDATA[{"key":"nexus_subs_downgrade","default":"0","report":"none"}]]></setting>
|
||||
<setting key="nexus_subs_downgrade"><![CDATA[{"key":"nexus_subs_downgrade","default":"0","report":"full"}]]></setting>
|
||||
<setting key="nexus_subs_enabled"><![CDATA[{"key":"nexus_subs_enabled","default":"0","report":"full"}]]></setting>
|
||||
<setting key="nexus_subs_exclude_groups"><![CDATA[{"key":"nexus_subs_exclude_groups","default":"4","report":"bool"}]]></setting>
|
||||
<setting key="nexus_subs_invoice_grace"><![CDATA[{"key":"nexus_subs_invoice_grace","default":"3","report":"none"}]]></setting>
|
||||
@@ -231,6 +231,5 @@
|
||||
<hook key="register"><![CDATA[{"type":"C","class":"\\IPS\\core\\modules\\front\\system\\register"}]]></hook>
|
||||
<hook key="clientAreaLink"><![CDATA[{"type":"S","class":"\\IPS\\Theme\\class_core_front_global"}]]></hook>
|
||||
<hook key="Database"><![CDATA[{"type":"C","class":"\\IPS\\Data\\Store\\Database"}]]></hook>
|
||||
<hook key="frontDispatcher"><![CDATA[{"type":"C","class":"\\IPS\\Dispatcher\\Front"}]]></hook>
|
||||
<themesetting key="cm_store_view"><![CDATA[{"sc_key":"cm_store_view","sc_type":"Select","sc_multiple":0,"sc_content":"[{\"key\":\"grid\",\"value\":\"cm_store_view_grid\"},{\"key\":\"list\",\"value\":\"cm_store_view_list\"}]","sc_app":"nexus","sc_default":"grid","sc_tab_key":"custom","sc_show_in_vse":0,"sc_title":"themesetting_cm_store_view","sc_order":12,"sc_condition":null}]]></themesetting>
|
||||
</build>
|
||||
@@ -1494,7 +1494,203 @@
|
||||
---
|
||||
{$email->language->get('total')}: {$invoiceSummary['total']->toString( $email->language )}
|
||||
|
||||
-- {setting="board_name"}]]></template_content_plaintext><template_pinned>0</template_pinned></template><template><template_app>nexus</template_app><template_name>replyRequestLocked</template_name><template_content_html><![CDATA[
|
||||
-- {setting="board_name"}]]></template_content_plaintext><template_pinned>0</template_pinned></template><template><template_app>nexus</template_app><template_name>invoiceTrackExpired</template_name><template_content_html><![CDATA[
|
||||
{$email->language->get('email_tracked_invoice_expired')}
|
||||
<br /><br />
|
||||
|
||||
<h3 style="font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 24px; font-weight: 500; color: #333333; line-height: 21px; margin: 0 0 5px 0">
|
||||
{expression="sprintf( $email->language->get('invoice_number'), $invoice->id )"}
|
||||
</h3>
|
||||
<p style="font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 15px; line-height: 24px; margin: 0">
|
||||
{{if $invoice->po}}
|
||||
<strong>{$email->language->get('invoice_po_number')}: {$invoice->po}</strong><br />
|
||||
{{endif}}
|
||||
</p>
|
||||
<br />
|
||||
|
||||
<a href='{$invoice->acpUrl()}' style="color: #ffffff; font-family: 'Helvetica Neue', helvetica, sans-serif; text-decoration: none; font-size: 14px; background: {setting="email_color"}; line-height: 32px; padding: 0 10px; display: inline-block; border-radius: 3px;">{$email->language->get('invoice_view')}</a>
|
||||
<br />
|
||||
<br />
|
||||
<br />
|
||||
|
||||
<table cellpadding="0" cellspacing="0" border="0" width="100%" bgcolor="#ffffff" class='responsive_table'>
|
||||
<tr>
|
||||
<td dir='{dir}' width="{{if $invoice->hasPhysicalItems() and $invoice->shipaddress}}48%{{else}}100%{{endif}}" class='responsive_fullwidth' bgcolor="#f9f9f9">
|
||||
<table cellpadding="10" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td dir='{dir}' style="font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 15px; color: #333333; line-height: 21px" bgcolor="#f0f0f0">
|
||||
<strong>{$email->language->get("billing_address")}</strong>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td dir='{dir}' style="font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 15px; color: #333333; line-height: 21px">
|
||||
{$invoice->member->cm_name}<br />
|
||||
{{if $invoice->billaddress}}{$invoice->billaddress->toString('<br />')|raw}{{endif}}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
{{if $invoice->hasPhysicalItems() and $invoice->shipaddress}}
|
||||
<td dir='{dir}' width="4%"><img src='{setting="base_url"}applications/core/interface/email/spacer.png' width='1' height='1' alt=''></td>
|
||||
<td dir='{dir}' width="48%" class='responsive_fullwidth' bgcolor="#f9f9f9">
|
||||
<table cellpadding="10" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td dir='{dir}' style="font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 15px; color: #333333; line-height: 21px" bgcolor="#f0f0f0">
|
||||
<strong>{$email->language->get("shipping_address")}</strong>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td dir='{dir}' style="font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 15px; color: #333333; line-height: 21px">
|
||||
{$invoice->member->cm_name}<br />
|
||||
{$invoice->shipaddress->toString('<br />')|raw}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
{{endif}}
|
||||
</tr>
|
||||
</table>
|
||||
<br />
|
||||
|
||||
|
||||
<br />
|
||||
<table cellpadding="10" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td dir='{dir}' colspan="5" style="font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 15px; color: #333333; line-height: 21px" bgcolor="#f0f0f0">
|
||||
<strong>{$email->language->get("order_details")}</strong>
|
||||
</td>
|
||||
</tr>
|
||||
<tr bgcolor="#f9f9f9">
|
||||
<td dir='{dir}' style="font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 15px; color: #333333; line-height: 21px">
|
||||
|
||||
</td>
|
||||
<td dir='{dir}' style="font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 13px; color: #333333; line-height: 21px" colspan="2">
|
||||
<strong>{$email->language->addToStack('invoice_item', FALSE)}</strong>
|
||||
</td>
|
||||
<td dir='{dir}' style="font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 13px; color: #333333; line-height: 21px" align='right'>
|
||||
<strong>{$email->language->get('total')}</strong>
|
||||
</td>
|
||||
</tr>
|
||||
{{foreach $summary['items'] as $k => $item}}
|
||||
<tr style='border-top: 1px solid #f5f5f5'>
|
||||
<td dir='{dir}' width='100' valign='top' class='hidePhone' style='width: 0; max-height: 0; overflow: hidden; float: left;'>
|
||||
{{if $image = $item->image()}}
|
||||
<img src='{$image->url}' width='100' style='border: 0; vertical-align: middle;'>
|
||||
{{endif}}
|
||||
</td>
|
||||
<td dir='{dir}' style="font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 15px; color: #333333; line-height: 21px">
|
||||
<span style="color: #8d8d8d">{$item->quantity} x</span> {$item->name}
|
||||
{{if $item instanceof \IPS\nexus\Invoice\Item\Renewal and $purchase = \IPS\nexus\Purchase::load( $item->id ) and $expire = $purchase->expire}}
|
||||
<span style="color: #8d8d8d; font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 15px;">
|
||||
({$email->language->addToStack('ps_expire', FALSE)}: {expression="$expire->localeDate( $invoice->member )"})
|
||||
</span>
|
||||
{{endif}}
|
||||
</td>
|
||||
<td dir='{dir}' style="font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 15px; color: #333333; line-height: 21px">
|
||||
{{if \count( $item->details )}}
|
||||
{{foreach $item->details as $k => $v}}
|
||||
{lang="nexus_pfield_{$k}"}: {expression="\IPS\nexus\Package\CustomField::load( $k )->displayValue( $v )" raw="true"}<br>
|
||||
{{endforeach}}
|
||||
{{endif}}
|
||||
</td>
|
||||
<td dir='{dir}' style="font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 15px; color: #333333; line-height: 21px" align='right'>
|
||||
<strong>{$item->linePrice()->toString( $email->language )}</strong>
|
||||
{{if $item->quantity > 1}}
|
||||
<br><span style="color: #8d8d8d; font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 15px;">{$item->price->toString( $email->language )} {$email->language->get("each_short")}</span>
|
||||
{{endif}}
|
||||
</td>
|
||||
</tr>
|
||||
{{endforeach}}
|
||||
|
||||
|
||||
<tr style='border-top: 1px solid #dddddd'>
|
||||
<td dir='{dir}' colspan='3' align='right' style="font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 15px; color: #333333; line-height: 21px">
|
||||
<strong>{$email->language->get('subtotal')}</strong>
|
||||
</td>
|
||||
<td dir='{dir}' style="font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 15px; color: #333333; line-height: 21px" align='right'>
|
||||
<strong>{$summary['subtotal']->toString( $email->language )}</strong>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
{{foreach $summary['shipping'] as $shipping}}
|
||||
<tr style='border-top: 1px solid #f5f5f5'>
|
||||
<td dir='{dir}' colspan='3' align='right' style="font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 15px; color: #333333; line-height: 21px">
|
||||
{$shipping->name}
|
||||
</td>
|
||||
<td dir='{dir}' style="font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 15px; color: #333333; line-height: 21px" align='right'>
|
||||
<strong>{$shipping->linePrice()->toString( $email->language )}</strong>
|
||||
</td>
|
||||
</tr>
|
||||
{{endforeach}}
|
||||
|
||||
{{foreach $summary['tax'] as $taxId => $tax}}
|
||||
<tr style='border-top: 1px solid #f5f5f5'>
|
||||
<td dir='{dir}' colspan='3' align='right' style="font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 15px; color: #333333; line-height: 21px">
|
||||
{$email->language->get( 'nexus_tax_' . $taxId )} ({expression="$tax['rate']*100"}%)
|
||||
</td>
|
||||
<td dir='{dir}' style="font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 15px; color: #333333; line-height: 21px" align='right'>
|
||||
<strong>{$tax['amount']->toString( $email->language )}</strong>
|
||||
</td>
|
||||
</tr>
|
||||
{{endforeach}}
|
||||
|
||||
{{if $transactions = $invoice->transactions() and \count( $transactions )}}
|
||||
<tr style='border-top: 1px solid #dddddd'>
|
||||
<td dir='{dir}' colspan='3' align='right' style="font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 17px; line-height: 21px">
|
||||
<strong>{$email->language->get('total')}</strong>
|
||||
</td>
|
||||
<td dir='{dir}' style="font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 17px; line-height: 21px" align='right'>
|
||||
<strong>{$summary['total']->toString( $email->language )}</strong>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
{{else}}
|
||||
<tr style='border-top: 1px solid #dddddd'>
|
||||
<td dir='{dir}' colspan='3' align='right' style="font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 17px; color: #cd3816; line-height: 21px">
|
||||
<strong>{$email->language->get('total')}</strong>
|
||||
</td>
|
||||
<td dir='{dir}' style="font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 17px; color: #cd3816; line-height: 21px" align='right'>
|
||||
<strong>{$summary['total']->toString( $email->language )}</strong>
|
||||
</td>
|
||||
</tr>
|
||||
{{endif}}
|
||||
</table>
|
||||
|
||||
<!-- Signature -->
|
||||
<br /><br />
|
||||
<em style='color: #8c8c8c'>— {setting="board_name"}</em>]]></template_content_html><template_data>$invoice, $summary, $email</template_data><template_content_plaintext><![CDATA[
|
||||
{$email->language->get('email_tracked_invoice_expired')}
|
||||
|
||||
-- {setting="board_name"}
|
||||
|
||||
{expression="sprintf( $email->language->get('invoice_number'), $invoice->id )" raw="true"}
|
||||
=====
|
||||
{{if $invoice->po}}{$email->language->get('invoice_po_number')}: {$invoice->po}{{endif}}
|
||||
|
||||
{$email->language->get('invoice_view')}: {$invoice->acpUrl()}
|
||||
|
||||
|
||||
{$email->language->get("order_details")}
|
||||
=====
|
||||
{{foreach $summary['items'] as $k => $item}}
|
||||
{$item->quantity} x</span> {$item->name} [{$item->price->toString( $email->language )} {$email->language->get("each_short")}] ({$item->linePrice()->toString( $email->language )})
|
||||
{{endforeach}}
|
||||
---
|
||||
{$email->language->get('subtotal')}: {$summary['subtotal']->toString( $email->language )}
|
||||
{{if \count( $summary['shipping'] )}}
|
||||
---
|
||||
{{foreach $summary['shipping'] as $shipping}}
|
||||
{$shipping->name}: {$shipping->linePrice()->toString( $email->language )}
|
||||
{{endforeach}}
|
||||
{{endif}}
|
||||
{{if \count( $summary['tax'] )}}
|
||||
---
|
||||
{{foreach $summary['tax'] as $taxId => $tax}}
|
||||
{$email->language->get( 'nexus_tax_' . $taxId )} ({expression="$tax['rate']*100" raw="true"}%): {$tax['amount']->toString( $email->language )}
|
||||
{{endforeach}}
|
||||
{{endif}}
|
||||
---
|
||||
{$email->language->get('total')}: {$summary['total']->toString( $email->language )}]]></template_content_plaintext><template_pinned>0</template_pinned></template><template><template_app>nexus</template_app><template_name>replyRequestLocked</template_name><template_content_html><![CDATA[
|
||||
{$email->language->addToStack("support_bounced")}<br /><br />
|
||||
|
||||
{{if $request->department->email}}
|
||||
@@ -3088,8 +3284,10 @@
|
||||
{$shipment->address()->toString('<br>')|raw}
|
||||
</td>
|
||||
<td dir='{dir}' width='50%' style="font-family: 'Helvetica Neue', helvetica, sans-serif;" valign='top'>
|
||||
<strong>{$email->language->addToStack("email_shipping_method", FALSE)}</strong><br>
|
||||
{$email->language->addToStack( $shipment->method->_titleLanguageKey, FALSE )}
|
||||
{{if $shipment->method}}
|
||||
<strong>{$email->language->addToStack("email_shipping_method", FALSE)}</strong><br>
|
||||
{$email->language->addToStack( $shipment->method->_titleLanguageKey, FALSE )}
|
||||
{{endif}}
|
||||
{{if $shipment->tracknumber}}
|
||||
<br><br>
|
||||
<strong>{$email->language->addToStack("email_tracking_number", FALSE)}</strong><br>
|
||||
@@ -3139,8 +3337,9 @@
|
||||
{$email->language->addToStack("email_shipping_to", FALSE)}:
|
||||
{$data['cm_first_name']} {$data['cm_last_name']}
|
||||
{$shipment->address()->toString("\n")|raw}
|
||||
|
||||
{$email->language->addToStack("email_shipping_method", FALSE)}: {$shipment->method->getTitleForLanguage( $email->language )}
|
||||
{{if $shipment->method}}
|
||||
{$email->language->addToStack("email_shipping_method", FALSE)}: {$email->language->addToStack( $shipment->method->_titleLanguageKey, FALSE )}
|
||||
{{endif}}
|
||||
{{if $shipment->tracknumber}}
|
||||
{$email->language->addToStack("email_tracking_number", FALSE)}: {$shipment->tracknumber}
|
||||
{{endif}}
|
||||
|
||||
@@ -1,148 +1,154 @@
|
||||
{
|
||||
"core": {
|
||||
"IncomingEmail": {
|
||||
"Support": "IPS\\nexus\\extensions\\core\\IncomingEmail\\Support"
|
||||
},
|
||||
"AdminNotifications": {
|
||||
"Shipment": "IPS\\nexus\\extensions\\core\\AdminNotifications\\Shipment",
|
||||
"Transaction": "IPS\\nexus\\extensions\\core\\AdminNotifications\\Transaction",
|
||||
"Support": "IPS\\nexus\\extensions\\core\\AdminNotifications\\Support",
|
||||
"Advertisement": "IPS\\nexus\\extensions\\core\\AdminNotifications\\Advertisement",
|
||||
"Withdrawal": "IPS\\nexus\\extensions\\core\\AdminNotifications\\Withdrawal",
|
||||
"ConfigurationError": "IPS\\nexus\\extensions\\core\\AdminNotifications\\ConfigurationError",
|
||||
"HostingError": "IPS\\nexus\\extensions\\core\\AdminNotifications\\HostingError"
|
||||
},
|
||||
"ContentRouter": {
|
||||
"Reviews": "IPS\\nexus\\extensions\\core\\ContentRouter\\Reviews"
|
||||
},
|
||||
"MemberACPProfileBlocks": {
|
||||
"Support": "IPS\\nexus\\extensions\\core\\MemberACPProfileBlocks\\Support",
|
||||
"AccountInformation": "IPS\\nexus\\extensions\\core\\MemberACPProfileBlocks\\AccountInformation",
|
||||
"Notes": "IPS\\nexus\\extensions\\core\\MemberACPProfileBlocks\\Notes",
|
||||
"Statistics": "IPS\\nexus\\extensions\\core\\MemberACPProfileBlocks\\Statistics",
|
||||
"Invoices": "IPS\\nexus\\extensions\\core\\MemberACPProfileBlocks\\Invoices",
|
||||
"Purchases": "IPS\\nexus\\extensions\\core\\MemberACPProfileBlocks\\Purchases",
|
||||
"ParentAccounts": "IPS\\nexus\\extensions\\core\\MemberACPProfileBlocks\\ParentAccounts"
|
||||
},
|
||||
"MemberExportPersonalInformation": {
|
||||
"Customer": "IPS\\nexus\\extensions\\core\\MemberExportPersonalInformation\\Customer"
|
||||
},
|
||||
"AchievementAction": {
|
||||
"Package": "IPS\\nexus\\extensions\\core\\AchievementAction\\Package",
|
||||
"Subscription": "IPS\\nexus\\extensions\\core\\AchievementAction\\Subscription"
|
||||
},
|
||||
"LiveSearch": {
|
||||
"Nexus": "IPS\\nexus\\extensions\\core\\LiveSearch\\Nexus"
|
||||
"AdminNotifications": {
|
||||
"Advertisement": "IPS\\nexus\\extensions\\core\\AdminNotifications\\Advertisement",
|
||||
"ConfigurationError": "IPS\\nexus\\extensions\\core\\AdminNotifications\\ConfigurationError",
|
||||
"HostingError": "IPS\\nexus\\extensions\\core\\AdminNotifications\\HostingError",
|
||||
"Shipment": "IPS\\nexus\\extensions\\core\\AdminNotifications\\Shipment",
|
||||
"Support": "IPS\\nexus\\extensions\\core\\AdminNotifications\\Support",
|
||||
"Transaction": "IPS\\nexus\\extensions\\core\\AdminNotifications\\Transaction",
|
||||
"Withdrawal": "IPS\\nexus\\extensions\\core\\AdminNotifications\\Withdrawal"
|
||||
},
|
||||
"FileStorage": {
|
||||
"Ads": "IPS\\nexus\\extensions\\core\\FileStorage\\Ads",
|
||||
"Support": "IPS\\nexus\\extensions\\core\\FileStorage\\Support",
|
||||
"PurchaseFields": "IPS\\nexus\\extensions\\core\\FileStorage\\PurchaseFields",
|
||||
"Customer": "IPS\\nexus\\extensions\\core\\FileStorage\\Customer",
|
||||
"PackageGroups": "IPS\\nexus\\extensions\\core\\FileStorage\\PackageGroups",
|
||||
"Products": "IPS\\nexus\\extensions\\core\\FileStorage\\Products"
|
||||
},
|
||||
"MFAArea": {
|
||||
"Alternatives": "IPS\\nexus\\extensions\\core\\MFAArea\\Alternatives",
|
||||
"AccountCredit": "IPS\\nexus\\extensions\\core\\MFAArea\\AccountCredit",
|
||||
"BillingAgreements": "IPS\\nexus\\extensions\\core\\MFAArea\\BillingAgreements",
|
||||
"Cards": "IPS\\nexus\\extensions\\core\\MFAArea\\Cards",
|
||||
"BillingInfo": "IPS\\nexus\\extensions\\core\\MFAArea\\BillingInfo",
|
||||
"Addresses": "IPS\\nexus\\extensions\\core\\MFAArea\\Addresses"
|
||||
},
|
||||
"EditorLocations": {
|
||||
"Support": "IPS\\nexus\\extensions\\core\\EditorLocations\\Support",
|
||||
"Store": "IPS\\nexus\\extensions\\core\\EditorLocations\\Store",
|
||||
"Customer": "IPS\\nexus\\extensions\\core\\EditorLocations\\Customer",
|
||||
"Purchases": "IPS\\nexus\\extensions\\core\\EditorLocations\\Purchases",
|
||||
"Admin": "IPS\\nexus\\extensions\\core\\EditorLocations\\Admin"
|
||||
},
|
||||
"MemberHistory": {
|
||||
"Nexus": "IPS\\nexus\\extensions\\core\\MemberHistory\\Nexus"
|
||||
},
|
||||
"Dashboard": {
|
||||
"PendingActions": "IPS\\nexus\\extensions\\core\\Dashboard\\PendingActions",
|
||||
"Income": "IPS\\nexus\\extensions\\core\\Dashboard\\Income"
|
||||
},
|
||||
"Uninstall": {
|
||||
"DisablePOP": "IPS\\nexus\\extensions\\core\\Uninstall\\DisablePOP"
|
||||
},
|
||||
"MemberACPProfileTabs": {
|
||||
"Main": "IPS\\nexus\\extensions\\core\\MemberACPProfileTabs\\Main"
|
||||
},
|
||||
"ProfileSteps": {
|
||||
"CustomerFields": "IPS\\nexus\\extensions\\core\\ProfileSteps\\CustomerFields"
|
||||
"CommunityEnhancements": {
|
||||
"EasyPost": "IPS\\nexus\\extensions\\core\\CommunityEnhancements\\EasyPost",
|
||||
"Enom": "IPS\\nexus\\extensions\\core\\CommunityEnhancements\\Enom",
|
||||
"MaxMind": "IPS\\nexus\\extensions\\core\\CommunityEnhancements\\MaxMind"
|
||||
},
|
||||
"ContactUs": {
|
||||
"SupportRequest": "IPS\\nexus\\extensions\\core\\ContactUs\\SupportRequest"
|
||||
},
|
||||
"CommunityEnhancements": {
|
||||
"MaxMind": "IPS\\nexus\\extensions\\core\\CommunityEnhancements\\MaxMind",
|
||||
"Enom": "IPS\\nexus\\extensions\\core\\CommunityEnhancements\\Enom",
|
||||
"EasyPost": "IPS\\nexus\\extensions\\core\\CommunityEnhancements\\EasyPost"
|
||||
"ContentRouter": {
|
||||
"Reviews": "IPS\\nexus\\extensions\\core\\ContentRouter\\Reviews"
|
||||
},
|
||||
"Queue": {
|
||||
"FixMissingAddresses": "IPS\\nexus\\extensions\\core\\Queue\\FixMissingAddresses",
|
||||
"RecountTotalSpend": "IPS\\nexus\\extensions\\core\\Queue\\RecountTotalSpend",
|
||||
"FixRefundTransactions": "IPS\\nexus\\extensions\\core\\Queue\\FixRefundTransactions",
|
||||
"MassChangePurchases": "IPS\\nexus\\extensions\\core\\Queue\\MassChangePurchases",
|
||||
"MoveCustomerHistory": "IPS\\nexus\\extensions\\core\\Queue\\MoveCustomerHistory",
|
||||
"DeletePaymentMethod": "IPS\\nexus\\extensions\\core\\Queue\\DeletePaymentMethod"
|
||||
"Dashboard": {
|
||||
"Income": "IPS\\nexus\\extensions\\core\\Dashboard\\Income",
|
||||
"PendingActions": "IPS\\nexus\\extensions\\core\\Dashboard\\PendingActions"
|
||||
},
|
||||
"MemberFilter": {
|
||||
"Subscriptions": "IPS\\nexus\\extensions\\core\\MemberFilter\\Subscriptions",
|
||||
"TotalSpend": "IPS\\nexus\\extensions\\core\\MemberFilter\\TotalSpend",
|
||||
"Purchases": "IPS\\nexus\\extensions\\core\\MemberFilter\\Purchases"
|
||||
"EditorLocations": {
|
||||
"Admin": "IPS\\nexus\\extensions\\core\\EditorLocations\\Admin",
|
||||
"Customer": "IPS\\nexus\\extensions\\core\\EditorLocations\\Customer",
|
||||
"Purchases": "IPS\\nexus\\extensions\\core\\EditorLocations\\Purchases",
|
||||
"Store": "IPS\\nexus\\extensions\\core\\EditorLocations\\Store",
|
||||
"Support": "IPS\\nexus\\extensions\\core\\EditorLocations\\Support"
|
||||
},
|
||||
"OverviewStatistics": {
|
||||
"Subscriptions": "IPS\\nexus\\extensions\\core\\OverviewStatistics\\Subscriptions",
|
||||
"Products": "IPS\\nexus\\extensions\\core\\OverviewStatistics\\Products"
|
||||
"FileStorage": {
|
||||
"Ads": "IPS\\nexus\\extensions\\core\\FileStorage\\Ads",
|
||||
"Customer": "IPS\\nexus\\extensions\\core\\FileStorage\\Customer",
|
||||
"Gateways": "IPS\\nexus\\extensions\\core\\FileStorage\\Gateways",
|
||||
"PackageGroups": "IPS\\nexus\\extensions\\core\\FileStorage\\PackageGroups",
|
||||
"Products": "IPS\\nexus\\extensions\\core\\FileStorage\\Products",
|
||||
"PurchaseFields": "IPS\\nexus\\extensions\\core\\FileStorage\\PurchaseFields",
|
||||
"Support": "IPS\\nexus\\extensions\\core\\FileStorage\\Support"
|
||||
},
|
||||
"FrontNavigation": {
|
||||
"Addresses": "IPS\\nexus\\extensions\\core\\FrontNavigation\\Addresses",
|
||||
"Alternatives": "IPS\\nexus\\extensions\\core\\FrontNavigation\\Alternatives",
|
||||
"BillingAgreements": "IPS\\nexus\\extensions\\core\\FrontNavigation\\BillingAgreements",
|
||||
"Cards": "IPS\\nexus\\extensions\\core\\FrontNavigation\\Cards",
|
||||
"Credit": "IPS\\nexus\\extensions\\core\\FrontNavigation\\Credit",
|
||||
"Donations": "IPS\\nexus\\extensions\\core\\FrontNavigation\\Donations",
|
||||
"Gifts": "IPS\\nexus\\extensions\\core\\FrontNavigation\\Gifts",
|
||||
"Info": "IPS\\nexus\\extensions\\core\\FrontNavigation\\Info",
|
||||
"NetworkStatus": "IPS\\nexus\\extensions\\core\\FrontNavigation\\NetworkStatus",
|
||||
"Orders": "IPS\\nexus\\extensions\\core\\FrontNavigation\\Orders",
|
||||
"Purchases": "IPS\\nexus\\extensions\\core\\FrontNavigation\\Purchases",
|
||||
"Store": "IPS\\nexus\\extensions\\core\\FrontNavigation\\Store",
|
||||
"Subscriptions": "IPS\\nexus\\extensions\\core\\FrontNavigation\\Subscriptions",
|
||||
"Support": "IPS\\nexus\\extensions\\core\\FrontNavigation\\Support"
|
||||
},
|
||||
"GroupForm": {
|
||||
"PreventDeletion": "IPS\\nexus\\extensions\\core\\GroupForm\\PreventDeletion"
|
||||
},
|
||||
"IncomingEmail": {
|
||||
"Support": "IPS\\nexus\\extensions\\core\\IncomingEmail\\Support"
|
||||
},
|
||||
"IpAddresses": {
|
||||
"Payouts": "IPS\\nexus\\extensions\\core\\IpAddresses\\Payouts",
|
||||
"Support": "IPS\\nexus\\extensions\\core\\IpAddresses\\Support",
|
||||
"Transactions": "IPS\\nexus\\extensions\\core\\IpAddresses\\Transactions"
|
||||
},
|
||||
"FrontNavigation": {
|
||||
"Info": "IPS\\nexus\\extensions\\core\\FrontNavigation\\Info",
|
||||
"Alternatives": "IPS\\nexus\\extensions\\core\\FrontNavigation\\Alternatives",
|
||||
"Subscriptions": "IPS\\nexus\\extensions\\core\\FrontNavigation\\Subscriptions",
|
||||
"Support": "IPS\\nexus\\extensions\\core\\FrontNavigation\\Support",
|
||||
"BillingAgreements": "IPS\\nexus\\extensions\\core\\FrontNavigation\\BillingAgreements",
|
||||
"Gifts": "IPS\\nexus\\extensions\\core\\FrontNavigation\\Gifts",
|
||||
"Store": "IPS\\nexus\\extensions\\core\\FrontNavigation\\Store",
|
||||
"Cards": "IPS\\nexus\\extensions\\core\\FrontNavigation\\Cards",
|
||||
"Credit": "IPS\\nexus\\extensions\\core\\FrontNavigation\\Credit",
|
||||
"NetworkStatus": "IPS\\nexus\\extensions\\core\\FrontNavigation\\NetworkStatus",
|
||||
"Purchases": "IPS\\nexus\\extensions\\core\\FrontNavigation\\Purchases",
|
||||
"Addresses": "IPS\\nexus\\extensions\\core\\FrontNavigation\\Addresses",
|
||||
"Donations": "IPS\\nexus\\extensions\\core\\FrontNavigation\\Donations",
|
||||
"Orders": "IPS\\nexus\\extensions\\core\\FrontNavigation\\Orders"
|
||||
"LiveSearch": {
|
||||
"Nexus": "IPS\\nexus\\extensions\\core\\LiveSearch\\Nexus"
|
||||
},
|
||||
"OutputPlugins": {
|
||||
"Weight": "IPS\\nexus\\extensions\\core\\OutputPlugins\\Weight",
|
||||
"Money": "IPS\\nexus\\extensions\\core\\OutputPlugins\\Money",
|
||||
"Length": "IPS\\nexus\\extensions\\core\\OutputPlugins\\Length"
|
||||
"MemberACPProfileBlocks": {
|
||||
"AccountInformation": "IPS\\nexus\\extensions\\core\\MemberACPProfileBlocks\\AccountInformation",
|
||||
"Invoices": "IPS\\nexus\\extensions\\core\\MemberACPProfileBlocks\\Invoices",
|
||||
"Notes": "IPS\\nexus\\extensions\\core\\MemberACPProfileBlocks\\Notes",
|
||||
"ParentAccounts": "IPS\\nexus\\extensions\\core\\MemberACPProfileBlocks\\ParentAccounts",
|
||||
"Purchases": "IPS\\nexus\\extensions\\core\\MemberACPProfileBlocks\\Purchases",
|
||||
"Statistics": "IPS\\nexus\\extensions\\core\\MemberACPProfileBlocks\\Statistics",
|
||||
"Support": "IPS\\nexus\\extensions\\core\\MemberACPProfileBlocks\\Support"
|
||||
},
|
||||
"MemberACPProfileTabs": {
|
||||
"Main": "IPS\\nexus\\extensions\\core\\MemberACPProfileTabs\\Main"
|
||||
},
|
||||
"MemberExportPersonalInformation": {
|
||||
"Customer": "IPS\\nexus\\extensions\\core\\MemberExportPersonalInformation\\Customer"
|
||||
},
|
||||
"MemberFilter": {
|
||||
"Purchases": "IPS\\nexus\\extensions\\core\\MemberFilter\\Purchases",
|
||||
"Subscriptions": "IPS\\nexus\\extensions\\core\\MemberFilter\\Subscriptions",
|
||||
"TotalSpend": "IPS\\nexus\\extensions\\core\\MemberFilter\\TotalSpend"
|
||||
},
|
||||
"MemberHistory": {
|
||||
"Nexus": "IPS\\nexus\\extensions\\core\\MemberHistory\\Nexus"
|
||||
},
|
||||
"MemberSync": {
|
||||
"Nexus": "IPS\\nexus\\extensions\\core\\MemberSync\\Nexus"
|
||||
},
|
||||
"MFAArea": {
|
||||
"AccountCredit": "IPS\\nexus\\extensions\\core\\MFAArea\\AccountCredit",
|
||||
"Addresses": "IPS\\nexus\\extensions\\core\\MFAArea\\Addresses",
|
||||
"Alternatives": "IPS\\nexus\\extensions\\core\\MFAArea\\Alternatives",
|
||||
"BillingAgreements": "IPS\\nexus\\extensions\\core\\MFAArea\\BillingAgreements",
|
||||
"BillingInfo": "IPS\\nexus\\extensions\\core\\MFAArea\\BillingInfo",
|
||||
"Cards": "IPS\\nexus\\extensions\\core\\MFAArea\\Cards"
|
||||
},
|
||||
"OutputPlugins": {
|
||||
"Length": "IPS\\nexus\\extensions\\core\\OutputPlugins\\Length",
|
||||
"Money": "IPS\\nexus\\extensions\\core\\OutputPlugins\\Money",
|
||||
"Weight": "IPS\\nexus\\extensions\\core\\OutputPlugins\\Weight"
|
||||
},
|
||||
"OverviewStatistics": {
|
||||
"Products": "IPS\\nexus\\extensions\\core\\OverviewStatistics\\Products",
|
||||
"Subscriptions": "IPS\\nexus\\extensions\\core\\OverviewStatistics\\Subscriptions"
|
||||
},
|
||||
"ProfileSteps": {
|
||||
"CustomerFields": "IPS\\nexus\\extensions\\core\\ProfileSteps\\CustomerFields"
|
||||
},
|
||||
"Queue": {
|
||||
"DeletePaymentMethod": "IPS\\nexus\\extensions\\core\\Queue\\DeletePaymentMethod",
|
||||
"FixMissingAddresses": "IPS\\nexus\\extensions\\core\\Queue\\FixMissingAddresses",
|
||||
"FixMissingSubscriptionPurchases": "IPS\\nexus\\extensions\\core\\Queue\\FixMissingSubscriptionPurchases",
|
||||
"FixRefundTransactions": "IPS\\nexus\\extensions\\core\\Queue\\FixRefundTransactions",
|
||||
"MassChangePurchases": "IPS\\nexus\\extensions\\core\\Queue\\MassChangePurchases",
|
||||
"MoveCustomerHistory": "IPS\\nexus\\extensions\\core\\Queue\\MoveCustomerHistory",
|
||||
"RecountTotalSpend": "IPS\\nexus\\extensions\\core\\Queue\\RecountTotalSpend"
|
||||
},
|
||||
"Uninstall": {
|
||||
"DisablePOP": "IPS\\nexus\\extensions\\core\\Uninstall\\DisablePOP"
|
||||
}
|
||||
},
|
||||
"nexus": {
|
||||
"Item": {
|
||||
"Domain": "IPS\\nexus\\extensions\\nexus\\Item\\Domain",
|
||||
"Subscription": "IPS\\nexus\\extensions\\nexus\\Item\\Subscription",
|
||||
"ShippingCharge": "IPS\\nexus\\extensions\\nexus\\Item\\ShippingCharge",
|
||||
"Package": "IPS\\nexus\\extensions\\nexus\\Item\\Package",
|
||||
"AccountCreditIncrease": "IPS\\nexus\\extensions\\nexus\\Item\\AccountCreditIncrease",
|
||||
"Bandwidth": "IPS\\nexus\\extensions\\nexus\\Item\\Bandwidth",
|
||||
"DedicatedServer": "IPS\\nexus\\extensions\\nexus\\Item\\DedicatedServer",
|
||||
"GiftVoucher": "IPS\\nexus\\extensions\\nexus\\Item\\GiftVoucher",
|
||||
"SubscriptionUpgrade": "IPS\\nexus\\extensions\\nexus\\Item\\SubscriptionUpgrade",
|
||||
"SupportCharge": "IPS\\nexus\\extensions\\nexus\\Item\\SupportCharge",
|
||||
"CouponDiscount": "IPS\\nexus\\extensions\\nexus\\Item\\CouponDiscount",
|
||||
"CustomPackage": "IPS\\nexus\\extensions\\nexus\\Item\\CustomPackage",
|
||||
"AccountCreditIncrease": "IPS\\nexus\\extensions\\nexus\\Item\\AccountCreditIncrease",
|
||||
"MiscellaneousCharge": "IPS\\nexus\\extensions\\nexus\\Item\\MiscellaneousCharge",
|
||||
"DedicatedServer": "IPS\\nexus\\extensions\\nexus\\Item\\DedicatedServer",
|
||||
"Domain": "IPS\\nexus\\extensions\\nexus\\Item\\Domain",
|
||||
"Donation": "IPS\\nexus\\extensions\\nexus\\Item\\Donation",
|
||||
"GiftVoucher": "IPS\\nexus\\extensions\\nexus\\Item\\GiftVoucher",
|
||||
"MiscellaneousCharge": "IPS\\nexus\\extensions\\nexus\\Item\\MiscellaneousCharge",
|
||||
"Package": "IPS\\nexus\\extensions\\nexus\\Item\\Package",
|
||||
"ShippingCharge": "IPS\\nexus\\extensions\\nexus\\Item\\ShippingCharge",
|
||||
"Subscription": "IPS\\nexus\\extensions\\nexus\\Item\\Subscription",
|
||||
"SubscriptionUpgrade": "IPS\\nexus\\extensions\\nexus\\Item\\SubscriptionUpgrade",
|
||||
"SupportCharge": "IPS\\nexus\\extensions\\nexus\\Item\\SupportCharge",
|
||||
"UpgradeCharge": "IPS\\nexus\\extensions\\nexus\\Item\\UpgradeCharge"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -153,6 +153,10 @@
|
||||
"nexus_subscriptions": {
|
||||
"friendly": "subscriptions",
|
||||
"real": "app=nexus&module=subscriptions&controller=subscriptions"
|
||||
}
|
||||
},
|
||||
"apple_verification": {
|
||||
"friendly": ".well-known/apple-developer-merchantid-domain-association",
|
||||
"real": "app=nexus&module=checkout&controller=checkout&do=appleVerification"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -18,9 +18,5 @@
|
||||
"Database": {
|
||||
"type": "C",
|
||||
"class": "\\IPS\\Data\\Store\\Database"
|
||||
},
|
||||
"frontDispatcher": {
|
||||
"type": "C",
|
||||
"class": "\\IPS\\Dispatcher\\Front"
|
||||
}
|
||||
}
|
||||
@@ -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.billingForm.js" javascript_type="controller" javascript_version="106107" javascript_position="1000100"><![CDATA[/**
|
||||
<file javascript_app="nexus" javascript_location="front" javascript_path="controllers/checkout" javascript_name="ips.checkout.billingForm.js" javascript_type="controller" javascript_version="107014" javascript_position="1000100"><![CDATA[/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -53,7 +53,7 @@
|
||||
|
||||
});
|
||||
}(jQuery, _));]]></file>
|
||||
<file javascript_app="nexus" javascript_location="front" javascript_path="controllers/checkout" javascript_name="ips.checkout.register.js" javascript_type="controller" javascript_version="106107" 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="107014" javascript_position="1000100">/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -84,7 +84,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="106107" javascript_position="1000100">/**
|
||||
<file javascript_app="nexus" javascript_location="front" javascript_path="controllers/checkout" javascript_name="ips.checkout.review.js" javascript_type="controller" javascript_version="107014" javascript_position="1000100">/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -121,7 +121,7 @@
|
||||
}
|
||||
});
|
||||
}(jQuery, _));</file>
|
||||
<file javascript_app="nexus" javascript_location="front" javascript_path="controllers/checkout" javascript_name="ips.checkout.shippingForm.js" javascript_type="controller" javascript_version="106107" javascript_position="1000100">/**
|
||||
<file javascript_app="nexus" javascript_location="front" javascript_path="controllers/checkout" javascript_name="ips.checkout.shippingForm.js" javascript_type="controller" javascript_version="107014" javascript_position="1000100">/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -144,7 +144,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="106107" 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="107014" javascript_position="1000150"><![CDATA[/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -172,7 +172,7 @@
|
||||
* @returns {void}
|
||||
*/
|
||||
changeRelevantField: function () {
|
||||
if ( this.scope.find('[data-role="addressTypeRadio"][value="business"]').is(':checked') && ['AT','BE','BG','HR','CY','CZ','DK','EE','FI','FR','DE','GR','HU','IE','IT','LV','LT','LU','MT','NL','PL','PT','RO','SK','SI','ES','SE','GB'].indexOf( this.scope.find('[data-role="countrySelect"]').val() ) !== -1 ) {
|
||||
if ( this.scope.find('[data-role="addressTypeRadio"][value="business"]').is(':checked') && ['AT','BE','BG','HR','CY','CZ','DK','EE','FI','FR','DE','GR','HU','IE','IT','LV','LT','LU','MT','NL','PL','PT','RO','SK','SI','ES','SE','GB','GP','MQ','RE','BL','GF','MF','NC','PF','PM','TF','YT','WF'].indexOf( this.scope.find('[data-role="countrySelect"]').val() ) !== -1 ) {
|
||||
this.scope.find('[data-role="vatField"]').show();
|
||||
} else {
|
||||
this.scope.find('[data-role="vatField"]').hide();
|
||||
@@ -181,7 +181,7 @@
|
||||
|
||||
});
|
||||
}(jQuery, _));]]></file>
|
||||
<file javascript_app="nexus" javascript_location="global" javascript_path="controllers/gateways" javascript_name="ips.gateways.authorizenet.js" javascript_type="controller" javascript_version="106107" javascript_position="1000200"><![CDATA[/**
|
||||
<file javascript_app="nexus" javascript_location="global" javascript_path="controllers/gateways" javascript_name="ips.gateways.authorizenet.js" javascript_type="controller" javascript_version="107014" javascript_position="1000200"><![CDATA[/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -241,7 +241,7 @@
|
||||
|
||||
});
|
||||
}(jQuery, _));]]></file>
|
||||
<file javascript_app="nexus" javascript_location="global" javascript_path="controllers/gateways" javascript_name="ips.gateways.braintree.js" javascript_type="controller" javascript_version="106107" javascript_position="1000200"><![CDATA[/**
|
||||
<file javascript_app="nexus" javascript_location="global" javascript_path="controllers/gateways" javascript_name="ips.gateways.braintree.js" javascript_type="controller" javascript_version="107014" javascript_position="1000200"><![CDATA[/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -1147,7 +1147,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="106107" 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="107014" javascript_position="1000200"><![CDATA[/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -1168,9 +1168,17 @@
|
||||
*/
|
||||
initialize: function () {
|
||||
this.on( $(this.scope).closest('form')[0], 'submit', this.submitForm );
|
||||
ips.loader.get(['https://js.stripe.com/v3/']).then( function () {
|
||||
|
||||
if( "Stripe" in window )
|
||||
{
|
||||
this.setup();
|
||||
}.bind(this));
|
||||
}
|
||||
else
|
||||
{
|
||||
ips.loader.get(['https://js.stripe.com/v3/']).then( function () {
|
||||
this.setup();
|
||||
}.bind(this));
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -1480,49 +1488,7 @@
|
||||
|
||||
});
|
||||
}(jQuery, _));]]></file>
|
||||
<file javascript_app="nexus" javascript_location="global" javascript_path="controllers/gateways" javascript_name="ips.gateways.stripeamex.js" javascript_type="controller" javascript_version="106107" javascript_position="1000200">/**
|
||||
* IPS Community Suite 4
|
||||
* (c) 2017 Invision Power Services - http://www.invisionpower.com
|
||||
*
|
||||
* ips.gateways.stripeamex.js - Stripe Amex Express Checkout Controller
|
||||
*
|
||||
* Author: Mark Wade
|
||||
*/
|
||||
/* A global function breaks our coding standards, but it's the only way Amex will allow it */
|
||||
function aecCallbackHandler(response){
|
||||
jQuery( window ).trigger( 'aecCallbackHandler', response );
|
||||
};
|
||||
|
||||
;( function($, _, undefined){
|
||||
"use strict";
|
||||
|
||||
ips.controller.register('nexus.global.gateways.stripeamex', {
|
||||
|
||||
selected: false,
|
||||
|
||||
/**
|
||||
* Init
|
||||
*/
|
||||
initialize: function () {
|
||||
this.setup();
|
||||
},
|
||||
|
||||
/**
|
||||
* Init
|
||||
*/
|
||||
setup: function(){
|
||||
var self = this;
|
||||
ips.loader.get( ['https://icm.aexp-static.com/Internet/IMDC/US_en/RegisteredCard/AmexExpressCheckout/js/AmexExpressCheckout.js'] );
|
||||
|
||||
$( window ).on( 'aecCallbackHandler', function(e,response) {
|
||||
$(self.scope).find('input').val( response.token );
|
||||
$(self.scope).closest('form').submit();
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
}(jQuery, _));</file>
|
||||
<file javascript_app="nexus" javascript_location="global" javascript_path="controllers/gateways" javascript_name="ips.gateways.stripepaymentrequest.js" javascript_type="controller" javascript_version="106107" 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="107014" javascript_position="1000200">/**
|
||||
* IPS Community Suite 4
|
||||
* (c) 2017 Invision Power Services - http://www.invisionpower.com
|
||||
*
|
||||
@@ -1603,7 +1569,7 @@ function aecCallbackHandler(response){
|
||||
|
||||
});
|
||||
}(jQuery, _));</file>
|
||||
<file javascript_app="nexus" javascript_location="admin" javascript_path="controllers/hosting" javascript_name="ips.nexus.hosting.accountform.js" javascript_type="controller" javascript_version="106107" javascript_position="1000200">/**
|
||||
<file javascript_app="nexus" javascript_location="admin" javascript_path="controllers/hosting" javascript_name="ips.nexus.hosting.accountform.js" javascript_type="controller" javascript_version="107014" javascript_position="1000200">/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -1635,7 +1601,7 @@ function aecCallbackHandler(response){
|
||||
|
||||
});
|
||||
}(jQuery, _));</file>
|
||||
<file javascript_app="nexus" javascript_location="global" javascript_path="controllers/misc" javascript_name="ips.misc.print.js" javascript_type="controller" javascript_version="106107" 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="107014" javascript_position="1000100">/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -1657,7 +1623,7 @@ function aecCallbackHandler(response){
|
||||
|
||||
});
|
||||
}(jQuery, _));</file>
|
||||
<file javascript_app="nexus" javascript_location="admin" javascript_path="controllers/notifications" javascript_name="ips.notifications.pendingTransactions.js" javascript_type="controller" javascript_version="106107" javascript_position="1000250">/**
|
||||
<file javascript_app="nexus" javascript_location="admin" javascript_path="controllers/notifications" javascript_name="ips.notifications.pendingTransactions.js" javascript_type="controller" javascript_version="107014" javascript_position="1000250">/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -1737,7 +1703,7 @@ function aecCallbackHandler(response){
|
||||
|
||||
});
|
||||
}(jQuery, _));</file>
|
||||
<file javascript_app="nexus" javascript_location="admin" javascript_path="controllers/payments" javascript_name="ips.payments.braintreeSetup.js" javascript_type="controller" javascript_version="106107" javascript_position="1000100"><![CDATA[/**
|
||||
<file javascript_app="nexus" javascript_location="admin" javascript_path="controllers/payments" javascript_name="ips.payments.braintreeSetup.js" javascript_type="controller" javascript_version="107014" javascript_position="1000100"><![CDATA[/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -1839,7 +1805,7 @@ function aecCallbackHandler(response){
|
||||
|
||||
});
|
||||
}(jQuery, _));]]></file>
|
||||
<file javascript_app="nexus" javascript_location="admin" javascript_path="controllers/store" javascript_name="ips.store.productoptions.js" javascript_type="controller" javascript_version="106107" javascript_position="1000300"><![CDATA[/**
|
||||
<file javascript_app="nexus" javascript_location="admin" javascript_path="controllers/store" javascript_name="ips.store.productoptions.js" javascript_type="controller" javascript_version="107014" javascript_position="1000300"><![CDATA[/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -1894,7 +1860,7 @@ function aecCallbackHandler(response){
|
||||
|
||||
});
|
||||
}(jQuery, _));]]></file>
|
||||
<file javascript_app="nexus" javascript_location="admin" javascript_path="controllers/store" javascript_name="ips.store.productselector.js" javascript_type="controller" javascript_version="106107" javascript_position="1000300"><![CDATA[/**
|
||||
<file javascript_app="nexus" javascript_location="admin" javascript_path="controllers/store" javascript_name="ips.store.productselector.js" javascript_type="controller" javascript_version="107014" javascript_position="1000300"><![CDATA[/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -1954,7 +1920,7 @@ function aecCallbackHandler(response){
|
||||
|
||||
});
|
||||
}(jQuery, _));]]></file>
|
||||
<file javascript_app="nexus" javascript_location="front" javascript_path="controllers/store" javascript_name="ips.store.cartReview.js" javascript_type="controller" javascript_version="106107" javascript_position="1000250">/**
|
||||
<file javascript_app="nexus" javascript_location="front" javascript_path="controllers/store" javascript_name="ips.store.cartReview.js" javascript_type="controller" javascript_version="107014" javascript_position="1000250">/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -2054,7 +2020,7 @@ function aecCallbackHandler(response){
|
||||
}
|
||||
});
|
||||
}(jQuery, _));</file>
|
||||
<file javascript_app="nexus" javascript_location="front" javascript_path="controllers/store" javascript_name="ips.store.category.js" javascript_type="controller" javascript_version="106107" javascript_position="1000250"><![CDATA[/**
|
||||
<file javascript_app="nexus" javascript_location="front" javascript_path="controllers/store" javascript_name="ips.store.category.js" javascript_type="controller" javascript_version="107014" javascript_position="1000250"><![CDATA[/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -2168,7 +2134,7 @@ function aecCallbackHandler(response){
|
||||
}
|
||||
});
|
||||
}(jQuery, _));]]></file>
|
||||
<file javascript_app="nexus" javascript_location="front" javascript_path="controllers/store" javascript_name="ips.store.currencySelect.js" javascript_type="controller" javascript_version="106107" javascript_position="1000250">/**
|
||||
<file javascript_app="nexus" javascript_location="front" javascript_path="controllers/store" javascript_name="ips.store.currencySelect.js" javascript_type="controller" javascript_version="107014" javascript_position="1000250">/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -2211,7 +2177,7 @@ function aecCallbackHandler(response){
|
||||
}
|
||||
});
|
||||
}(jQuery, _));</file>
|
||||
<file javascript_app="nexus" javascript_location="front" javascript_path="controllers/store" javascript_name="ips.store.giftCard.js" javascript_type="controller" javascript_version="106107" javascript_position="1000250"><![CDATA[/**
|
||||
<file javascript_app="nexus" javascript_location="front" javascript_path="controllers/store" javascript_name="ips.store.giftCard.js" javascript_type="controller" javascript_version="107014" javascript_position="1000250"><![CDATA[/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -2299,7 +2265,7 @@ function aecCallbackHandler(response){
|
||||
}
|
||||
});
|
||||
}(jQuery, _));]]></file>
|
||||
<file javascript_app="nexus" javascript_location="front" javascript_path="controllers/store" javascript_name="ips.store.packagePage.js" javascript_type="controller" javascript_version="106107" javascript_position="1000250"><![CDATA[/**
|
||||
<file javascript_app="nexus" javascript_location="front" javascript_path="controllers/store" javascript_name="ips.store.packagePage.js" javascript_type="controller" javascript_version="107014" javascript_position="1000250"><![CDATA[/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -2551,11 +2517,10 @@ function aecCallbackHandler(response){
|
||||
type: 'post'
|
||||
})
|
||||
.done( function (response) {
|
||||
|
||||
self.scope.find('[data-role="price"]').html( response.price );
|
||||
self.scope.find('[data-role="stock"]').html( response.stock );
|
||||
self.scope.find('[data-role="renewalTerm"]').html( response.renewal );
|
||||
|
||||
self.scope.find('[data-role="initialTerm"]').html( response.initialTerm );
|
||||
if( response.okay ){
|
||||
self.scope.find('button').removeAttr('disabled').text( ips.getString('add_to_cart_js') );
|
||||
} else {
|
||||
@@ -2569,7 +2534,7 @@ function aecCallbackHandler(response){
|
||||
|
||||
});
|
||||
}(jQuery, _));]]></file>
|
||||
<file javascript_app="nexus" javascript_location="front" javascript_path="controllers/store" javascript_name="ips.store.register.js" javascript_type="controller" javascript_version="106107" javascript_position="1000250"><![CDATA[/**
|
||||
<file javascript_app="nexus" javascript_location="front" javascript_path="controllers/store" javascript_name="ips.store.register.js" javascript_type="controller" javascript_version="107014" javascript_position="1000250"><![CDATA[/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -2718,7 +2683,7 @@ function aecCallbackHandler(response){
|
||||
},
|
||||
});
|
||||
}(jQuery, _));]]></file>
|
||||
<file javascript_app="nexus" javascript_location="front" javascript_path="controllers/subscriptions" javascript_name="ips.subscriptions.main.js" javascript_type="controller" javascript_version="106107" 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="107014" javascript_position="1000150">/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -2756,7 +2721,7 @@ function aecCallbackHandler(response){
|
||||
}
|
||||
});
|
||||
}(jQuery, _));</file>
|
||||
<file javascript_app="nexus" javascript_location="admin" javascript_path="controllers/support" javascript_name="ips.support.emailsetup.js" javascript_type="controller" javascript_version="106107" javascript_position="1000150">/**
|
||||
<file javascript_app="nexus" javascript_location="admin" javascript_path="controllers/support" javascript_name="ips.support.emailsetup.js" javascript_type="controller" javascript_version="107014" javascript_position="1000150">/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -2792,7 +2757,7 @@ function aecCallbackHandler(response){
|
||||
|
||||
});
|
||||
}(jQuery, _));</file>
|
||||
<file javascript_app="nexus" javascript_location="admin" javascript_path="controllers/support" javascript_name="ips.support.filterCheckboxSet.js" javascript_type="controller" javascript_version="106107" javascript_position="1000150">/**
|
||||
<file javascript_app="nexus" javascript_location="admin" javascript_path="controllers/support" javascript_name="ips.support.filterCheckboxSet.js" javascript_type="controller" javascript_version="107014" javascript_position="1000150">/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -2845,7 +2810,7 @@ function aecCallbackHandler(response){
|
||||
|
||||
});
|
||||
}(jQuery, _));</file>
|
||||
<file javascript_app="nexus" javascript_location="admin" javascript_path="controllers/support" javascript_name="ips.support.list.js" javascript_type="controller" javascript_version="106107" javascript_position="1000150"><![CDATA[/**
|
||||
<file javascript_app="nexus" javascript_location="admin" javascript_path="controllers/support" javascript_name="ips.support.list.js" javascript_type="controller" javascript_version="107014" javascript_position="1000150"><![CDATA[/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -3054,7 +3019,7 @@ function aecCallbackHandler(response){
|
||||
|
||||
});
|
||||
}(jQuery, _));]]></file>
|
||||
<file javascript_app="nexus" javascript_location="admin" javascript_path="controllers/support" javascript_name="ips.support.message.js" javascript_type="controller" javascript_version="106107" javascript_position="1000150"><![CDATA[/**
|
||||
<file javascript_app="nexus" javascript_location="admin" javascript_path="controllers/support" javascript_name="ips.support.message.js" javascript_type="controller" javascript_version="107014" javascript_position="1000150"><![CDATA[/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -3110,7 +3075,7 @@ function aecCallbackHandler(response){
|
||||
}
|
||||
});
|
||||
}(jQuery, _));]]></file>
|
||||
<file javascript_app="nexus" javascript_location="admin" javascript_path="controllers/support" javascript_name="ips.support.metamenu.js" javascript_type="controller" javascript_version="106107" javascript_position="1000150"><![CDATA[/**
|
||||
<file javascript_app="nexus" javascript_location="admin" javascript_path="controllers/support" javascript_name="ips.support.metamenu.js" javascript_type="controller" javascript_version="107014" javascript_position="1000150"><![CDATA[/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -3284,7 +3249,7 @@ function aecCallbackHandler(response){
|
||||
|
||||
});
|
||||
}(jQuery, _));]]></file>
|
||||
<file javascript_app="nexus" javascript_location="admin" javascript_path="controllers/support" javascript_name="ips.support.multimod.js" javascript_type="controller" javascript_version="106107" javascript_position="1000150"><![CDATA[/**
|
||||
<file javascript_app="nexus" javascript_location="admin" javascript_path="controllers/support" javascript_name="ips.support.multimod.js" javascript_type="controller" javascript_version="107014" javascript_position="1000150"><![CDATA[/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -3384,7 +3349,7 @@ function aecCallbackHandler(response){
|
||||
}
|
||||
});
|
||||
}(jQuery, _));]]></file>
|
||||
<file javascript_app="nexus" javascript_location="admin" javascript_path="controllers/support" javascript_name="ips.support.packageInfo.js" javascript_type="controller" javascript_version="106107" javascript_position="1000150">/**
|
||||
<file javascript_app="nexus" javascript_location="admin" javascript_path="controllers/support" javascript_name="ips.support.packageInfo.js" javascript_type="controller" javascript_version="107014" javascript_position="1000150">/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -3433,7 +3398,7 @@ function aecCallbackHandler(response){
|
||||
}
|
||||
});
|
||||
}(jQuery, _));</file>
|
||||
<file javascript_app="nexus" javascript_location="admin" javascript_path="controllers/support" javascript_name="ips.support.pendingalert.js" javascript_type="controller" javascript_version="106107" javascript_position="1000150">/**
|
||||
<file javascript_app="nexus" javascript_location="admin" javascript_path="controllers/support" javascript_name="ips.support.pendingalert.js" javascript_type="controller" javascript_version="107014" javascript_position="1000150">/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -3460,7 +3425,7 @@ function aecCallbackHandler(response){
|
||||
|
||||
});
|
||||
}(jQuery, _));</file>
|
||||
<file javascript_app="nexus" javascript_location="admin" javascript_path="controllers/support" javascript_name="ips.support.replyArea.js" javascript_type="controller" javascript_version="106107" javascript_position="1000150"><![CDATA[/**
|
||||
<file javascript_app="nexus" javascript_location="admin" javascript_path="controllers/support" javascript_name="ips.support.replyArea.js" javascript_type="controller" javascript_version="107014" javascript_position="1000150"><![CDATA[/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -3544,7 +3509,7 @@ function aecCallbackHandler(response){
|
||||
}
|
||||
});
|
||||
}(jQuery, _));]]></file>
|
||||
<file javascript_app="nexus" javascript_location="admin" javascript_path="controllers/support" javascript_name="ips.support.request.js" javascript_type="controller" javascript_version="106107" javascript_position="1000150">/**
|
||||
<file javascript_app="nexus" javascript_location="admin" javascript_path="controllers/support" javascript_name="ips.support.request.js" javascript_type="controller" javascript_version="107014" javascript_position="1000150">/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -3653,7 +3618,7 @@ function aecCallbackHandler(response){
|
||||
}
|
||||
});
|
||||
}(jQuery, _));</file>
|
||||
<file javascript_app="nexus" javascript_location="admin" javascript_path="controllers/support" javascript_name="ips.support.splitForm.js" javascript_type="controller" javascript_version="106107" javascript_position="1000150">/**
|
||||
<file javascript_app="nexus" javascript_location="admin" javascript_path="controllers/support" javascript_name="ips.support.splitForm.js" javascript_type="controller" javascript_version="107014" javascript_position="1000150">/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -3723,7 +3688,7 @@ function aecCallbackHandler(response){
|
||||
}
|
||||
});
|
||||
}(jQuery, _));</file>
|
||||
<file javascript_app="nexus" javascript_location="front" javascript_path="controllers/support" javascript_name="ips.support.rate.js" javascript_type="controller" javascript_version="106107" javascript_position="1000200">/**
|
||||
<file javascript_app="nexus" javascript_location="front" javascript_path="controllers/support" javascript_name="ips.support.rate.js" javascript_type="controller" javascript_version="107014" javascript_position="1000200">/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -3745,7 +3710,7 @@ function aecCallbackHandler(response){
|
||||
}
|
||||
});
|
||||
}(jQuery, _));</file>
|
||||
<file javascript_app="nexus" javascript_location="admin" javascript_path="templates" javascript_name="ips.templates.store.js" javascript_type="template" javascript_version="106107" 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="107014" javascript_position="1000050"><![CDATA[ips.templates.set('nexus.store.images', " \
|
||||
<div class='ipsUploader__row ipsUploader__row--image ipsAttach ipsContained {{#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 ipsType_center' data-role='preview'>\
|
||||
{{#thumb}}\
|
||||
@@ -3781,12 +3746,12 @@ function aecCallbackHandler(response){
|
||||
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="106107" 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="107014" javascript_position="1000050"><![CDATA[ips.templates.set('nexus.store.productImage', " \
|
||||
<a href='{{fullURL}}' data-fullURL='{{fullURL}}' class='cNexusProduct_primaryImage ipsContained' data-ipsLightbox data-ipsLightbox-group='product' data-ipsProductZoom>\
|
||||
<img src='{{thumbURL}}' class='ipsImage ipsImage_thumb'>\
|
||||
</a>\
|
||||
");]]></file>
|
||||
<file javascript_app="nexus" javascript_location="global" javascript_path="templates" javascript_name="ips.templates.gateways.js" javascript_type="template" javascript_version="106107" 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="107014" javascript_position="1000050"><![CDATA[ips.templates.set('nexus.gateway.vaultAccount', " \
|
||||
<li>\
|
||||
<span class='ipsCustomInput'>\
|
||||
<input type='radio' name='{{fieldName}}[stored]' value='{{value}}' id='{{fieldName}}_stored{{random}}' data-control='toggle' data-toggles='{{fieldName}}_existing'>\
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<language>
|
||||
<app key="nexus" version="106107">
|
||||
<app key="nexus" version="107014">
|
||||
<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>
|
||||
@@ -10,6 +10,7 @@
|
||||
<word key="currency" js="0">Currency</word>
|
||||
<word key="security" js="0">Security</word>
|
||||
<word key="renew_title" js="0">Renew: %s</word>
|
||||
<word key="renew_payment_no_ba" js="0">Orphaned Billing Agreement Payment: %s</word>
|
||||
<word key="renew_option" js="0">%s/%s</word>
|
||||
<word key="order" js="0">Order</word>
|
||||
<word key="cm" js="0">cm</word>
|
||||
@@ -84,6 +85,7 @@
|
||||
<word key="contact_nexus_no_departments" js="0">Send to Commerce department as a Support Request</word>
|
||||
<word key="contact_nexus_no_departments_desc" js="0"><![CDATA[You don't have any departments set up.<br />Set up a <a href='{internal.app=nexus&module=support&controller=settings&tab=departments&do=form}' target='_blank' rel='noopener'>new department</a>]]></word>
|
||||
<word key="contact_nexus_title" js="0">Support Request created via Contact Us Form</word>
|
||||
<word key="contact_nexus_title_with_name" js="0">Support Request from %s created via Contact Us Form</word>
|
||||
<word key="nexus_nodeletedept_contactus" js="0"><![CDATA[The department you attempted to delete is currently set as the department contact us submissions are sent to. You must adjust your <a href='{internal.app=core&module=settings&controller=contactus}'>Contact Us</a> configuration before you can delete this department.]]></word>
|
||||
<word key="gateway_deleted" js="0">Deleted Gateway</word>
|
||||
<word key="menu__nexus_stock_gateways" js="0">Payment Methods</word>
|
||||
@@ -131,10 +133,6 @@
|
||||
<word key="stripe_type_card_desc" js="0">Users enter their card details directly on the checkout screen.</word>
|
||||
<word key="stripe_type_native" js="0">Browser Features (Apple Pay / Google Pay)</word>
|
||||
<word key="stripe_type_native_desc" js="0"><![CDATA[Users with a supported device / browser can use the browser's native features for taking payments (for example, Apple Pay or Google Pay).<br>This option <a href='{external.https}' target='_blank' rel='noopener'>requires HTTPS</a>, and for Apple Pay, you also need to <a href='{external.stripe_applepay_register}' target='_blank' rel='noopener'>register your domain</a>.]]></word>
|
||||
<word key="stripe_type_amex" js="0">Amex Express Checkout</word>
|
||||
<word key="stripe_type_amex_desc" js="0"><![CDATA[Users will be redirected to the Amex Express Checkout website to complete checkout. <a href='{external.stripe_amex_express}' target='_blank' rel='noopener'>Learn more about Amex Express Checkout</a>]]></word>
|
||||
<word key="stripe_amex_client_id" js="0">Amex Express Checkout Client ID</word>
|
||||
<word key="stripe_amex_client_id_gen" js="0"><![CDATA[<a href='{external.amex_client_id}' target='_blank' rel='noopener'>Generate</a>]]></word>
|
||||
<word key="stripe_type_alipay" js="0">Alipay</word>
|
||||
<word key="stripe_type_alipay_desc" js="0"><![CDATA[A popular payment method in China. Users will be redirected to the Alipay website to complete checkout. <a href='{external.alipay}' target='_blank' rel='noopener'>Learn more about Alipay</a>]]></word>
|
||||
<word key="stripe_type_bancontact" js="0">Bancontact</word>
|
||||
@@ -169,10 +167,10 @@
|
||||
<word key="stripe_address_line1_check_unavailable" js="0">Street address check unavailable</word>
|
||||
<word key="stripe_address_line1_check_pass" js="0">Street address check passed</word>
|
||||
<word key="stripe_address_line1_check_fail" js="0">Street address check failed</word>
|
||||
<word key="stripe_address_zip_check_unchecked" js="0">Zip check not performed</word>
|
||||
<word key="stripe_address_zip_check_unavailable" js="0">Zip check unavailable</word>
|
||||
<word key="stripe_address_zip_check_pass" js="0">Zip check passed</word>
|
||||
<word key="stripe_address_zip_check_fail" js="0">Zip check failed</word>
|
||||
<word key="stripe_address_postal_code_check_unchecked" js="0">Zip check not performed</word>
|
||||
<word key="stripe_address_postal_code_check_unavailable" js="0">Zip check unavailable</word>
|
||||
<word key="stripe_address_postal_code_check_pass" js="0">Zip check passed</word>
|
||||
<word key="stripe_address_postal_code_check_fail" js="0">Zip check failed</word>
|
||||
<word key="stripe_3ds_pass" js="0">3DSecure authenticated</word>
|
||||
<word key="stripe_3ds_fail" js="0">3DSecure not authenticated</word>
|
||||
<word key="stripe_3ds_pass_version" js="0"><![CDATA[3DSecure authenticated <small>(v%s)</small>]]></word>
|
||||
@@ -209,6 +207,7 @@
|
||||
<word key="stripe_dispute_reason_customer_initiated" js="0">The reason for this dispute is not known (code: customer_initiated). See your Stripe dashboard for more details.</word>
|
||||
<word key="stripe_dispute_reference" js="0">Dispute reference</word>
|
||||
<word key="trans_attention_required" js="0">Action Required</word>
|
||||
<word key="stripe_apple_verificationfile" js="0">Apple Pay Verification File</word>
|
||||
<word key="gateway__AuthorizeNet" js="0">Authorize.Net</word>
|
||||
<word key="authorizenet_login" js="0">API Login ID</word>
|
||||
<word key="authorizenet_login_desc" js="0"><![CDATA[<a href='{external.authorizenet_keys}' target='_blank' rel='noopener'>Get your login ID and transaction key</a>]]></word>
|
||||
@@ -241,7 +240,7 @@
|
||||
<word key="invalid_gateway" js="0">Transaction %s couldn't be processed because of an invalid payment gateway</word>
|
||||
<word key="gateway_deprecated" js="0">The %s payment method has been deprecated and will be removed in a future version. Please make plans to switch to an alternative payment method.</word>
|
||||
<word key="gateway__Braintree" js="0">Braintree</word>
|
||||
<word key="gateway__Braintree_desc" js="0"><![CDATA[Requires comprehensive application process. <a href='{external.braintree_doc}'>More information</a>]]></word>
|
||||
<word key="gateway__Braintree_desc" js="0"><![CDATA[Requires comprehensive application process. <a href='{external.braintree_doc}' rel='noopener' target='_blank' >More information</a>]]></word>
|
||||
<word key="braintree_basic_settings" js="0">Basic Settings</word>
|
||||
<word key="braintree_keys" js="0">Keys</word>
|
||||
<word key="braintree_keys_blurb" js="0"><![CDATA[Obtain these keys from the <a href='{external.braintree_keys}' target='_blank' rel='noopener'>API section of your Braintree account settings</a>.]]></word>
|
||||
@@ -523,7 +522,7 @@
|
||||
<word key="nexus_split_payments_on" js="0">Allow split payments?</word>
|
||||
<word key="nexus_split_payments_on_desc" js="0">Split payments allow customers to pay for an order using more than one payment method. For example, to split the payment over two different credit cards.</word>
|
||||
<word key="nexus_split_payments" js="0">Minimum amount for split payments</word>
|
||||
<word key="nexus_require_billing" js="0">Require customer's real name and Billing Address when</word>
|
||||
<word key="nexus_require_billing" js="0">Require customer's real name and Billing Address for</word>
|
||||
<word key="nexus_require_billing_package" js="0">Purchasing non-physical products</word>
|
||||
<word key="nexus_require_billing_package_desc" js="0">Purchasing physical products will always require a name, billing address and shipping address.</word>
|
||||
<word key="nexus_require_billing_gift" js="0">Purchasing gift cards</word>
|
||||
@@ -531,7 +530,7 @@
|
||||
<word key="nexus_require_billing_domain" js="0">Purchasing domain names</word>
|
||||
<word key="nexus_require_billing_other" js="0">Paying other charges</word>
|
||||
<word key="nexus_require_billing_other_desc" js="0">Includes account credit top-ups, pay-per-incident support charges, upgrade charges, and any miscellaneous charges on manually-generated invoices.</word>
|
||||
<word key="nexus_require_billing_desc" js="0"><![CDATA[If you disable any of these options beware that without a billing address:<ul><li>Some <a href='{internal.app=nexus&module=payments&controller=paymentsettings&tab=gateways}' target='_blank' rel='noopener'>payment methods</a> will not be able to be used, including PayPal for card payments, PayPal Subscriptions, 2CheckOut and some Authorize.Net processors. Any payment methods which are set to only be available to certain countries will not be available.</li><li>If any <a href='{internal.app=nexus&module=payments&controller=paymentsettings&tab=tax}' target='_blank' rel='noopener'>tax rates</a> use a rate that is dependent on the customer's location, the default tax rate will be used.</li><li>Any <a href='{internal.app=nexus&module=payments&controller=paymentsettings&tab=fraud}' target='_blank' rel='noopener'>Anti-Fraud Rules</a> which act on the customer's billing address will assume the customer is not in the country specified by them.</li><li>If <a href='{internal.app=core&module=applications&controller=enhancements&do=edit&id=nexus_MaxMind}' target='_blank' rel='noopener'>MaxMind</a> integration is enabled, it's ability to accurately detect fraud will be impeded.</li></ul>It is recommended if you use any of these features that you leave all options checked so customers are always asked for a billing address.]]></word>
|
||||
<word key="nexus_require_billing_desc" js="0"><![CDATA[If you disable any of these options beware that without a billing address:<ul><li>Some <a href='{internal.app=nexus&module=payments&controller=paymentsettings&tab=gateways}' target='_blank' rel='noopener'>payment methods</a> will not be able to be used, including PayPal for card payments, 2CheckOut and some Authorize.Net processors. Any payment methods which are set to only be available to certain countries will not be available.</li><li>If any <a href='{internal.app=nexus&module=payments&controller=paymentsettings&tab=tax}' target='_blank' rel='noopener'>tax rates</a> use a rate that is dependent on the customer's location, the default tax rate will be used.</li><li>Any <a href='{internal.app=nexus&module=payments&controller=paymentsettings&tab=fraud}' target='_blank' rel='noopener'>Anti-Fraud Rules</a> which act on the customer's billing address will assume the customer is not in the country specified by them.</li><li>If <a href='{internal.app=core&module=applications&controller=enhancements&do=edit&id=nexus_MaxMind}' target='_blank' rel='noopener'>MaxMind</a> integration is enabled, it's ability to accurately detect fraud will be impeded.</li></ul>It is recommended if you use any of these features that you leave all options checked so customers are always asked for a billing address.]]></word>
|
||||
<word key="nexus_minimum_order" js="0">Minimum Order Amount</word>
|
||||
<word key="nexus_tac" js="0"><![CDATA[Terms & Conditions]]></word>
|
||||
<word key="nexus_tac_none" js="0">Do not display</word>
|
||||
@@ -684,7 +683,7 @@
|
||||
<word key="invoice_settings" js="0">Invoice Settings</word>
|
||||
<word key="cm_invoice_generate" js="0">Generate renewal invoices</word>
|
||||
<word key="cm_invoice_generate_suffix" js="0">before expiry date</word>
|
||||
<word key="cm_invoice_generate_desc" js="0"><![CDATA[If a customer has account credit or a card on file this is when payment will be taken, otherwise it is when the customer will be sent an email instructing them to pay.<br>Usually it is best to set this relatively close to the expiration date so that the customer isn't charged before they expect. However, if if you are selling products where a service interruption would be problematic, you should either set this long enough that the customer will always have time to submit payment before the expiration, or make use of the Grace Period setting on each product to allow some additional time to pay.]]></word>
|
||||
<word key="cm_invoice_generate_desc" js="0"><![CDATA[If a customer has account credit or a card on file this is when payment will be taken, otherwise it is when the customer will be sent an email instructing them to pay.<br>Usually it is best to set this relatively close to the expiration date so that the customer isn't charged before they expect. However, if if you are selling products where a service interruption would be problematic, you should either set this long enough that the customer will always have time to submit payment before the expiration, or make use of the Grace Period setting on each product to allow some additional time to pay.<br><strong>If a PayPal Subscription is active</strong>: Invoices will be generated at the time of automated payment regardless of this setting value.]]></word>
|
||||
<word key="cm_invoice_warning" js="0">Warn customer about purchases due to expire</word>
|
||||
<word key="cm_invoice_warning_suffix" js="0">before payment will be taken</word>
|
||||
<word key="cm_invoice_warning_desc" js="0"><![CDATA[If the product has a custom email set to send when the purchase will expire soon, this setting controls when that is sent.<br>For all other purchases, an email is only sent if a customer has account credit or a card on file (i.e. when payment will be taken automatically).]]></word>
|
||||
@@ -718,6 +717,7 @@
|
||||
<word key="invoice_timeline_invoice_exp_event" js="0">If the invoice has still not been paid, it expires and can no longer be paid. To renew, an invoice would need to be manually generated in the AdminCP.</word>
|
||||
<word key="invoice_timeline_credit" js="0"><![CDATA[If the product has a custom email set to send when the purchase will expire soon, that email is sent.<br>Otherwise, if a customer has account credit or a card on file, an email is sent to warn them that payment will shortly be taken automatically.]]></word>
|
||||
<word key="mailsub__nexus_invoiceNotify" js="0">A tracked invoice has been marked paid</word>
|
||||
<word key="mailsub__nexus_invoiceTrackExpired" js="0">A tracked invoice has expired</word>
|
||||
<word key="invoice_track" js="0">Track</word>
|
||||
<word key="invoice_untrack" js="0">Untrack</word>
|
||||
<word key="ba_gw_id" js="0">Subscription ID</word>
|
||||
@@ -1126,6 +1126,7 @@
|
||||
<word key="account_credit" js="0">Account Credit</word>
|
||||
<word key="account_credit_increase" js="0">Account Credit Increase</word>
|
||||
<word key="account_credit_remove" js="0">%s account credit will be taken from %s.</word>
|
||||
<word key="account_credit_remove_commission" js="0">%s account credit will be taken from %s (referral commission).</word>
|
||||
<word key="account_credit_remove_neg" js="0">This will make their account credit negative.</word>
|
||||
<word key="account_credit_return" js="0">%s account credit will be returned to %s.</word>
|
||||
<word key="altcontactTable_alt_id" js="0">Alternative Contact</word>
|
||||
@@ -2434,6 +2435,7 @@
|
||||
<word key="existing_purchases" js="0">Existing Purchases</word>
|
||||
<word key="err_subscription_qty" js="0">You are only allowed to purchase one of this product.</word>
|
||||
<word key="err_subscription_bought" js="0">You are only allowed to purchase one of this product, and you have already done so.</word>
|
||||
<word key="err_sub_subscription_bought" js="0"><![CDATA[You are only allowed to purchase one subscription, and you have already done so. <br><a href='{internal.app=nexus&module=subscriptions&controller=subscriptions}' class='ipsButton ipsButton_primary ipsSpacer_top'>Manage existing Subscription</a>]]></word>
|
||||
<word key="err_subscription_bought_login" js="0">You are only allowed to purchase one of %s, and you have already done so, so it is not possible to continue with this purchase.</word>
|
||||
<word key="err_subscription_in_cart" js="0">You are only allowed to purchase one of this product, and you already have one in your cart.</word>
|
||||
<word key="err_group_cant_purchase" js="0">%s is not available for your account.</word>
|
||||
@@ -3225,6 +3227,7 @@
|
||||
<word key="email_transaction_refunded_expd" js="0">Please contact us if you have any questions.</word>
|
||||
<word key="email_transaction_refunded_canc" js="0">Your order has been canceled and no further action is required. Please contact us if you have any questions.</word>
|
||||
<word key="email_transaction_failed" js="0">Unfortunately, there was a problem accepting your payment. Please review your order below, then try submitting your payment again by clicking the Pay Now button.</word>
|
||||
<word key="email_transaction_wait" js="0">The following transaction is currently pending payment.</word>
|
||||
<word key="email_transaction_waiting" js="0">Thank you for your order at %s. Your order is awaiting your payment. We will email you further information on your order once payment is received.</word>
|
||||
<word key="email_held_approval" js="0"><![CDATA[Thank you for your order. Your payment for the invoice detailed below has been received and is <strong>currently being held for review</strong>.<br>
|
||||
At this stage, no further action is required from you. We will send you an additional email once your payment has been approved.]]></word>
|
||||
@@ -3326,7 +3329,9 @@ At this stage, no further action is required from you. We will send you an addit
|
||||
<word key="emailtpl_package_customemail" js="0">Custom Package Email</word>
|
||||
<word key="email_expire_warning_can_cancel" js="0">Update your renewal preferences</word>
|
||||
<word key="email_tracked_invoice_paid" js="0">An invoice you are tracking has been marked paid</word>
|
||||
<word key="email_tracked_invoice_expired" js="0">An invoice you are tracking has expired</word>
|
||||
<word key="emailtpl_invoiceNotify" js="0">Tracked invoice marked paid</word>
|
||||
<word key="emailtpl_invoiceTrackExpired" js="0">Tracked invoice expired</word>
|
||||
<word key="block_pendingActions" js="0">Commerce Overview</word>
|
||||
<word key="block_pendingActions_desc" js="0">Shows items requiring staff attention such as pending transactions and open support requests.</word>
|
||||
<word key="block_donations" js="0">Donation Goals</word>
|
||||
@@ -3443,23 +3448,29 @@ At this stage, no further action is required from you. We will send you an addit
|
||||
<word key="nexus_history_subscription_changed" js="0">Subscription changed %s</word>
|
||||
<word key="nexus_sub_package_count_inactive" js="0">%s inactive</word>
|
||||
<word key="nexus_sub_package_count_active" js="0">%s active</word>
|
||||
<word key="nexus_subs_register" js="0">Force Subscription purchase when registering?</word>
|
||||
<word key="nexus_subs_register_desc" js="0">If enabled, users will only be able to register if they purchase a Subscription.</word>
|
||||
<word key="nexus_subs_register" js="0">Require Subscription Purchase?</word>
|
||||
<word key="nexus_subs_register_none" js="0">Never.</word>
|
||||
<word key="nexus_subs_register_reg" js="0">When registering a new account.</word>
|
||||
<word key="nexus_subs_register_reg_desc" js="0">Member accounts created via other methods (Zapier, REST API, Social Media, CSV Import) they will be asked to purchase a Subscription if their account is less than 30 days old.</word>
|
||||
<word key="nexus_subs_register_always" js="0">Always.</word>
|
||||
<word key="nexus_subs_register_always_desc" js="0">A subscription must be purchased when registering a new account and kept active to retain access to the community.</word>
|
||||
<word key="nexus_subs_register_desc" js="0">This does not apply to Administrators or Moderators, they will be able to access the community.</word>
|
||||
<word key="nexus_subs_invoice_grace" js="0">Grace Period</word>
|
||||
<word key="nexus_subs_invoice_grace_desc" js="0">The subscription will remain active for the specified time after the expiration date before any benefits given by the subscription are revoked. If the customer pays within this time, the current expiration date is extended by one renewal term rather than a new expiration date being generated.</word>
|
||||
<word key="nexus_sub_no_invoice" js="0">Could not locate the invoice</word>
|
||||
<word key="nexus_sub_no_purchase" js="0">Could not locate the purchase</word>
|
||||
<word key="nexus_sub_no_change_ba" js="0"><![CDATA[Subscriptions cannot be changed when an active PayPal subscription is in place, please <a href='{internal.app=nexus&module=clients&controller=billingagreements.clientsbillingagreements}'>cancel</a> it first.]]></word>
|
||||
<word key="nexus_no_sub" js="0">Subscriptions manager is not currently enabled</word>
|
||||
<word key="nexus_no_subs_package" js="0">Could not locate the Subscription Plan</word>
|
||||
<word key="nexus_no_subs_subs" js="0">Could not locate the member's subscription</word>
|
||||
<word key="nexus_no_subs_nocost" js="0">There is no cost for this upgrade</word>
|
||||
<word key="nexus_subs_add_member" js="0">Add member</word>
|
||||
<word key="nexus_subs_member_to_add" js="0">Member name</word>
|
||||
<word key="nexus_subs_member_message" js="0"><![CDATA[Manually added members will not be charged for this subscription, nor receive any renewal invoices.<br>If you wish to add a paid member, <a href='{internal.app=nexus&module=payments&controller=invoices&do=generate}'>create an invoice</a> and add the Subscription to the invoice.]]></word>
|
||||
<word key="nexus_subs_add_member_already_subscribed" js="0">This member already has an active Subscription</word>
|
||||
<word key="nexus_subs_add_member_already_subscribed" js="0">This member already has a Subscription</word>
|
||||
<word key="nexus_subs_free_period" js="0">Renewals</word>
|
||||
<word key="nexus_subs_forever" js="0">Free forever</word>
|
||||
<word key="nexus_subs_until_renew" js="0">Free for %s %s and then %s per %s</word>
|
||||
<word key="nexus_sub_member_added" js="0">Subscription Added</word>
|
||||
<word key="nexus_subs_delete_member" js="0">Remove manually added member</word>
|
||||
<word key="nexus_sub_member_removed" js="0">Removed member from subscription</word>
|
||||
<word key="nexus_subs_off_text" js="0"><![CDATA[Subscriptions are a simple way to charge for being moved into a different user group.<br><br>Each member can only have one active subscription but can upgrade or downgrade between the different plans you set up.]]></word>
|
||||
<word key="nexus_sub_package" js="0">Package</word>
|
||||
<word key="nexus_subs_show_public" js="0">Show Subscription in profile?</word>
|
||||
@@ -3509,9 +3520,12 @@ At this stage, no further action is required from you. We will send you an addit
|
||||
<word key="nexus_subs_subscribed_with_expire" js="0">Your current subscription renews %s</word>
|
||||
<word key="nexus_subs_subscribed_with_expire_no_renewal" js="0">Your current subscription expires %s</word>
|
||||
<word key="nexus_subs_subscribed_expired" js="0">Your subscription has expired.</word>
|
||||
<word key="nexus_subs_subscribed_cancelled" js="0">Your subscription has been cancelled.</word>
|
||||
<word key="nexus_subs_subscribed_cancelled_no_reactivate" js="0">Your subscription has been cancelled, please contact us to reactivate.</word>
|
||||
<word key="nexus_subs_cancel" js="0">Cancel Subscription</word>
|
||||
<word key="nexus_subs_upgrade_button" js="0">Upgrade</word>
|
||||
<word key="nexus_subs_downgrade_button" js="0">Downgrade</word>
|
||||
<word key="nexus_subs_switch_button" js="0">Switch</word>
|
||||
<word key="nexus_sub_cancel_type" js="0">Cancel</word>
|
||||
<word key="nexus_sub_cancel_type_renewal" js="0">Renewals</word>
|
||||
<word key="nexus_sub_cancel_type_renewal__desc" js="0">Cancelling the renewal means that your subscription will end on %s and you will not receive another invoice</word>
|
||||
@@ -3521,9 +3535,12 @@ At this stage, no further action is required from you. We will send you an addit
|
||||
<word key="nexus_sub_cancel_now_desc" js="0">Cancelling immediately ends your subscription now and you will not receive another invoice</word>
|
||||
<word key="nexus_sub_change_confirm_upgrade" js="0">The upgrade from %s to %s will cost %s.</word>
|
||||
<word key="nexus_sub_change_confirm_downgrade" js="0">The downgrade from %s to %s will give you a refund of %s.</word>
|
||||
<word key="nexus_sub_change_confirm_switch" js="0">The switch from %s to %s will cost %s.</word>
|
||||
<word key="nexus_sub_change_no_charge" js="0">Are you sure you want to change to this subscription?</word>
|
||||
<word key="nexus_sub_sign_up_title" js="0">Sign Up: Choose Subscription</word>
|
||||
<word key="nexus_sub_sign_up_desc" js="0">Please select one of the following subscriptions to purchase to continue</word>
|
||||
<word key="nexus_sub_needed_title" js="0">Select Subscription</word>
|
||||
<word key="nexus_sub_needed_desc" js="0">An active subscription is required to access our community, please purchase one to continue.</word>
|
||||
<word key="nexus_subs_subscriber" js="0">%s subscriber</word>
|
||||
<word key="nexus_subs_show_all_subs" js="0">See all Subscription Plans</word>
|
||||
<word key="block_subscriptions" js="0">Member Subscriptions</word>
|
||||
@@ -3531,6 +3548,7 @@ At this stage, no further action is required from you. We will send you an addit
|
||||
<word key="nexus_require_billing_subscriptions" js="0">Member Subscriptions</word>
|
||||
<word key="nexus_subs_non_available" js="0">There are no subscriptions available at this time.</word>
|
||||
<word key="nexus_subs_paid_flash_msg" js="0">Thanks for your payment, you're all set!</word>
|
||||
<word key="nexus_sub_active_billingagreement_desc" js="0"><![CDATA[Since you have an active PayPal Subscription to pay the subscription renewal fee, this must be <a href='%s' class='ipsButton_link--negative'>cancelled</a> before changing your Subscription package. ]]></word>
|
||||
<word key="nexus_dont_delete_group" js="0">Some users who have purchased packages or subscriptions are set to return to this group when their subscription ends. If you delete this group, those users will be returned to the group '%s' instead.</word>
|
||||
<word key="upgrade_fix_refund_transactions" js="0">Updating transaction data</word>
|
||||
<word key="upgrade_fix_missing_addresses" js="0">Setting missing invoice addresses</word>
|
||||
@@ -3617,6 +3635,15 @@ At this stage, no further action is required from you. We will send you an addit
|
||||
<word key="achievement_filter_Subscriptions_active" js="0">active subscriptions</word>
|
||||
<word key="achievements_filter_Subscription_type" js="0">of type %s</word>
|
||||
<word key="achievements_filter_Subscription_pl" js="0">%s subscriptions</word>
|
||||
<word key="AchievementAction__Package" js="0">Member purchases a product</word>
|
||||
<word key="achievement_filter_Package" js="0">Add a product filter</word>
|
||||
<word key="achievement_filter_Package_node_prefix" js="0">The product is in the group</word>
|
||||
<word key="achievement_filter_Package_nth" js="0">Add a milestone condition</word>
|
||||
<word key="achievement_filter_Package_nth_suffix" js="0"><![CDATA[<span data-role='th'>th</span> purchase]]></word>
|
||||
<word key="AchievementAction__Package_title_generic" js="0">product purchased</word>
|
||||
<word key="AchievementAction__Package_title" js="0">Purchase</word>
|
||||
<word key="purchase_groups_lc" js="0">product groups</word>
|
||||
<word key="AchievementAction__Package_log" js="0">Purchased the product %s</word>
|
||||
<word key="payment_error" js="1">There was an error processing the payment. Please try a different payment method or contact us for assistance.</word>
|
||||
<word key="support_ajax_error" js="1">An error occurred. Your session may have expired. Refresh the page and try again.</word>
|
||||
<word key="click_to_show_url" js="1">Click to show real URL</word>
|
||||
|
||||
@@ -701,6 +701,18 @@
|
||||
"zerofill": false,
|
||||
"auto_increment": false,
|
||||
"binary": false
|
||||
},
|
||||
"m_validationfile": {
|
||||
"name": "m_validationfile",
|
||||
"type": "VARCHAR",
|
||||
"length": 255,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": true,
|
||||
"default": null,
|
||||
"comment": "",
|
||||
"unsigned": false,
|
||||
"auto_increment": false
|
||||
}
|
||||
},
|
||||
"indexes": {
|
||||
@@ -2449,32 +2461,28 @@
|
||||
"zerofill": false
|
||||
},
|
||||
"o_api": {
|
||||
"allow_null": false,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": "",
|
||||
"length": 32,
|
||||
"name": "o_api",
|
||||
"type": "VARCHAR",
|
||||
"unsigned": false,
|
||||
"length": 255,
|
||||
"decimals": null,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"allow_null": false,
|
||||
"default": "",
|
||||
"comment": "",
|
||||
"unsigned": false,
|
||||
"auto_increment": false
|
||||
},
|
||||
"o_api_service": {
|
||||
"allow_null": false,
|
||||
"auto_increment": false,
|
||||
"binary": false,
|
||||
"comment": "",
|
||||
"decimals": null,
|
||||
"default": "",
|
||||
"length": 32,
|
||||
"name": "o_api_service",
|
||||
"type": "VARCHAR",
|
||||
"unsigned": false,
|
||||
"length": 255,
|
||||
"decimals": null,
|
||||
"values": [],
|
||||
"zerofill": false
|
||||
"allow_null": false,
|
||||
"default": "",
|
||||
"comment": "",
|
||||
"unsigned": false,
|
||||
"auto_increment": false
|
||||
},
|
||||
"o_label": {
|
||||
"allow_null": true,
|
||||
|
||||
@@ -241,7 +241,7 @@
|
||||
},
|
||||
{
|
||||
"key": "nexus_gift_vouchers",
|
||||
"default": "",
|
||||
"default": "{}",
|
||||
"report": "bool"
|
||||
},
|
||||
{
|
||||
@@ -376,7 +376,7 @@
|
||||
},
|
||||
{
|
||||
"key": "nexus_require_billing",
|
||||
"default": "product,giftvoucher,donation,domain,other",
|
||||
"default": "product,giftvoucher,donation,domain,other,subscriptions",
|
||||
"report": "bool"
|
||||
},
|
||||
{
|
||||
@@ -437,7 +437,7 @@
|
||||
{
|
||||
"key": "nexus_subs_downgrade",
|
||||
"default": "0",
|
||||
"report": "none"
|
||||
"report": "full"
|
||||
},
|
||||
{
|
||||
"key": "nexus_subs_enabled",
|
||||
|
||||
@@ -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> {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'> </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'> </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'}}
|
||||
|
||||
{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>
|
||||
<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}}
|
||||
|
||||
@@ -440,5 +440,80 @@
|
||||
"106104": "4.6.0 Beta 3",
|
||||
"106105": "4.6.0 Beta 3.1",
|
||||
"106106": "4.6.0 Beta 4",
|
||||
"106107": "4.6.0"
|
||||
"106107": "4.6.0",
|
||||
"106108": "4.6.0",
|
||||
"106109": "4.6.0",
|
||||
"106110": "4.6.1",
|
||||
"106111": "4.6.1",
|
||||
"106112": "4.6.1",
|
||||
"106113": "4.6.2",
|
||||
"106114": "4.6.2",
|
||||
"106115": "4.6.2",
|
||||
"106116": "4.6.3",
|
||||
"106117": "4.6.3",
|
||||
"106118": "4.6.4",
|
||||
"106119": "4.6.4",
|
||||
"106120": "4.6.4",
|
||||
"106121": "4.6.4",
|
||||
"106122": "4.6.5",
|
||||
"106123": "4.6.5.1",
|
||||
"106125": "4.6.5.1",
|
||||
"106126": "4.6.5.1",
|
||||
"106127": "4.6.5.1",
|
||||
"106128": "4.6.5.1",
|
||||
"106129": "4.6.5.1",
|
||||
"106130": "4.6.5.1",
|
||||
"106131": "4.6.5.1",
|
||||
"106132": "4.6.6",
|
||||
"106133": "4.6.6",
|
||||
"106134": "4.6.7 Beta 1",
|
||||
"106135": "4.6.7 Beta 2",
|
||||
"106136": "4.6.7",
|
||||
"106137": "4.6.7",
|
||||
"106138": "4.6.8 Beta 1",
|
||||
"106139": "4.6.8 Beta 2",
|
||||
"106140": "4.6.8",
|
||||
"106141": "4.6.8",
|
||||
"106142": "4.6.8",
|
||||
"106143": "4.6.8",
|
||||
"106144": "4.6.9 Beta 1",
|
||||
"106145": "4.6.9 Beta 2",
|
||||
"106146": "4.6.9 Beta 3",
|
||||
"106147": "4.6.9",
|
||||
"106148": "4.6.9",
|
||||
"106149": "4.6.10 Beta 1",
|
||||
"106150": "4.6.10 Beta 2",
|
||||
"106151": "4.6.10",
|
||||
"106152": "4.6.10",
|
||||
"106153": "4.6.10",
|
||||
"106154": "4.6.10",
|
||||
"106155": "4.6.10",
|
||||
"106156": "4.6.11 Beta 1",
|
||||
"106157": "4.6.11 Beta 1",
|
||||
"106158": "4.6.11 Beta 2",
|
||||
"106159": "4.6.11",
|
||||
"106160": "4.6.11",
|
||||
"106161": "4.6.12 Beta 1",
|
||||
"106162": "4.6.12 Beta 1",
|
||||
"106163": "4.6.12 Beta 2",
|
||||
"106164": "4.6.12",
|
||||
"106165": "4.6.12",
|
||||
"106166": "4.6.12",
|
||||
"106167": "4.6.12.1",
|
||||
"106168": "4.6.13 Beta 1",
|
||||
"107000": "4.7.0 Beta 1",
|
||||
"107001": "4.7.0 Beta 1",
|
||||
"107002": "4.7.0 Beta 2",
|
||||
"107003": "4.7.0 Beta 2",
|
||||
"107004": "4.7.0 Beta 3",
|
||||
"107005": "4.7.0 Beta 4",
|
||||
"107006": "4.7.0 Beta 4.1",
|
||||
"107007": "4.7.0 Beta 5",
|
||||
"107008": "4.7.0 Beta 6",
|
||||
"107009": "4.7.0 Beta 7",
|
||||
"107010": "4.7.0 Beta 8",
|
||||
"107011": "4.7.0 Beta 9",
|
||||
"107012": "4.7.0 Beta 10",
|
||||
"107013": "4.7.0",
|
||||
"107014": "4.7.0"
|
||||
}
|
||||
@@ -0,0 +1,247 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief Achievement Action Extension
|
||||
* @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/
|
||||
* @subpackage Commerce
|
||||
* @since 01 Oct 2021
|
||||
*/
|
||||
|
||||
namespace IPS\nexus\extensions\core\AchievementAction;
|
||||
|
||||
/* To prevent PHP errors (extending class does not exist) revealing path */
|
||||
if ( !\defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
||||
{
|
||||
header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Achievement Action Extension
|
||||
*/
|
||||
class _Package extends \IPS\core\Achievements\Actions\AbstractAchievementAction // NOTE: Other classes exist to provided bases for common situations, like where node-based filters will be required
|
||||
{
|
||||
/**
|
||||
* Get filter form elements
|
||||
*
|
||||
* @param array|NULL $filters Current filter values (if editing)
|
||||
* @param \IPS\Http\Url $url The URL the form is being shown on
|
||||
* @return array
|
||||
*/
|
||||
public function filters( ?array $filters, \IPS\Http\Url $url ): array
|
||||
{
|
||||
$return = array();
|
||||
|
||||
$return['nodes'] = new \IPS\Helpers\Form\Node( 'achievement_filter_Package', ( $filters and isset( $filters['nodes'] ) and $filters['nodes'] ) ? $filters['nodes'] : 0, FALSE, [
|
||||
'url' => $url,
|
||||
'class' => 'IPS\nexus\Package\Group',
|
||||
'subnodes' => FALSE,
|
||||
'showAllNodes' => TRUE,
|
||||
'multiple' => TRUE
|
||||
], NULL, \IPS\Member::loggedIn()->language()->addToStack( 'achievement_filter_Package_node_prefix', FALSE, [ 'sprintf' => [
|
||||
\IPS\Member::loggedIn()->language()->addToStack( 'nexus_sub_package_id', FALSE ),
|
||||
\IPS\Member::loggedIn()->language()->addToStack( 'purchase_groups_lc', FALSE )
|
||||
] ] ) );
|
||||
|
||||
$return['milestone'] = new \IPS\Helpers\Form\Number( 'achievement_filter_Package_nth', ( $filters and isset( $filters['milestone'] ) and $filters['milestone'] ) ? $filters['milestone'] : 0, FALSE, [], NULL, \IPS\Member::loggedIn()->language()->addToStack('achievement_filter_nth_their'), \IPS\Member::loggedIn()->language()->addToStack('achievement_filter_Package_nth_suffix') );
|
||||
$return['milestone']->label = \IPS\Member::loggedIn()->language()->addToStack('achievement_filter_NewContentItem_nth');
|
||||
|
||||
return $return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Format filter form values
|
||||
*
|
||||
* @param array $values The values from the form
|
||||
* @return array
|
||||
*/
|
||||
public function formatFilterValues( array $values ): array
|
||||
{
|
||||
$return = [];
|
||||
if ( isset( $values['achievement_filter_Package'] ) )
|
||||
{
|
||||
$return['nodes'] = [];
|
||||
|
||||
if ( \is_array( $values['achievement_filter_Package'] ) )
|
||||
{
|
||||
foreach ( $values['achievement_filter_Package'] as $node )
|
||||
{
|
||||
$return['nodes'][] = $node->id;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ( isset( $values['achievement_filter_Package_nth'] ) )
|
||||
{
|
||||
$return['milestone'] = $values['achievement_filter_Package_nth'];
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Work out if the filters applies for a given action
|
||||
*
|
||||
* Important note for milestones: consider the context. This method is called by \IPS\Member::achievementAction(). If your code
|
||||
* calls that BEFORE making its change in the database (or there is read/write separation), you will need to add
|
||||
* 1 to the value being considered for milestones
|
||||
*
|
||||
* @param \IPS\Member $subject The subject member
|
||||
* @param array $filters The value returned by formatFilterValues()
|
||||
* @param mixed $extra Any additional information about what is happening (e.g. if a post is being made: the post object)
|
||||
* @return bool
|
||||
*/
|
||||
public function filtersMatch( \IPS\Member $subject, array $filters, $extra = NULL ): bool
|
||||
{
|
||||
if ( isset( $filters['nodes'] ) and \is_array( $filters['nodes'] ) and \count( $filters['nodes'] ) )
|
||||
{
|
||||
if ( !\in_array( $extra->item()->container()->_id, $filters['nodes'] ) )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
if ( isset( $filters['milestone'] ) )
|
||||
{
|
||||
if ( \IPS\Db::i()->select( 'COUNT(*)', 'nexus_purchases', [ 'ps_cancelled !=1 AND ps_member=?', $subject->member_id ] )->first() < $filters['milestone'] )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get identifier to prevent the member being awarded points for the same action twice
|
||||
* Must be unique within within of this domain, must not exceed 32 chars.
|
||||
*
|
||||
* @param \IPS\Member $subject The subject member
|
||||
* @param mixed $extra Any additional information about what is happening (e.g. if a post is being made: the post object)
|
||||
* @return string
|
||||
*/
|
||||
public function identifier( \IPS\Member $subject, $extra = NULL ): string
|
||||
{
|
||||
return $extra->id . '.' . $subject->member_id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a description for this action to show in the log
|
||||
*
|
||||
* @param string $identifier The identifier as returned by identifier()
|
||||
* @param array $actor If the member was the "subject", "other", or both
|
||||
* @return string
|
||||
*/
|
||||
public function logRow( string $identifier, array $actor ): string
|
||||
{
|
||||
try
|
||||
{
|
||||
list( $identifier, $memberId ) = explode( '.', $identifier );
|
||||
$package = \IPS\nexus\Package::load( $identifier );
|
||||
$sprintf = [ 'htmlsprintf' => [
|
||||
\IPS\Theme::i()->getTemplate( 'global', 'core', 'global' )->basicUrl( $package->url(), TRUE, $package->_title, FALSE )
|
||||
] ];
|
||||
}
|
||||
catch ( \OutOfRangeException $e )
|
||||
{
|
||||
$sprintf = [ 'sprintf' => [ \IPS\Member::loggedIn()->language()->addToStack('modcp_deleted') ] ];
|
||||
}
|
||||
|
||||
return \IPS\Member::loggedIn()->language()->addToStack( 'AchievementAction__Package_log', FALSE, $sprintf );
|
||||
}
|
||||
|
||||
/**
|
||||
* Get "description" for rule
|
||||
*
|
||||
* @param \IPS\core\Achievements\Rule $rule The rule
|
||||
* @return string|NULL
|
||||
*/
|
||||
public function ruleDescription( \IPS\core\Achievements\Rule $rule ): ?string
|
||||
{
|
||||
$conditions = [];
|
||||
if ( isset( $rule->filters['milestone'] ) )
|
||||
{
|
||||
$conditions[] = \IPS\Member::loggedIn()->language()->addToStack( 'achievements_title_filter_milestone', FALSE, [
|
||||
'htmlsprintf' => [
|
||||
\IPS\Theme::i()->getTemplate( 'achievements' )->ruleDescriptionBadge( 'milestone', \IPS\Member::loggedIn()->language()->addToStack( 'achievements_title_filter_milestone_nth', FALSE, [ 'pluralize' => [ $rule->filters['milestone'] ] ] ) )
|
||||
],
|
||||
'sprintf' => [ \IPS\Member::loggedIn()->language()->addToStack('AchievementAction__Package_title_generic') ]
|
||||
] );
|
||||
}
|
||||
|
||||
if ( $nodeCondition = $this->_nodeFilterDescription( $rule ) )
|
||||
{
|
||||
$conditions[] = $nodeCondition;
|
||||
}
|
||||
|
||||
return \IPS\Theme::i()->getTemplate( 'achievements' )->ruleDescription(
|
||||
\IPS\Member::loggedIn()->language()->addToStack( 'AchievementAction__Package_title' ),
|
||||
$conditions
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get "description" for rule (usually a description of the rule's filters)
|
||||
*
|
||||
* @param \IPS\core\Achievements\Rule $rule The rule
|
||||
* @return string|NULL
|
||||
*/
|
||||
protected function _nodeFilterDescription( \IPS\core\Achievements\Rule $rule ): ?string
|
||||
{
|
||||
if ( isset( $rule->filters['nodes'] ) )
|
||||
{
|
||||
$nodeNames = [];
|
||||
foreach ( $rule->filters['nodes'] as $id )
|
||||
{
|
||||
try
|
||||
{
|
||||
$nodeNames[] = \IPS\nexus\Package\Group::load( $id )->_title;
|
||||
}
|
||||
catch ( \OutOfRangeException $e ) {}
|
||||
}
|
||||
if ( $nodeNames )
|
||||
{
|
||||
return \IPS\Member::loggedIn()->language()->addToStack( 'achievements_title_filter_location', FALSE, [
|
||||
'htmlsprintf' => [
|
||||
\IPS\Theme::i()->getTemplate( 'achievements' )->ruleDescriptionBadge( 'location',
|
||||
\count( $nodeNames ) === 1 ? $nodeNames[0] : \IPS\Member::loggedIn()->language()->addToStack( 'achievements_title_filter_location_val', FALSE, [ 'sprintf' => [
|
||||
\count( $nodeNames ),
|
||||
\IPS\Member::loggedIn()->language()->addToStack( 'purchase_groups_lc', FALSE )
|
||||
] ] ),
|
||||
\count( $nodeNames ) === 1 ? NULL : $nodeNames
|
||||
)
|
||||
],
|
||||
] );
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get rebuild data
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
static public function rebuildData()
|
||||
{
|
||||
return [ [
|
||||
'table' => 'nexus_purchases',
|
||||
'pkey' => 'ps_id',
|
||||
'date' => 'ps_start',
|
||||
'where' => [ [ 'ps_cancelled != 1' ] ],
|
||||
] ];
|
||||
}
|
||||
|
||||
/**
|
||||
* Process the rebuild row
|
||||
*
|
||||
* @param array $row Row from database
|
||||
* @param array $data Data collected when starting rebuild [table, pkey...]
|
||||
* @return void
|
||||
*/
|
||||
public static function rebuildRow( $row, $data )
|
||||
{
|
||||
\IPS\Member::load( $row['ps_member'] )->achievementAction( 'nexus', 'Package', \IPS\nexus\Package::load( $row['ps_item_id'] ) );
|
||||
}
|
||||
|
||||
}
|
||||
@@ -96,7 +96,7 @@ class _Subscription extends \IPS\core\Achievements\Actions\AbstractAchievementAc
|
||||
{
|
||||
if ( isset( $filters['subscriptions'] ) )
|
||||
{
|
||||
if ( !\in_array( $extra->_id, $filters['subscriptions'] ) )
|
||||
if ( !\in_array( $extra->package_id, $filters['subscriptions'] ) )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
@@ -108,44 +108,21 @@ class _Subscription extends \IPS\core\Achievements\Actions\AbstractAchievementAc
|
||||
{
|
||||
try
|
||||
{
|
||||
$package = \IPS\nexus\Subscription\Package::load( $id );
|
||||
\IPS\nexus\Subscription::loadByMemberAndPackage( $subject, $package, TRUE );
|
||||
}
|
||||
catch ( \OutOfRangeException $e ) {
|
||||
return FALSE;
|
||||
\IPS\nexus\Subscription::loadByMemberAndPackage( $subject, \IPS\nexus\Subscription\Package::load( $id ), TRUE );
|
||||
|
||||
/* Still here? */
|
||||
return TRUE;
|
||||
}
|
||||
catch ( \OutOfRangeException $e ) { }
|
||||
}
|
||||
|
||||
/* No active matches */
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the labels for the people this action might give awards to
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
// You don't need to implement this if your action only gives points to the subject
|
||||
// public function awardOptions(): array
|
||||
// {
|
||||
// return [
|
||||
// 'subject' => 'achievement_filter_Subscription_receiver',
|
||||
// 'other' => 'achievement_filter_Subscription_giver'
|
||||
// ];
|
||||
// }
|
||||
|
||||
/**
|
||||
* Get the "other" people we need to award =stuff to
|
||||
*
|
||||
* @param mixed $extra Any additional information about what is happening (e.g. if a post is being made: the post object)
|
||||
* @return array
|
||||
*/
|
||||
// You don't need to implement this if your action only gives points to the subject
|
||||
// public function awardOther( $extra = NULL ): array
|
||||
// {
|
||||
// return [ \IPS\Member::loggedIn() ];
|
||||
// }
|
||||
|
||||
/**
|
||||
* Get identifier to prevent the member being awarded points for the same action twice
|
||||
* Must be unique within within of this domain, must not exceed 32 chars.
|
||||
@@ -251,7 +228,7 @@ class _Subscription extends \IPS\core\Achievements\Actions\AbstractAchievementAc
|
||||
'table' => 'nexus_member_subscriptions',
|
||||
'pkey' => 'sub_id',
|
||||
'date' => 'sub_start',
|
||||
'where' => [ ['sub_active=?', 1 ] ],
|
||||
'where' => [],
|
||||
] ];
|
||||
}
|
||||
|
||||
@@ -264,7 +241,7 @@ class _Subscription extends \IPS\core\Achievements\Actions\AbstractAchievementAc
|
||||
*/
|
||||
public static function rebuildRow( $row, $data )
|
||||
{
|
||||
\IPS\Member::load( $row['member_id'] )->achievementAction( 'nexus', 'Subscription', \IPS\nexus\Subscription::load( $row['sub_id'] ) );
|
||||
\IPS\Member::load( $row['sub_member_id'] )->achievementAction( 'nexus', 'Subscription', \IPS\nexus\Subscription::load( $row['sub_id'] ) );
|
||||
}
|
||||
|
||||
}
|
||||
@@ -80,7 +80,7 @@ class _SupportRequest
|
||||
$request->last_new_reply = time();
|
||||
$request->started = time();
|
||||
$request->replies = 1;
|
||||
$request->title = \IPS\Member::loggedIn()->language()->get( 'contact_nexus_title' );
|
||||
$request->title = ( $values['contact_name'] ) ? sprintf( \IPS\Member::loggedIn()->language()->get( 'contact_nexus_title_with_name' ), $values['contact_name'] ) : \IPS\Member::loggedIn()->language()->get( 'contact_nexus_title' );
|
||||
|
||||
if ( \IPS\Member::loggedIn()->member_id)
|
||||
{
|
||||
|
||||
@@ -45,6 +45,32 @@ class _Store
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Can whatever is posted in this editor be moderated?
|
||||
* If this returns TRUE, we must ensure the content is ran through word, link and image filters
|
||||
*
|
||||
* @param \IPS\Member $member The member
|
||||
* @param \IPS\Helpers\Form\Editor $field The editor field
|
||||
* @return bool
|
||||
*/
|
||||
public function canBeModerated( $member, $field )
|
||||
{
|
||||
/* Creating/editing a review */
|
||||
if ( preg_match( '/^(?:editComment|review)\-nexus\/store\-\d+/', $field->options['autoSaveKey'] ) )
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
/* Unknown */
|
||||
else
|
||||
{
|
||||
if ( \IPS\IN_DEV )
|
||||
{
|
||||
throw new \RuntimeException( 'Unknown canBeModerated: ' . $field->options['autoSaveKey'] );
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Permission check for attachments
|
||||
|
||||
@@ -0,0 +1,99 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief File Storage Extension: Gateways
|
||||
* @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 Commerce
|
||||
* @since 11 May 2022
|
||||
*/
|
||||
|
||||
namespace IPS\nexus\extensions\core\FileStorage;
|
||||
|
||||
/* To prevent PHP errors (extending class does not exist) revealing path */
|
||||
if ( !\defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
||||
{
|
||||
header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* File Storage Extension: Gateways
|
||||
*/
|
||||
class _Gateways
|
||||
{
|
||||
/**
|
||||
* Count stored files
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function count()
|
||||
{
|
||||
return \IPS\Db::i()->select( 'COUNT(*)', 'nexus_paymethods', array( 'm_validationfile<>?', '' ) )->first();
|
||||
}
|
||||
|
||||
/**
|
||||
* Move stored files
|
||||
*
|
||||
* @param int $offset This will be sent starting with 0, increasing to get all files stored by this extension
|
||||
* @param int $storageConfiguration New storage configuration ID
|
||||
* @param int|NULL $oldConfiguration Old storage configuration ID
|
||||
* @throws \UnderflowException When file record doesn't exist. Indicating there are no more files to move
|
||||
* @return void|int An offset integer to use on the next cycle, or nothing
|
||||
*/
|
||||
public function move( $offset, $storageConfiguration, $oldConfiguration=NULL )
|
||||
{
|
||||
$record = \IPS\Db::i()->select( '*', 'nexus_paymethods', array( 'm_validationfile<>?', '' ), 'm_id', array( $offset, 1 ) )->first();
|
||||
|
||||
try
|
||||
{
|
||||
$file = \IPS\File::get( $oldConfiguration ?: 'nexus_Gateways', $record['m_id'] )->move( $storageConfiguration );
|
||||
|
||||
if ( (string) $file != $record['m_validationfile'] )
|
||||
{
|
||||
\IPS\Db::i()->update( 'nexus_paymethods', array( 'm_validationfile' => (string) $file ), array( 'm_id=?', $record['m_id'] ) );
|
||||
}
|
||||
}
|
||||
catch( \Exception $e )
|
||||
{
|
||||
/* Any issues are logged */
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a file is valid
|
||||
*
|
||||
* @param string $file The file path to check
|
||||
* @return bool
|
||||
*/
|
||||
public function isValidFile( $file )
|
||||
{
|
||||
try
|
||||
{
|
||||
\IPS\Db::i()->select( '*', 'nexus_paymethods', array( 'm_validationfile=?', (string) $file ) )->first();
|
||||
return TRUE;
|
||||
}
|
||||
catch ( \UnderflowException $e )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete all stored files
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function delete()
|
||||
{
|
||||
foreach( \IPS\Db::i()->select( '*', 'nexus_paymethods', array( 'm_validationfile<>?', '' ) ) as $product )
|
||||
{
|
||||
try
|
||||
{
|
||||
\IPS\File::get( 'nexus_Gateways', $product['m_validationfile'] )->delete();
|
||||
}
|
||||
catch( \Exception $e ){}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -42,7 +42,7 @@ class _Gifts extends \IPS\core\FrontNavigation\FrontNavigationAbstract
|
||||
*/
|
||||
public static function isEnabled()
|
||||
{
|
||||
return ( ( \IPS\Settings::i()->nexus_gift_vouchers and \count( json_decode( \IPS\Settings::i()->nexus_gift_vouchers, TRUE ) ) ) or \IPS\Settings::i()->nexus_gift_vouchers_free );
|
||||
return ( ( $giftVouchers = json_decode( \IPS\Settings::i()->nexus_gift_vouchers, TRUE ) and \count( $giftVouchers ) ) or \IPS\Settings::i()->nexus_gift_vouchers_free );
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -0,0 +1,80 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief Admin CP Group Form
|
||||
* @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 Commerce
|
||||
* @since 12 Oct 2021
|
||||
*/
|
||||
|
||||
namespace IPS\nexus\extensions\core\GroupForm;
|
||||
|
||||
/* To prevent PHP errors (extending class does not exist) revealing path */
|
||||
if ( !\defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
||||
{
|
||||
header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Admin CP Group Form
|
||||
*/
|
||||
class _PreventDeletion
|
||||
{
|
||||
/**
|
||||
* Process Form
|
||||
*
|
||||
* @param \IPS\Helpers\Form $form The form
|
||||
* @param \IPS\Member\Group $group Existing Group
|
||||
* @return void
|
||||
*/
|
||||
public function process( &$form, $group )
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Save
|
||||
*
|
||||
* @param array $values Values from form
|
||||
* @param \IPS\Member\Group $group The group
|
||||
* @return void
|
||||
*/
|
||||
public function save( $values, &$group )
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Can this group be deleted?
|
||||
*
|
||||
* @param \IPS\Member\Group $group The group
|
||||
* @return void
|
||||
*/
|
||||
public function canDelete( $group ) : bool
|
||||
{
|
||||
// Is this group used for group promotion after a product purchase?
|
||||
try
|
||||
{
|
||||
\IPS\Db::i()->select( '*', 'nexus_packages', ['p_primary_group=? OR ' . \IPS\Db::i()->findInSet('p_secondary_group', [$group->g_id] ), $group->g_id ] )->first();
|
||||
return FALSE;
|
||||
}
|
||||
catch(\UnderflowException $e )
|
||||
{
|
||||
}
|
||||
|
||||
// Is this group used for group promotion after a subscription purchase?
|
||||
try
|
||||
{
|
||||
\IPS\Db::i()->select( '*', 'nexus_member_subscription_packages', ['sp_primary_group=? OR ' . \IPS\Db::i()->findInSet('sp_secondary_group', [$group->g_id] ), $group->g_id ] )->first();
|
||||
return FALSE;
|
||||
}
|
||||
catch(\UnderflowException $e )
|
||||
{
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
@@ -714,11 +714,11 @@ class _Nexus
|
||||
case 'cancelrenewals':
|
||||
try
|
||||
{
|
||||
return \IPS\Member::loggedIn()->language()->addToStack( 'nexus_history_cancelrenewals_with_name', NULL, array( 'sprintf' => array( \IPS\nexus\Subscription\Package::load( $val['id'] )->_title, $byCustomer ) ) );
|
||||
return \IPS\Member::loggedIn()->language()->addToStack( 'nexus_history_cancelrenewals_with_name', FALSE, array( 'sprintf' => array( \IPS\nexus\Subscription\Package::load( $val['id'] )->_title, $byCustomer ) ) );
|
||||
}
|
||||
catch ( \OutOfRangeException $e )
|
||||
{
|
||||
return \IPS\Member::loggedIn()->language()->addToStack( 'nexus_history_cancelrenewals', NULL, array( 'sprintf' => array( $byCustomer ) ) );
|
||||
return \IPS\Member::loggedIn()->language()->addToStack( 'nexus_history_cancelrenewals', FALSE, array( 'sprintf' => array( $byCustomer ) ) );
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -729,7 +729,7 @@ class _Nexus
|
||||
}
|
||||
catch ( \OutOfRangeException $e )
|
||||
{
|
||||
return \IPS\Member::loggedIn()->language()->addToStack( 'nexus_history_subscription_changed', NULL, array( 'sprintf' => array( ( isset( $val['system'] ) and $val['system'] ) ? '' : $byStaff ) ) );
|
||||
return \IPS\Member::loggedIn()->language()->addToStack( 'nexus_history_subscription_changed', FALSE, array( 'sprintf' => array( ( isset( $val['system'] ) and $val['system'] ) ? '' : $byStaff ) ) );
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,140 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief Background Task
|
||||
* @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 Commerce
|
||||
* @since 22 Apr 2022
|
||||
*/
|
||||
|
||||
namespace IPS\nexus\extensions\core\Queue;
|
||||
|
||||
/* To prevent PHP errors (extending class does not exist) revealing path */
|
||||
if ( !\defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
||||
{
|
||||
header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Background Task
|
||||
*/
|
||||
class _FixMissingSubscriptionPurchases
|
||||
{
|
||||
/**
|
||||
* @brief Number of subscriptions to check per cycle
|
||||
*/
|
||||
public $batch = \IPS\REBUILD_NORMAL;
|
||||
|
||||
/**
|
||||
* Parse data before queuing
|
||||
*
|
||||
* @param array $data
|
||||
* @return array
|
||||
*/
|
||||
public function preQueueData( $data )
|
||||
{
|
||||
try
|
||||
{
|
||||
$data['count'] = \IPS\Db::i()->select( 'count(sub_id)', 'nexus_member_subscriptions' )->first();
|
||||
}
|
||||
catch( \UnderflowException $e )
|
||||
{
|
||||
throw new \OutOfRangeException;
|
||||
}
|
||||
|
||||
if( $data['count'] == 0 )
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
$data['completed'] = 0;
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Run Background Task
|
||||
*
|
||||
* @param mixed $data Data as it was passed to \IPS\Task::queue()
|
||||
* @param int $offset Offset
|
||||
* @return int New offset
|
||||
* @throws \IPS\Task\Queue\OutOfRangeException Indicates offset doesn't exist and thus task is complete
|
||||
*/
|
||||
public function run( &$data, $offset )
|
||||
{
|
||||
$last = null;
|
||||
|
||||
foreach( \IPS\Db::i()->select( '*', 'nexus_member_subscriptions', [ 'sub_id>?', $offset ], NULL, $this->batch ) as $subscription )
|
||||
{
|
||||
if( $subscription['sub_purchase_id'] )
|
||||
{
|
||||
try
|
||||
{
|
||||
\IPS\nexus\Purchase::load( $subscription['sub_purchase_id' ] );
|
||||
|
||||
/* Nothing to do here */
|
||||
$data['completed']++;
|
||||
$last = $subscription['sub_id'];
|
||||
continue;
|
||||
}
|
||||
catch( \OutOfRangeException $e ) { }
|
||||
}
|
||||
|
||||
$package = \IPS\nexus\Subscription\Package::load( $subscription['sub_package_id'] );
|
||||
|
||||
if( !$subscription['sub_added_manually'] AND $subscription['sub_renews'] )
|
||||
{
|
||||
$term = $package->renewalTerm( \IPS\nexus\Customer::load( $subscription['sub_member_id'] )->defaultCurrency() );
|
||||
$termData = $term->getTerm();
|
||||
}
|
||||
|
||||
/* Create purchase manually - we don't want to trigger any on* methods */
|
||||
$purchaseId = \IPS\Db::i()->insert( 'nexus_purchases', [
|
||||
'ps_member' => $subscription['sub_member_id'],
|
||||
'ps_name' => \IPS\nexus\Customer::load( $subscription['sub_member_id'] )->language()->get( $package::$titleLangPrefix . $subscription['sub_package_id'] ),
|
||||
'ps_active' => $subscription['sub_active'],
|
||||
'ps_cancelled' => $subscription['sub_cancelled'],
|
||||
'ps_start' => $subscription['sub_start'],
|
||||
'ps_expire' => $subscription['sub_added_manually'] ? 0 : $subscription['sub_expire'],
|
||||
'ps_renewals' => $termData['term'] ?? 0,
|
||||
'ps_renewal_price' => $term->cost->amount ?? 0,
|
||||
'ps_renewal_unit' => $termData['unit'] ?? '',
|
||||
'ps_app' => 'nexus',
|
||||
'ps_type' => 'subscription',
|
||||
'ps_item_id' => $subscription['sub_package_id'],
|
||||
'ps_renewal_currency' => $term->cost->currency ?? '',
|
||||
'ps_original_invoice' => $subscription['sub_invoice_id'],
|
||||
'ps_tax' => isset( $term->tax ) ? $term->tax->id : 0
|
||||
]);
|
||||
|
||||
/* update sub with purchase id */
|
||||
\IPS\Db::i()->update( 'nexus_member_subscriptions', [ 'sub_purchase_id' => $purchaseId ], [ 'sub_id=?', $subscription['sub_id'] ] );
|
||||
|
||||
$data['completed']++;
|
||||
$last = $subscription['sub_id'];
|
||||
}
|
||||
|
||||
if( $last === NULL )
|
||||
{
|
||||
throw new \IPS\Task\Queue\OutOfRangeException;
|
||||
}
|
||||
|
||||
return $last;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Progress
|
||||
*
|
||||
* @param mixed $data Data as it was passed to \IPS\Task::queue()
|
||||
* @param int $offset Offset
|
||||
* @return array( 'text' => 'Doing something...', 'complete' => 50 ) Text explaining task and percentage complete
|
||||
* @throws \OutOfRangeException Indicates offset doesn't exist and thus task is complete
|
||||
*/
|
||||
public function getProgress( $data, $offset )
|
||||
{
|
||||
return array( 'text' => \IPS\Member::loggedIn()->language()->addToStack( 'nexus_queue_missing_sub_purchases' ), 'complete' => $data['count'] ? ( round( 100 / $data['count'] * $data['completed'], 2 ) ) : 100 );
|
||||
}
|
||||
}
|
||||
@@ -46,7 +46,15 @@ class _MassChangePurchases
|
||||
*/
|
||||
public function run( $data, $offset )
|
||||
{
|
||||
$package = \IPS\nexus\Package::load( $data['id'] );
|
||||
try
|
||||
{
|
||||
$package = \IPS\nexus\Package::load( $data['id'] );
|
||||
}
|
||||
catch( \OutOfRangeException $e )
|
||||
{
|
||||
throw new \IPS\Task\Queue\OutOfRangeException;
|
||||
}
|
||||
|
||||
$admin = \IPS\Member::load( $data['admin'] );
|
||||
if ( $data['cancel_type'] == 'change' )
|
||||
{
|
||||
|
||||
@@ -474,4 +474,19 @@ class _CustomPackage extends \IPS\nexus\extensions\nexus\Item\Package
|
||||
{
|
||||
return \IPS\nexus\Package::load( $this->id )->showPurchaseRecord();
|
||||
}
|
||||
|
||||
/**
|
||||
* Check for member
|
||||
* If a user initially checks out as a guest and then logs in during checkout, this method
|
||||
* is ran to check the items they are purchasing can be bought.
|
||||
* Is expected to throw a DomainException with an error message to display to the user if not valid
|
||||
*
|
||||
* @param \IPS\Member $member The new member
|
||||
* @return void
|
||||
* @throws \DomainException
|
||||
*/
|
||||
public function memberCanPurchase( \IPS\Member $member )
|
||||
{
|
||||
// Custom packages do not have any purchase restrictions
|
||||
}
|
||||
}
|
||||
@@ -422,7 +422,7 @@ class _Package extends \IPS\nexus\Invoice\Item\Purchase
|
||||
}
|
||||
}
|
||||
|
||||
$renewalTerm = new \IPS\nexus\Purchase\RenewalTerm( new \IPS\nexus\Money( $renewalAmount, $invoice->currency ), new \DateInterval( 'P' . $chosenRenewOption['term'] . mb_strtoupper( $chosenRenewOption['unit'] ) ), $package->tax ? \IPS\nexus\Tax::load( $package->tax ) : NULL );
|
||||
$renewalTerm = new \IPS\nexus\Purchase\RenewalTerm( new \IPS\nexus\Money( $renewalAmount, $invoice->currency ), new \DateInterval( 'P' . $chosenRenewOption['term'] . mb_strtoupper( $chosenRenewOption['unit'] ) ), $package->tax ? \IPS\nexus\Tax::load( $package->tax ) : NULL, FALSE,$package->grace_period ? new \DateInterval( 'P' . $package->grace_period . 'D' ) : NULL );
|
||||
|
||||
if ( $chosenRenewOption['add'] )
|
||||
{
|
||||
@@ -744,7 +744,10 @@ class _Package extends \IPS\nexus\Invoice\Item\Purchase
|
||||
{
|
||||
try
|
||||
{
|
||||
return \IPS\nexus\Package::load( $this->id )->onPaid( $invoice );
|
||||
$package = \IPS\nexus\Package::load( $this->id );
|
||||
$makeSureThisHappens = $package->onPaid( $invoice );
|
||||
$invoice->member->achievementAction( 'nexus', 'Package', $package );
|
||||
return $makeSureThisHappens;
|
||||
}
|
||||
catch ( \OutOfRangeException $e )
|
||||
{
|
||||
|
||||
@@ -81,7 +81,7 @@ class _Subscription extends \IPS\nexus\Invoice\Item\Purchase
|
||||
|
||||
try
|
||||
{
|
||||
$subscription = \IPS\nexus\Subscription::loadByMemberAndPurchase( $purchase->member, $purchase );
|
||||
$subscription = \IPS\nexus\Subscription::loadByMemberAndPackage( $purchase->member, \IPS\nexus\Subscription\Package::load( $purchase->item_id ) );
|
||||
$subscription->expire = \is_object( $purchase->expire ) ? $purchase->expire->getTimestamp() : ( $purchase->expire ?: 0 );
|
||||
$subscription->save();
|
||||
}
|
||||
@@ -324,7 +324,7 @@ class _Subscription extends \IPS\nexus\Invoice\Item\Purchase
|
||||
/* Delete the subscription row */
|
||||
try
|
||||
{
|
||||
$sub = \IPS\nexus\Subscription::loadByMemberAndPackage( $purchase->member, \IPS\nexus\Subscription\Package::load( $purchase->item_id ), FALSE );
|
||||
$sub = \IPS\nexus\Subscription::load( $purchase->id, 'sub_purchase_id' );
|
||||
$sub->delete();
|
||||
}
|
||||
catch( \OutOfRangeException $e ) {}
|
||||
@@ -340,9 +340,9 @@ class _Subscription extends \IPS\nexus\Invoice\Item\Purchase
|
||||
{
|
||||
try
|
||||
{
|
||||
$subs = \IPS\nexus\Subscription::loadByMemberAndPackage( $purchase->member, \IPS\nexus\Subscription\Package::load( $purchase->item_id ), FALSE );
|
||||
$subs->active = 1;
|
||||
$subs->save();
|
||||
$sub = \IPS\nexus\Subscription::load( $purchase->id, 'sub_purchase_id' );
|
||||
$sub->active = 1;
|
||||
$sub->save();
|
||||
}
|
||||
catch( \OutOfRangeException $e ) { }
|
||||
|
||||
@@ -437,6 +437,25 @@ class _Subscription extends \IPS\nexus\Invoice\Item\Purchase
|
||||
*/
|
||||
public function requiresBillingAddress()
|
||||
{
|
||||
return TRUE;
|
||||
return \in_array( 'subscriptions', explode( ',', \IPS\Settings::i()->nexus_require_billing ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Check for member
|
||||
* If a user initially checks out as a guest and then logs in during checkout, this method
|
||||
* is ran to check the items they are purchasing can be bought.
|
||||
* Is expected to throw a DomainException with an error message to display to the user if not valid
|
||||
*
|
||||
* @param \IPS\Member $member The new member
|
||||
* @return void
|
||||
* @throws \DomainException
|
||||
*/
|
||||
public function memberCanPurchase( \IPS\Member $member )
|
||||
{
|
||||
/* Already purchased a subscription */
|
||||
if ( $current = \IPS\nexus\Subscription::loadByMember( $member, FALSE ) AND ( $current->purchase AND ( !$current->purchase->cancelled OR $current->purchase->can_reactivate ) ) )
|
||||
{
|
||||
throw new \DomainException( $member->language()->addToStack( 'err_sub_subscription_bought' ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
//<?php
|
||||
|
||||
/* To prevent PHP errors (extending class does not exist) revealing path */
|
||||
if ( !\defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
||||
{
|
||||
exit;
|
||||
}
|
||||
|
||||
class nexus_hook_frontDispatcher extends _HOOK_CLASS_
|
||||
{
|
||||
/**
|
||||
* Output the basic javascript files every page needs
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected static function baseJs()
|
||||
{
|
||||
parent::baseJs();
|
||||
|
||||
if ( !\IPS\Request::i()->isAjax() )
|
||||
{
|
||||
if ( \IPS\Settings::i()->gateways_counts and $decoded = json_decode( \IPS\Settings::i()->gateways_counts, TRUE ) and isset( $decoded['Stripe'] ) and $decoded['Stripe'] > 0 )
|
||||
{
|
||||
\IPS\Output::i()->jsFiles[] = 'https://js.stripe.com/v3/';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -150,6 +150,14 @@ class paypalWebhookHandler
|
||||
$invoice->billaddress = $transaction->billing_agreement->member->primaryBillingAddress();
|
||||
foreach ( $purchases as $purchase )
|
||||
{
|
||||
if( !$purchase->renewals )
|
||||
{
|
||||
// Renewals have been cancelled for this purchase since PayPal tried to bill for it.
|
||||
$amount = new \IPS\nexus\Money( $purchase->renewal_price, $transaction->amount->currency );
|
||||
$invoice->addItem( new \IPS\nexus\extensions\nexus\Item\MiscellaneousCharge( sprintf( $purchase->member->language()->get('renew_payment_no_ba'), $purchase->name ), $amount ) );
|
||||
continue;
|
||||
}
|
||||
|
||||
$invoice->addItem( \IPS\nexus\Invoice\Item\Renewal::create( $purchase ) );
|
||||
}
|
||||
$invoice->save();
|
||||
|
||||
@@ -28,9 +28,7 @@ catch ( \OutOfRangeException $e )
|
||||
\IPS\Output::i()->redirect( \IPS\Http\Url::internal( "app=nexus&module=checkout&controller=checkout&do=transaction&id=&t=" . \IPS\Request::i()->nexusTransactionId, 'front', 'nexus_checkout' ) );
|
||||
}
|
||||
|
||||
/* Process */
|
||||
try
|
||||
{
|
||||
$fraudCheck = function( $transaction, $refuseExecute=TRUE ) {
|
||||
/* Check fraud rules */
|
||||
$maxMind = NULL;
|
||||
if ( \IPS\Settings::i()->maxmind_key and ( !\IPS\Settings::i()->maxmind_gateways or \IPS\Settings::i()->maxmind_gateways == '*' or \in_array( $transaction->method->id, explode( ',', \IPS\Settings::i()->maxmind_gateways ) ) ) )
|
||||
@@ -40,13 +38,19 @@ try
|
||||
$maxMind->setTransactionType( 'paypal' );
|
||||
}
|
||||
$fraudResult = $transaction->runFraudCheck( $maxMind );
|
||||
if ( $fraudResult === \IPS\nexus\Transaction::STATUS_REFUSED )
|
||||
if ( $refuseExecute AND $fraudResult === \IPS\nexus\Transaction::STATUS_REFUSED )
|
||||
{
|
||||
$transaction->executeFraudAction( $fraudResult, FALSE );
|
||||
$transaction->sendNotification();
|
||||
\IPS\Output::i()->redirect( $transaction->url() );
|
||||
}
|
||||
|
||||
|
||||
return $fraudResult;
|
||||
};
|
||||
|
||||
/* Process */
|
||||
try
|
||||
{
|
||||
/* Subscription */
|
||||
if ( isset( \IPS\Request::i()->subscription ) )
|
||||
{
|
||||
@@ -70,7 +74,10 @@ try
|
||||
}
|
||||
$transaction->billing_agreement = $billingAgreement;
|
||||
$transaction->save();
|
||||
|
||||
|
||||
/* Check Fraud */
|
||||
$fraudResult = $fraudCheck( $transaction, FALSE );
|
||||
|
||||
/* Just save that we're waiting for the webhook, but also try again in a few minutes because PayPal is flakey */
|
||||
$transaction->status = \IPS\nexus\Transaction::STATUS_GATEWAY_PENDING;
|
||||
$transaction->save();
|
||||
@@ -113,6 +120,8 @@ try
|
||||
$transaction->gw_id = $t['transaction_id'];
|
||||
$transaction->save();
|
||||
|
||||
/* Check Fraud Actions */
|
||||
$fraudResult = $fraudCheck( $transaction );
|
||||
if ( $fraudResult and $fraudResult !== \IPS\nexus\Transaction::STATUS_PAID )
|
||||
{
|
||||
$transaction->executeFraudAction( $fraudResult, TRUE );
|
||||
@@ -163,6 +172,9 @@ try
|
||||
$transaction->extra = $extra;
|
||||
}
|
||||
$transaction->save();
|
||||
|
||||
/* Fraud Check */
|
||||
$fraudResult = $fraudCheck( $transaction, FALSE );
|
||||
}
|
||||
|
||||
/* Capture */
|
||||
|
||||
@@ -74,7 +74,7 @@ class stripeWebhookHandler
|
||||
}
|
||||
|
||||
/* Validate the source with Stripe */
|
||||
$source = $this->transaction->method->api( 'sources/' . preg_replace( '/[^A-Z0-9_]/i', '', $this->data['data']['object']['id'] ) );
|
||||
$source = $this->transaction->method->api( 'sources/' . preg_replace( '/[^A-Z0-9_]/i', '', $this->data['data']['object']['id'] ), null, 'get' );
|
||||
if ( $source['client_secret'] != $this->data['data']['object']['client_secret'] )
|
||||
{
|
||||
throw new \Exception('BAD_SECRET');
|
||||
@@ -130,7 +130,7 @@ class stripeWebhookHandler
|
||||
/* Validate the charge with Stripe */
|
||||
try
|
||||
{
|
||||
$charge = $this->transaction->method->api( 'charges/' . preg_replace( '/[^A-Z0-9_]/i', '', $this->data['data']['object']['id'] ) );
|
||||
$charge = $this->transaction->method->api( 'charges/' . preg_replace( '/[^A-Z0-9_]/i', '', $this->data['data']['object']['id'] ), null, 'get' );
|
||||
if ( !\in_array( $charge['status'], array( 'succeeded', 'paid' ) ) )
|
||||
{
|
||||
throw new \Exception;
|
||||
@@ -206,7 +206,7 @@ class stripeWebhookHandler
|
||||
/* Validate the charge with Stripe */
|
||||
try
|
||||
{
|
||||
$charge = $this->transaction->method->api( 'charges/' . preg_replace( '/[^A-Z0-9_]/i', '', $this->data['data']['object']['id'] ) );
|
||||
$charge = $this->transaction->method->api( 'charges/' . preg_replace( '/[^A-Z0-9_]/i', '', $this->data['data']['object']['id'] ), null, 'get' );
|
||||
if ( !\in_array( $charge['status'], array( 'succeeded', 'paid' ) ) )
|
||||
{
|
||||
throw new \Exception;
|
||||
@@ -281,7 +281,7 @@ class stripeWebhookHandler
|
||||
/* Validate the charge with Stripe */
|
||||
try
|
||||
{
|
||||
$charge = $this->transaction->method->api( 'charges/' . preg_replace( '/[^A-Z0-9_]/i', '', $this->data['data']['object']['id'] ) );
|
||||
$charge = $this->transaction->method->api( 'charges/' . preg_replace( '/[^A-Z0-9_]/i', '', $this->data['data']['object']['id'] ), null, 'get' );
|
||||
if ( $charge['status'] !== 'failed' )
|
||||
{
|
||||
throw new \Exception;
|
||||
@@ -323,7 +323,7 @@ class stripeWebhookHandler
|
||||
/* Validate the dispute with Stripe */
|
||||
try
|
||||
{
|
||||
$dispute = $this->transaction->method->api( 'disputes/' . preg_replace( '/[^A-Z0-9_]/i', '', $this->data['data']['object']['id'] ) );
|
||||
$dispute = $this->transaction->method->api( 'disputes/' . preg_replace( '/[^A-Z0-9_]/i', '', $this->data['data']['object']['id'] ), null, 'get' );
|
||||
if ( !\in_array( $dispute['status'], array( 'needs_response', 'warning_needs_response' ) ) )
|
||||
{
|
||||
throw new \Exception;
|
||||
@@ -331,7 +331,7 @@ class stripeWebhookHandler
|
||||
|
||||
if ( \substr( $this->transaction->gw_id, 0, 3 ) === 'pi_' )
|
||||
{
|
||||
$paymentIntent = $this->transaction->method->api( 'payment_intents/' . $this->transaction->gw_id );
|
||||
$paymentIntent = $this->transaction->method->api( 'payment_intents/' . $this->transaction->gw_id, null, 'get' );
|
||||
|
||||
$ok = FALSE;
|
||||
foreach ( $paymentIntent['charges']['data'] as $charge )
|
||||
@@ -398,7 +398,7 @@ class stripeWebhookHandler
|
||||
$dispute = $this->transaction->method->api( 'disputes/' . preg_replace( '/[^A-Z0-9_]/i', '', $this->data['data']['object']['id'] ) );
|
||||
if ( \substr( $this->transaction->gw_id, 0, 3 ) === 'pi_' )
|
||||
{
|
||||
$paymentIntent = $this->transaction->method->api( 'payment_intents/' . $this->transaction->gw_id );
|
||||
$paymentIntent = $this->transaction->method->api( 'payment_intents/' . $this->transaction->gw_id, null, 'get' );
|
||||
|
||||
$ok = FALSE;
|
||||
foreach ( $paymentIntent['charges']['data'] as $charge )
|
||||
@@ -476,7 +476,7 @@ class stripeWebhookHandler
|
||||
{
|
||||
try
|
||||
{
|
||||
$charge = $method->api( 'charges/' . preg_replace( '/[^A-Z0-9_]/i', '', $this->data['data']['object']['charge'] ) );
|
||||
$charge = $method->api( 'charges/' . preg_replace( '/[^A-Z0-9_]/i', '', $this->data['data']['object']['charge'] ), null, 'get' );
|
||||
if ( isset( $charge['payment_intent'] ) )
|
||||
{
|
||||
$paymentIntentId = $charge['payment_intent'];
|
||||
@@ -618,6 +618,7 @@ class stripeWebhookHandler
|
||||
$class = new stripeWebhookHandler( trim( @file_get_contents('php://input') ) );
|
||||
try
|
||||
{
|
||||
sleep( 5 ); // Stripe can send web hooks very quickly, we need to delay to ensure we've processed the transaction first.
|
||||
$response = $class->run( isset( $_SERVER['HTTP_STRIPE_SIGNATURE'] ) ? $_SERVER['HTTP_STRIPE_SIGNATURE'] : '' );
|
||||
\IPS\Output::i()->sendOutput( $response, 200, 'text/plain' );
|
||||
}
|
||||
|
||||
@@ -54,6 +54,7 @@ class _billingagreements extends \IPS\Dispatcher\Controller
|
||||
if ( !$billingAgreement->canceled and $billingAgreement->status() == $billingAgreement::STATUS_CANCELED )
|
||||
{
|
||||
$billingAgreement->canceled = TRUE;
|
||||
$billingAgreement->next_cycle = NULL;
|
||||
$billingAgreement->save();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -60,6 +60,11 @@ class _checkoutsettings extends \IPS\Dispatcher\Controller
|
||||
{
|
||||
$requireBillingOptions['domain'] = 'nexus_require_billing_domain';
|
||||
}
|
||||
|
||||
if ( \IPS\Settings::i()->nexus_subs_enabled and \IPS\Db::i()->select( 'COUNT(*)', 'nexus_member_subscription_packages' )->first() )
|
||||
{
|
||||
$requireBillingOptions['subscriptions'] = 'nexus_require_billing_subscriptions';
|
||||
}
|
||||
|
||||
$requireBillingOptions['other'] = 'nexus_require_billing_other';
|
||||
|
||||
|
||||
@@ -138,6 +138,11 @@ class _gateways extends \IPS\Node\Controller
|
||||
$values = $obj->formatFormValues( $values );
|
||||
$obj->settings = json_encode( $settings );
|
||||
$obj->countries = $values['countries'];
|
||||
if( isset( $values['validationfile'] ) )
|
||||
{
|
||||
$obj->validationfile = $values['validationfile'];
|
||||
}
|
||||
|
||||
$obj->save();
|
||||
\IPS\Lang::saveCustom( 'nexus', "nexus_paymethod_{$obj->id}", $name );
|
||||
|
||||
|
||||
@@ -560,7 +560,11 @@ class _shipping extends \IPS\Dispatcher\Controller
|
||||
$shipment->delete();
|
||||
|
||||
/* Log */
|
||||
$shipment->invoice->member->log( 'shipping', array( 'id' => $shipment->id, 'deleted' => TRUE ) );
|
||||
try
|
||||
{
|
||||
$shipment->invoice->member->log( 'shipping', array( 'id' => $shipment->id, 'deleted' => TRUE ) );
|
||||
}
|
||||
catch ( \OutOfRangeException $e ) {}
|
||||
|
||||
/* Redirect */
|
||||
\IPS\Output::i()->redirect( \IPS\Http\Url::internal('app=nexus&module=payments&controller=shipping') );
|
||||
|
||||
@@ -53,14 +53,14 @@ class _shippingrates extends \IPS\Node\Controller
|
||||
{
|
||||
\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate( 'global', 'core' )->decision( 'ship_rates_' . \IPS\Request::i()->type, array(
|
||||
'ship_rates_go_back' => \IPS\Http\Url::internal( 'app=nexus&module=payments&controller=shippingrates&do=form&id=' . \IPS\Request::i()->id ),
|
||||
'ship_rates_save_anyway' => \IPS\Http\Url::internal( $this->url ),
|
||||
'ship_rates_save_anyway' => $this->url,
|
||||
) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Redirect after save
|
||||
*
|
||||
* @param \IPS\Node\Model $old A clone of the node as it was before or NULL if this is a creation
|
||||
* @param \IPS\Node\Model|NULL $old A clone of the node as it was before or NULL if this is a creation
|
||||
* @param \IPS\Node\Model $new The node now
|
||||
* @param string $lastUsedTab The tab last used in the form
|
||||
* @return void
|
||||
|
||||
@@ -63,13 +63,13 @@ class _income extends \IPS\Dispatcher\Controller
|
||||
{
|
||||
foreach ( $currencies as $currency )
|
||||
{
|
||||
$tabs[ 'members_' . $currency ] = \IPS\Member::loggedIn()->language()->addToStack( 'nexus_report_income_by_member', NULL, array( 'sprintf' => array( $currency ) ) );
|
||||
$tabs[ 'members_' . $currency ] = \IPS\Member::loggedIn()->language()->addToStack( 'nexus_report_income_by_member', FALSE, array( 'sprintf' => array( $currency ) ) );
|
||||
}
|
||||
}
|
||||
|
||||
foreach ( $currencies as $currency )
|
||||
{
|
||||
$tabs[ $currency ] = \IPS\Member::loggedIn()->language()->addToStack( 'nexus_report_income_by_method', NULL, array( 'sprintf' => array( $currency ) ) );
|
||||
$tabs[ $currency ] = \IPS\Member::loggedIn()->language()->addToStack( 'nexus_report_income_by_method', FALSE, array( 'sprintf' => array( $currency ) ) );
|
||||
}
|
||||
|
||||
$activeTab = ( isset( \IPS\Request::i()->tab ) and array_key_exists( \IPS\Request::i()->tab, $tabs ) ) ? \IPS\Request::i()->tab : 'totals';
|
||||
|
||||
@@ -54,7 +54,7 @@ class _markets extends \IPS\Dispatcher\Controller
|
||||
$tabs['count'] = 'nexus_report_count';
|
||||
foreach ( \IPS\nexus\Money::currencies() as $currency )
|
||||
{
|
||||
$tabs[ $currency ] = \IPS\Member::loggedIn()->language()->addToStack( 'nexus_report_income', NULL, array( 'sprintf' => array( $currency ) ) );
|
||||
$tabs[ $currency ] = \IPS\Member::loggedIn()->language()->addToStack( 'nexus_report_income', FALSE, array( 'sprintf' => array( $currency ) ) );
|
||||
}
|
||||
|
||||
$activeTab = ( isset( \IPS\Request::i()->tab ) and array_key_exists( \IPS\Request::i()->tab, $tabs ) ) ? \IPS\Request::i()->tab : 'count';
|
||||
|
||||
@@ -277,6 +277,7 @@ class _packages extends \IPS\Node\Controller
|
||||
{
|
||||
if ( isset( $changes['renew_options'] ) )
|
||||
{
|
||||
\IPS\Output::i()->bypassCsrfKeyCheck = TRUE;
|
||||
$matrix = new \IPS\Helpers\Form\Matrix( 'matrix', 'continue' );
|
||||
$matrix->manageable = FALSE;
|
||||
|
||||
@@ -432,10 +433,15 @@ class _packages extends \IPS\Node\Controller
|
||||
'processing'=> 1,
|
||||
'ba' => isset( \IPS\Request::i()->ba ) ? \IPS\Request::i()->ba : 0
|
||||
) )->csrf(),
|
||||
function( $offset ) use ( $package, $changes )
|
||||
function( $data ) use ( $package, $changes )
|
||||
{
|
||||
$offset = \intval( $offset );
|
||||
$select = \IPS\Db::i()->select( '*', 'nexus_purchases', array( "ps_app=? and ps_type=? and ps_item_id=?", 'nexus', 'package', $package->id ), 'ps_id', array( $offset, 1 ) );
|
||||
if( !\is_array( $data ) )
|
||||
{
|
||||
$data['offset'] = 0;
|
||||
$data['lastId'] = 0;
|
||||
}
|
||||
|
||||
$select = \IPS\Db::i()->select( '*', 'nexus_purchases', array( "ps_id>? and ps_app=? and ps_type=? and ps_item_id=?", $data['lastId'], 'nexus', 'package', $package->id ), 'ps_id', 1 );
|
||||
|
||||
try
|
||||
{
|
||||
@@ -444,7 +450,7 @@ class _packages extends \IPS\Node\Controller
|
||||
|
||||
$package->updatePurchase( $purchase, $changes, \IPS\Request::i()->ba );
|
||||
|
||||
return array( ++$offset, \IPS\Member::loggedIn()->language()->get('processing'), 100 / $total * $offset );
|
||||
return array( [ 'offset' => ++$data['offset'], 'lastId' => $purchase->id ], \IPS\Member::loggedIn()->language()->get('processing'), 100 / $total * $data['offset'] );
|
||||
}
|
||||
catch ( \UnderflowException $e )
|
||||
{
|
||||
|
||||
@@ -145,30 +145,6 @@ class _subscribers extends \IPS\Dispatcher\Controller
|
||||
\IPS\Output::i()->output = (string) $table;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove a manually added member
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function remove()
|
||||
{
|
||||
\IPS\Session::i()->csrfCheck();
|
||||
|
||||
try
|
||||
{
|
||||
$sub = \IPS\nexus\Subscription::load( \IPS\Request::i()->id );
|
||||
$package = \IPS\nexus\Subscription\Package::load( $sub->package_id );
|
||||
$customer = \IPS\nexus\Customer::load( $sub->member_id );
|
||||
$package->removeMember( $customer );
|
||||
|
||||
\IPS\Output::i()->redirect( $customer->acpUrl(), 'nexus_sub_member_removed' );
|
||||
}
|
||||
catch( \OutOfRangeException $e )
|
||||
{
|
||||
\IPS\Output::i()->error( 'nexus_sub_no_invoice', '2X378/1', 404, '' );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Find an purchase and redirect to it.
|
||||
*
|
||||
|
||||
@@ -309,24 +309,53 @@ class _subscriptions extends \IPS\Node\Controller
|
||||
{
|
||||
if ( $val instanceof \IPS\Member )
|
||||
{
|
||||
try
|
||||
$sub = \IPS\nexus\Subscription::loadByMember( $val, false );
|
||||
|
||||
/* We have cannot have duplicate active subscriptions, so error out */
|
||||
if( $sub !== NULL )
|
||||
{
|
||||
$package = \IPS\nexus\Subscription\Package::load( \IPS\Request::i()->id );
|
||||
$sub = \IPS\nexus\Subscription::loadByMemberAndPackage( $val, $package, TRUE );
|
||||
|
||||
/* We have cannot have duplicate active subscriptions, so error out */
|
||||
throw new \InvalidArgumentException('nexus_subs_add_member_already_subscribed');
|
||||
}
|
||||
catch( \OutOfRangeException $e )
|
||||
{
|
||||
/* Nothing found, so that's all lovely and good */
|
||||
throw new \InvalidArgumentException( 'nexus_subs_add_member_already_subscribed' );
|
||||
}
|
||||
}
|
||||
}, NULL, NULL, 'nexus_subs_member_to_add' ) );
|
||||
|
||||
$package = \IPS\nexus\Subscription\Package::load( \IPS\Request::i()->id );
|
||||
if( $term = $package->renewalTerm() )
|
||||
{
|
||||
|
||||
$newOption = json_decode( $package->renew_options, TRUE );
|
||||
|
||||
$costs = array();
|
||||
foreach ( $newOption['cost'] as $data )
|
||||
{
|
||||
$costs[] = new \IPS\nexus\Money( $data['amount'], $data['currency'] );
|
||||
}
|
||||
|
||||
switch ( $newOption['unit'] )
|
||||
{
|
||||
case 'd':
|
||||
$term = \IPS\Member::loggedIn()->language()->addToStack('renew_days', FALSE, array( 'pluralize' => array( $newOption['term'] ) ) );
|
||||
break;
|
||||
case 'm':
|
||||
$term = \IPS\Member::loggedIn()->language()->addToStack('renew_months', FALSE, array( 'pluralize' => array( $newOption['term'] ) ) );
|
||||
break;
|
||||
case 'y':
|
||||
$term = \IPS\Member::loggedIn()->language()->addToStack('renew_years', FALSE, array( 'pluralize' => array( $newOption['term'] ) ) );
|
||||
break;
|
||||
}
|
||||
|
||||
$form->add( new \IPS\Helpers\Form\Radio( 'nexus_subs_free_period', NULL, TRUE, [
|
||||
'options' => [
|
||||
0 => 'nexus_subs_forever',
|
||||
1 => \IPS\Member::loggedIn()->language()->addToStack( 'nexus_subs_until_renew', FALSE, [ 'sprintf' => [ $newOption['term'], $term, \IPS\Member::loggedIn()->language()->formatList( $costs, \IPS\Member::loggedIn()->language()->get('or_list_format') ), $term ] ] )
|
||||
]
|
||||
] ) );
|
||||
}
|
||||
|
||||
if ( $values = $form->values() )
|
||||
{
|
||||
$sub = \IPS\nexus\Subscription\Package::load( \IPS\Request::i()->id )->addMember( $values['nexus_subs_member_to_add'] );
|
||||
$customer = \IPS\nexus\Customer::load( $values['nexus_subs_member_to_add']->member_id );
|
||||
$sub = \IPS\nexus\Subscription\Package::load( \IPS\Request::i()->id )->addMember( $customer, TRUE, (bool) $values['nexus_subs_free_period'] );
|
||||
$sub->added_manually = 1;
|
||||
$sub->save();
|
||||
|
||||
@@ -334,7 +363,7 @@ class _subscriptions extends \IPS\Node\Controller
|
||||
}
|
||||
|
||||
\IPS\Output::i()->title = \IPS\Member::loggedIn()->language()->addToStack('nexus_subs_add_member');
|
||||
\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate( 'subscription', 'nexus' )->addMemberMessage( $form );
|
||||
\IPS\Output::i()->output = $form;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -349,14 +378,20 @@ class _subscriptions extends \IPS\Node\Controller
|
||||
{
|
||||
$groups[ $group->g_id ] = $group->name;
|
||||
}
|
||||
|
||||
|
||||
$form = new \IPS\Helpers\Form;
|
||||
|
||||
$form->addHeader('subscription_basic_settings');
|
||||
$form->add( new \IPS\Helpers\Form\YesNo( 'nexus_subs_enabled', \IPS\Settings::i()->nexus_subs_enabled, FALSE, array(), NULL, NULL, NULL, 'nexus_subs_enabled' ) );
|
||||
$form->add( new \IPS\Helpers\Form\YesNo( 'nexus_subs_register', \IPS\Settings::i()->nexus_subs_register, FALSE, array(), NULL, NULL, NULL, 'nexus_subs_register' ) );
|
||||
$form->add( new \IPS\Helpers\Form\Radio( 'nexus_subs_register', (int) \IPS\Settings::i()->nexus_subs_register, FALSE, [
|
||||
'options' => [
|
||||
0 => 'nexus_subs_register_none',
|
||||
1 => 'nexus_subs_register_reg',
|
||||
2 => 'nexus_subs_register_always'
|
||||
]
|
||||
], NULL, NULL, NULL, 'nexus_subs_register' ) );
|
||||
$form->add( new \IPS\Helpers\Form\YesNo( 'nexus_subs_show_public', \IPS\Settings::i()->nexus_subs_show_public, FALSE, array(), NULL, NULL, NULL, 'nexus_subs_show_public' ) );
|
||||
$form->add( new \IPS\Helpers\Form\Interval( 'nexus_subs_invoice_grace', \IPS\Settings::i()->nexus_subs_invoice_grace ?: 0, FALSE, array( 'valueAs' => \IPS\Helpers\Form\Interval::DAYS, 'min' => NULL ), NULL, NULL, NULL, 'nexus_subs_invoice_grace' ) );
|
||||
$form->add( new \IPS\Helpers\Form\Interval( 'nexus_subs_invoice_grace', \IPS\Settings::i()->nexus_subs_invoice_grace ?: 0, FALSE, array( 'valueAs' => \IPS\Helpers\Form\Interval::DAYS ), NULL, NULL, NULL, 'nexus_subs_invoice_grace' ) );
|
||||
$form->add( new \IPS\Helpers\Form\CheckboxSet( 'nexus_subs_exclude_groups', explode( ',', \IPS\Settings::i()->nexus_subs_exclude_groups ), FALSE, array( 'options' => $groups, 'multiple' => TRUE ) ) );
|
||||
|
||||
|
||||
@@ -392,7 +427,7 @@ class _subscriptions extends \IPS\Node\Controller
|
||||
}
|
||||
|
||||
$values['nexus_subs_exclude_groups'] = implode( ',', $values['nexus_subs_exclude_groups'] );
|
||||
|
||||
|
||||
$form->saveAsSettings( $values );
|
||||
|
||||
\IPS\Session::i()->log( 'acplog__nexus_subs_settings' );
|
||||
@@ -472,6 +507,7 @@ class _subscriptions extends \IPS\Node\Controller
|
||||
{
|
||||
if ( isset( $changes['renew_options'] ) )
|
||||
{
|
||||
\IPS\Output::i()->bypassCsrfKeyCheck = TRUE;
|
||||
$matrix = new \IPS\Helpers\Form\Matrix( 'matrix', 'continue' );
|
||||
$matrix->manageable = FALSE;
|
||||
|
||||
@@ -606,10 +642,15 @@ class _subscriptions extends \IPS\Node\Controller
|
||||
'processing'=> 1,
|
||||
'ba' => isset( \IPS\Request::i()->ba ) ? \IPS\Request::i()->ba : 0
|
||||
) )->csrf(),
|
||||
function( $offset ) use ( $package, $changes )
|
||||
function( $data ) use ( $package, $changes )
|
||||
{
|
||||
$offset = \intval( $offset );
|
||||
$select = \IPS\Db::i()->select( '*', 'nexus_purchases', array( "ps_app=? and ps_type=? and ps_item_id=?", 'nexus', 'subscription', $package->id ), 'ps_id', array( $offset, 1 ) );
|
||||
if( !\is_array( $data ) )
|
||||
{
|
||||
$data['offset'] = 0;
|
||||
$data['lastId'] = 0;
|
||||
}
|
||||
|
||||
$select = \IPS\Db::i()->select( '*', 'nexus_purchases', array( "ps_id>? and ps_app=? and ps_type=? and ps_item_id=?", $data['lastId'], 'nexus', 'subscription', $package->id ), 'ps_id', 1 );
|
||||
|
||||
try
|
||||
{
|
||||
@@ -617,8 +658,8 @@ class _subscriptions extends \IPS\Node\Controller
|
||||
$total = \IPS\Db::i()->select( 'COUNT(*)', 'nexus_purchases', array( "ps_app=? and ps_type=? and ps_item_id=?", 'nexus', 'subscription', $package->id ) )->first();
|
||||
|
||||
$package->updatePurchase( $purchase, $changes, \IPS\Request::i()->ba );
|
||||
|
||||
return array( ++$offset, \IPS\Member::loggedIn()->language()->get('processing'), 100 / $total * $offset );
|
||||
|
||||
return array( [ 'offset' => ++$data['offset'], 'lastId' => $purchase->id ], \IPS\Member::loggedIn()->language()->get('processing'), 100 / $total * $data['offset'] );
|
||||
}
|
||||
catch ( \UnderflowException $e )
|
||||
{
|
||||
|
||||
@@ -622,7 +622,8 @@ class _checkout extends \IPS\Dispatcher\Controller
|
||||
'spamData' => array( 'code' => $spamCode, 'action' => $spamAction ),
|
||||
'guestTransactionKey' => \IPS\Request::i()->cookie['guestTransactionKey'],
|
||||
'pbr' => $postBeforeRegister ? $postBeforeRegister['secret'] : NULL,
|
||||
'referred_by' => isset( \IPS\Request::i()->cookie['referred_by'] ) ? \IPS\Request::i()->cookie['referred_by'] : NULL
|
||||
'referred_by' => isset( \IPS\Request::i()->cookie['referred_by'] ) ? \IPS\Request::i()->cookie['referred_by'] : NULL,
|
||||
'agreed_terms' => ( bool ) $values['reg_agreed_terms']
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -751,19 +752,6 @@ class _checkout extends \IPS\Dispatcher\Controller
|
||||
{
|
||||
if ( $success = $login->authenticate() )
|
||||
{
|
||||
/* Verify it's okay for this member to be buying those items */
|
||||
try
|
||||
{
|
||||
foreach ( $this->invoice->items as $item )
|
||||
{
|
||||
$item->memberCanPurchase( $success->member );
|
||||
}
|
||||
}
|
||||
catch ( \DomainException $e )
|
||||
{
|
||||
\IPS\Output::i()->error( $e->getMessage(), '1X196/B', 403, '' );
|
||||
}
|
||||
|
||||
/* Process the login */
|
||||
if ( $success->mfa() )
|
||||
{
|
||||
@@ -1168,10 +1156,23 @@ class _checkout extends \IPS\Dispatcher\Controller
|
||||
\IPS\Output::i()->error( 'err_no_methods', '5X196/8', 500, '' );
|
||||
}
|
||||
|
||||
/* Verify stock level one last time. It's possible someone added an item to their cart, then someone else did and checked out and the stock level is now 0. */
|
||||
foreach ( $this->invoice->items as $item )
|
||||
{
|
||||
if( $item->appKey == 'nexus' AND $item->typeKey == 'package' )
|
||||
/* Verify whether we're allowed to purchase this */
|
||||
if( \IPS\Member::loggedIn()->member_id )
|
||||
{
|
||||
try
|
||||
{
|
||||
$item->memberCanPurchase( \IPS\Member::loggedIn() );
|
||||
}
|
||||
catch ( \DomainException $e )
|
||||
{
|
||||
\IPS\Output::i()->error( $e->getMessage(), '2X196/H', 403, '' );
|
||||
}
|
||||
}
|
||||
|
||||
/* Verify stock level one last time. It's possible someone added an item to their cart, then someone else did and checked out and the stock level is now 0. */
|
||||
if( $item instanceof IPS\nexus\extensions\nexus\Item\Package )
|
||||
{
|
||||
$package = \IPS\nexus\Package::load( $item->id );
|
||||
$data = $package->optionValuesStockAndPrice( $package->optionValues( $item->details ) );
|
||||
@@ -1352,10 +1353,15 @@ class _checkout extends \IPS\Dispatcher\Controller
|
||||
{
|
||||
$paymentMethodOptions[ $k ] = $v->_title;
|
||||
}
|
||||
|
||||
if ( $canUseAccountCredit and isset( \IPS\nexus\Customer::loggedIn()->cm_credits[ $this->invoice->currency ] ) and \IPS\nexus\Customer::loggedIn()->cm_credits[ $this->invoice->currency ]->amount->isGreaterThanZero() )
|
||||
{
|
||||
$paymentMethodOptions[0] = \IPS\Member::loggedIn()->language()->addToStack( 'account_credit_with_amount', FALSE, array( 'sprintf' => array( \IPS\nexus\Customer::loggedIn()->cm_credits[ $this->invoice->currency ] ) ) );
|
||||
$paymentMethodsToggles[0][] = 'paymentMethodSubmit';
|
||||
$credit = \IPS\nexus\Customer::loggedIn()->cm_credits[ $this->invoice->currency ]->amount;
|
||||
if( $credit >= $amountToPay->amount or ( $amountToPay->amount->subtract( $credit ) > new \IPS\Math\Number( '0.50' ) ) )
|
||||
{
|
||||
$paymentMethodOptions[0] = \IPS\Member::loggedIn()->language()->addToStack( 'account_credit_with_amount', FALSE, array( 'sprintf' => array( \IPS\nexus\Customer::loggedIn()->cm_credits[ $this->invoice->currency ] ) ) );
|
||||
$paymentMethodsToggles[0][] = 'paymentMethodSubmit';
|
||||
}
|
||||
}
|
||||
|
||||
if ( !$paymentMethodOptions )
|
||||
@@ -1616,7 +1622,13 @@ class _checkout extends \IPS\Dispatcher\Controller
|
||||
|
||||
/* Check if there's anything still to pay */
|
||||
if ( $this->invoice->amountToPay()->amount->isZero() )
|
||||
{
|
||||
{
|
||||
/* Only mark paid if the invoice itself was worth zero */
|
||||
if( $this->invoice->total->amount->isZero() )
|
||||
{
|
||||
$this->invoice->markPaid();
|
||||
}
|
||||
|
||||
/* Redirect */
|
||||
$destination = $this->invoice->return_uri ?: $this->invoice->url();
|
||||
if ( \IPS\Member::loggedIn()->member_id )
|
||||
@@ -1924,4 +1936,18 @@ class _checkout extends \IPS\Dispatcher\Controller
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Virtual Stripe/Apple Domain Verification File
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function appleVerification()
|
||||
{
|
||||
if( $file = \IPS\nexus\Gateway::getStripeAppleVerificationFile() )
|
||||
{
|
||||
\IPS\Output::i()->sendOutput( $file->contents(), 200, 'text/plain' );
|
||||
}
|
||||
\IPS\Output::i()->error( 'node_error', '2X196/5', 403, '' );
|
||||
}
|
||||
}
|
||||
@@ -61,6 +61,9 @@ class _invoices extends \IPS\Dispatcher\Controller
|
||||
{
|
||||
\IPS\Output::i()->error( 'no_module_permission_guest', '2X215/6', 404, '' );
|
||||
}
|
||||
|
||||
/* Do not cache this guest view invoice */
|
||||
\IPS\Output::i()->pageCaching = FALSE;
|
||||
}
|
||||
|
||||
\IPS\Output::i()->breadcrumb[] = array( \IPS\Http\Url::internal( 'app=nexus&module=clients&controller=invoices', 'front', 'clientsinvoices' ), \IPS\Member::loggedIn()->language()->addToStack('client_invoices') );
|
||||
|
||||
@@ -243,7 +243,6 @@ class _product extends \IPS\Content\Controller
|
||||
'sku' => $package->id,
|
||||
'offers' => array(
|
||||
'@type' => 'Offer',
|
||||
'availability' => ( $package->stock > 0 OR $package->stock == -1 ) ? 'http://schema.org/InStock' : 'http://schema.org/OutOfStock',
|
||||
'price' => $price->amountAsString(),
|
||||
'priceCurrency' => $price->currency,
|
||||
'seller' => array(
|
||||
@@ -253,6 +252,19 @@ class _product extends \IPS\Content\Controller
|
||||
),
|
||||
);
|
||||
|
||||
/* Stock status */
|
||||
if( $package->physical )
|
||||
{
|
||||
if( $package->stockLevel() === 0 )
|
||||
{
|
||||
\IPS\Output::i()->jsonLd['package']['offers']['availability'] = 'http://schema.org/OutOfStock';
|
||||
}
|
||||
else
|
||||
{
|
||||
\IPS\Output::i()->jsonLd['package']['offers']['availability'] = 'http://schema.org/InStock';
|
||||
}
|
||||
}
|
||||
|
||||
if( $package->image )
|
||||
{
|
||||
\IPS\Output::i()->jsonLd['package']['image'] = (string) $package->image;
|
||||
@@ -535,6 +547,21 @@ class _product extends \IPS\Content\Controller
|
||||
{
|
||||
$term = ( isset( \IPS\Request::i()->renewal_term ) and isset( $renewOptions[ \IPS\Request::i()->renewal_term ] ) ) ? $renewOptions[ \IPS\Request::i()->renewal_term ] : array_shift( $renewOptions );
|
||||
|
||||
switch( $term['unit'] )
|
||||
{
|
||||
case 'd':
|
||||
$initialTerm = \IPS\Member::loggedIn()->language()->pluralize( \IPS\Member::loggedIn()->language()->get('renew_days'), array( $term['term'] ) );
|
||||
break;
|
||||
case 'm':
|
||||
$initialTerm = \IPS\Member::loggedIn()->language()->pluralize( \IPS\Member::loggedIn()->language()->get('renew_months'), array( $term['term'] ) );
|
||||
break;
|
||||
case 'y':
|
||||
$initialTerm = \IPS\Member::loggedIn()->language()->pluralize( \IPS\Member::loggedIn()->language()->get('renew_years'), array( $term['term'] ) );
|
||||
break;
|
||||
}
|
||||
|
||||
$return['initialTerm'] = sprintf( \IPS\Member::loggedIn()->language()->get('package_initial_term_title'), $initialTerm );
|
||||
|
||||
if ( $term['add'] )
|
||||
{
|
||||
$data['price']->amount = $data['price']->amount->add( new \IPS\Math\Number( number_format( $term['cost'][ $memberCurrency ]['amount'], \IPS\nexus\Money::numberOfDecimalsForCurrency( $memberCurrency ), '.', '' ) ) );
|
||||
|
||||
@@ -267,7 +267,6 @@ class _store extends \IPS\Dispatcher\Controller
|
||||
'sku' => $package->id,
|
||||
'offers' => array(
|
||||
'@type' => 'Offer',
|
||||
'availability' => ( $package->stock > 0 OR $package->stock == -1 ) ? 'http://schema.org/InStock' : 'http://schema.org/OutOfStock',
|
||||
'price' => $price->amountAsString(),
|
||||
'priceCurrency' => $price->currency,
|
||||
'seller' => array(
|
||||
@@ -277,6 +276,19 @@ class _store extends \IPS\Dispatcher\Controller
|
||||
),
|
||||
);
|
||||
|
||||
/* Stock levels */
|
||||
if( $package->physical )
|
||||
{
|
||||
if( $package->stockLevel() === 0 )
|
||||
{
|
||||
\IPS\Output::i()->jsonLd['package' . $package->id ]['offers']['availability'] = 'http://schema.org/OutOfStock';
|
||||
}
|
||||
else
|
||||
{
|
||||
\IPS\Output::i()->jsonLd['package' . $package->id ]['offers']['availability'] = 'http://schema.org/InStock';
|
||||
}
|
||||
}
|
||||
|
||||
if( $package->image )
|
||||
{
|
||||
\IPS\Output::i()->jsonLd['package' . $package->id ]['image'] = (string) $package->image;
|
||||
|
||||
@@ -38,7 +38,14 @@ class _subscriptions extends \IPS\Dispatcher\Controller
|
||||
$_SESSION['cart'] = array();
|
||||
\IPS\Request::i()->setCookie( 'currency', \IPS\Request::i()->currency );
|
||||
|
||||
\IPS\Output::i()->redirect( \IPS\Http\Url::internal( 'app=nexus&module=subscriptions&controller=subscriptions', 'front', 'nexus_subscriptions' ) );
|
||||
$url = \IPS\Http\Url::internal( 'app=nexus&module=subscriptions&controller=subscriptions', 'front', 'nexus_subscriptions' );
|
||||
|
||||
if( isset( \IPS\Request::i()->register ) )
|
||||
{
|
||||
$url = $url->setQueryString( 'register', (int) \IPS\Request::i()->register );
|
||||
}
|
||||
|
||||
\IPS\Output::i()->redirect( $url );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,11 +64,14 @@ class _subscriptions extends \IPS\Dispatcher\Controller
|
||||
\IPS\Output::i()->error( 'nexus_no_subs', '2X379/1', 404, '' );
|
||||
}
|
||||
|
||||
/* Send no-cache headers for this page, required for guest sign-ups */
|
||||
\IPS\Output::i()->pageCaching = FALSE;
|
||||
|
||||
/* Create the table */
|
||||
$table = new \IPS\nexus\Subscription\Table( \IPS\Http\Url::internal( 'app=nexus&module=subscriptions&controller=subscriptions', 'front', 'nexus_subscriptions' ) );
|
||||
$current = \IPS\nexus\Subscription::loadByMember( \IPS\Member::loggedIn(), FALSE );
|
||||
|
||||
if ( $current AND ( !$current->purchase OR !$current->purchase->cancelled OR $current->purchase->can_reactivate ) )
|
||||
if ( $current )
|
||||
{
|
||||
$table->activeSubscription = $current;
|
||||
}
|
||||
@@ -113,23 +123,22 @@ class _subscriptions extends \IPS\Dispatcher\Controller
|
||||
\IPS\Output::i()->error( 'node_error', '2X379/7', 403, '' );
|
||||
}
|
||||
|
||||
|
||||
try
|
||||
{
|
||||
$subscription = \IPS\nexus\Subscription::loadActiveByMember( \IPS\Member::loggedIn() );
|
||||
$subscription = \IPS\nexus\Subscription::loadByMember( \IPS\Member::loggedIn(), FALSE );
|
||||
}
|
||||
catch( \OutOfRangeException $e )
|
||||
{
|
||||
\IPS\Output::i()->error( 'nexus_no_subs_subs', '2X379/3', 404, '' );
|
||||
}
|
||||
|
||||
|
||||
/* Fetch purchase */
|
||||
$purchase = NULL;
|
||||
if( $subscription )
|
||||
{
|
||||
foreach ( \IPS\nexus\extensions\nexus\Item\Subscription::getPurchases( \IPS\nexus\Customer::loggedIn(), $subscription->package->id ) as $row )
|
||||
foreach ( \IPS\nexus\extensions\nexus\Item\Subscription::getPurchases( \IPS\nexus\Customer::loggedIn(), $subscription->package->id, TRUE, TRUE ) as $row )
|
||||
{
|
||||
if ( $row->active and ! $row->cancelled )
|
||||
if ( !$row->cancelled OR ( $row->cancelled AND $row->can_reactivate ) )
|
||||
{
|
||||
$purchase = $row;
|
||||
break;
|
||||
@@ -141,6 +150,12 @@ class _subscriptions extends \IPS\Dispatcher\Controller
|
||||
{
|
||||
\IPS\Output::i()->error( 'nexus_sub_no_purchase', '2X379/4', 404, '' );
|
||||
}
|
||||
|
||||
/* We cannot process changes if an active Billing Agreement is in place */
|
||||
if( $purchase->billing_agreement and !$purchase->billing_agreement->canceled )
|
||||
{
|
||||
\IPS\Output::i()->error( 'nexus_sub_no_change_ba', '2X379/B', 404, '' );
|
||||
}
|
||||
|
||||
/* Right, that's all the "I'll tamper with the URLs for a laugh" stuff out of the way... */
|
||||
$upgradeCost = $newPackage->costToUpgrade( $subscription->package, \IPS\nexus\Customer::loggedIn() );
|
||||
@@ -171,9 +186,12 @@ class _subscriptions extends \IPS\Dispatcher\Controller
|
||||
{
|
||||
/* CSRF Check */
|
||||
\IPS\Session::i()->csrfCheck();
|
||||
|
||||
/* Send no-cache headers for this page, required for guest sign-ups */
|
||||
\IPS\Output::i()->pageCaching = FALSE;
|
||||
|
||||
/* Already purchased a subscription which was not cancelled? */
|
||||
if ( $current = \IPS\nexus\Subscription::loadByMember( \IPS\nexus\Customer::loggedIn(), FALSE ) AND ( $current->purchase AND !$current->cancelled AND ( !$current->purchase->cancelled OR $current->purchase->can_reactivate ) ) )
|
||||
/* Already purchased a subscription */
|
||||
if ( $current = \IPS\nexus\Subscription::loadByMember( \IPS\nexus\Customer::loggedIn(), FALSE ) AND ( $current->purchase AND ( !$current->purchase->cancelled OR $current->purchase->can_reactivate ) ) )
|
||||
{
|
||||
\IPS\Output::i()->error( 'nexus_subs_already_got_package', '2X379/6', 403, '' );
|
||||
}
|
||||
@@ -276,46 +294,4 @@ class _subscriptions extends \IPS\Dispatcher\Controller
|
||||
\IPS\Output::i()->redirect( \IPS\Http\Url::internal( 'app=nexus&module=subscriptions&controller=subscriptions', 'front', 'nexus_subscriptions' ) );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Cancel an expired subscription so that we can purchase another subscription
|
||||
*/
|
||||
public function cancel()
|
||||
{
|
||||
/* CSRF Check */
|
||||
\IPS\Session::i()->csrfCheck();
|
||||
|
||||
try
|
||||
{
|
||||
$purchase = \IPS\nexus\Purchase::load( \IPS\Request::i()->id );
|
||||
}
|
||||
catch( \OutOfRangeException $e )
|
||||
{
|
||||
\IPS\Output::i()->error( 'nexus_no_subs_package', '2X379/8', 404, '' );
|
||||
}
|
||||
try
|
||||
{
|
||||
$subscription = \IPS\nexus\Subscription::loadByMemberAndPurchase( \IPS\Member::loggedIn(), $purchase, FALSE );
|
||||
}
|
||||
catch( \OutOfRangeException $e )
|
||||
{
|
||||
\IPS\Output::i()->error( 'nexus_no_subs_subs', '2X379/9', 404, '' );
|
||||
}
|
||||
|
||||
if( !$subscription->canCancel() )
|
||||
{
|
||||
\IPS\Output::i()->error( 'no_module_permission', '1X379/A', 403, '' );
|
||||
}
|
||||
|
||||
foreach ( \IPS\nexus\extensions\nexus\Item\Subscription::getPurchases( \IPS\nexus\Customer::loggedIn(), $subscription->package->id, TRUE, TRUE ) as $row )
|
||||
{
|
||||
$row->cancelled = TRUE;
|
||||
$row->save();
|
||||
}
|
||||
$subscription->cancelled = TRUE;
|
||||
$subscription->save();
|
||||
|
||||
\IPS\Output::i()->redirect( \IPS\Http\Url::internal( 'app=nexus&module=subscriptions&controller=subscriptions', 'front', 'nexus_subscriptions' ), 'cancelled' );
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106108,
|
||||
"name": "4.6.0",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106109,
|
||||
"name": "4.6.0",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106110,
|
||||
"name": "4.6.1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": true,
|
||||
"theme": true,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"normal": {
|
||||
"added": [
|
||||
"account_credit_remove_commission"
|
||||
],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
},
|
||||
"js": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"html": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"admin\/invoices\/view"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"css": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
},
|
||||
"resources": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106111,
|
||||
"name": "4.6.1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106112,
|
||||
"name": "4.6.1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106113,
|
||||
"name": "4.6.2",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106114,
|
||||
"name": "4.6.2",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106115,
|
||||
"name": "4.6.2",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106116,
|
||||
"name": "4.6.3",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106117,
|
||||
"name": "4.6.3",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106118,
|
||||
"name": "4.6.4",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": true,
|
||||
"theme": true,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": true,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": true
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"normal": {
|
||||
"added": [
|
||||
"nexus_sub_no_change_ba",
|
||||
"nexus_sub_active_billingagreement_desc"
|
||||
],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
},
|
||||
"js": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"added": [],
|
||||
"edited": [
|
||||
"nexus_gift_vouchers"
|
||||
],
|
||||
"removed": []
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"html": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"front\/checkout\/orderReview",
|
||||
"front\/subscription\/row",
|
||||
"front\/subscription\/table",
|
||||
"admin\/transactions\/view"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"css": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
},
|
||||
"resources": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief 4.6.4 Upgrade Code
|
||||
* @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 Commerce
|
||||
* @since 02 Jul 2021
|
||||
*/
|
||||
|
||||
namespace IPS\nexus\setup\upg_106118;
|
||||
|
||||
/* To prevent PHP errors (extending class does not exist) revealing path */
|
||||
if ( !\defined( '\IPS\SUITE_UNIQUE_KEY' ) )
|
||||
{
|
||||
header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* 4.6.4 Upgrade Code
|
||||
*/
|
||||
class _Upgrade
|
||||
{
|
||||
/**
|
||||
* ...
|
||||
*
|
||||
* @return array If returns TRUE, upgrader will proceed to next step. If it returns any other value, it will set this as the value of the 'extra' GET parameter and rerun this step (useful for loops)
|
||||
*/
|
||||
public function step1()
|
||||
{
|
||||
|
||||
if( !\IPS\Settings::i()->nexus_gift_vouchers )
|
||||
{
|
||||
\IPS\Settings::i()->changeValues( array( 'nexus_gift_vouchers' => '{}' ) );
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// You can create as many additional methods (step2, step3, etc.) as is necessary.
|
||||
// Each step will be executed in a new HTTP request
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106119,
|
||||
"name": "4.6.4",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106120,
|
||||
"name": "4.6.4",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106121,
|
||||
"name": "4.6.4",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106122,
|
||||
"name": "4.6.5",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106123,
|
||||
"name": "4.6.5.1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"added": [],
|
||||
"edited": [
|
||||
"staffReplyPending",
|
||||
"newInvoice",
|
||||
"acp_notification_Withdrawal",
|
||||
"invoiceWarning",
|
||||
"monitoring_reset",
|
||||
"monitoring_eom",
|
||||
"invoiceMarkedPaid",
|
||||
"unsubscribeStaffNotify",
|
||||
"acp_notification_Shipment",
|
||||
"transactionGatewayPending",
|
||||
"acp_notification_Advertisement",
|
||||
"staffNotifyNew",
|
||||
"staffNotifyNote",
|
||||
"staffAssignedReminder",
|
||||
"payoutComplete",
|
||||
"transactionApproved",
|
||||
"replyRequestLocked",
|
||||
"monitoring_panic",
|
||||
"staffNotifyReply",
|
||||
"transactionHeld",
|
||||
"transactionWaiting",
|
||||
"transactionFailed",
|
||||
"commissionRevoked",
|
||||
"transactionRefunded",
|
||||
"monitoring_acknowledged",
|
||||
"staffReply",
|
||||
"commissionEarned",
|
||||
"emailConfirmation",
|
||||
"autoresolveWarning",
|
||||
"invoiceNotify",
|
||||
"acp_notification_Transaction",
|
||||
"shipment",
|
||||
"purchaseNotify",
|
||||
"acp_notification_HostingError",
|
||||
"monitoring_offline",
|
||||
"giftVoucher",
|
||||
"monitoring_online",
|
||||
"staffReplyNoChrome"
|
||||
],
|
||||
"removed": []
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
{
|
||||
"files": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"nexus\/front\/controllers\/checkout\/ips.checkout.billingForm.js",
|
||||
"nexus\/front\/controllers\/checkout\/ips.checkout.register.js",
|
||||
"nexus\/front\/controllers\/checkout\/ips.checkout.review.js",
|
||||
"nexus\/front\/controllers\/checkout\/ips.checkout.shippingForm.js",
|
||||
"nexus\/global\/controllers\/forms\/ips.forms.businessAddressVat.js",
|
||||
"nexus\/global\/controllers\/gateways\/ips.gateways.authorizenet.js",
|
||||
"nexus\/global\/controllers\/gateways\/ips.gateways.braintree.js",
|
||||
"nexus\/global\/controllers\/gateways\/ips.gateways.stripe.js",
|
||||
"nexus\/global\/controllers\/gateways\/ips.gateways.stripeamex.js",
|
||||
"nexus\/global\/controllers\/gateways\/ips.gateways.stripepaymentrequest.js",
|
||||
"nexus\/admin\/controllers\/hosting\/ips.nexus.hosting.accountform.js",
|
||||
"nexus\/global\/controllers\/misc\/ips.misc.print.js",
|
||||
"nexus\/admin\/controllers\/notifications\/ips.notifications.pendingTransactions.js",
|
||||
"nexus\/admin\/controllers\/payments\/ips.payments.braintreeSetup.js",
|
||||
"nexus\/admin\/controllers\/store\/ips.store.productoptions.js",
|
||||
"nexus\/admin\/controllers\/store\/ips.store.productselector.js",
|
||||
"nexus\/front\/controllers\/store\/ips.store.cartReview.js",
|
||||
"nexus\/front\/controllers\/store\/ips.store.category.js",
|
||||
"nexus\/front\/controllers\/store\/ips.store.currencySelect.js",
|
||||
"nexus\/front\/controllers\/store\/ips.store.giftCard.js",
|
||||
"nexus\/front\/controllers\/store\/ips.store.packagePage.js",
|
||||
"nexus\/front\/controllers\/store\/ips.store.register.js",
|
||||
"nexus\/front\/controllers\/subscriptions\/ips.subscriptions.main.js",
|
||||
"nexus\/admin\/controllers\/support\/ips.support.emailsetup.js",
|
||||
"nexus\/admin\/controllers\/support\/ips.support.filterCheckboxSet.js",
|
||||
"nexus\/admin\/controllers\/support\/ips.support.list.js",
|
||||
"nexus\/admin\/controllers\/support\/ips.support.message.js",
|
||||
"nexus\/admin\/controllers\/support\/ips.support.metamenu.js",
|
||||
"nexus\/admin\/controllers\/support\/ips.support.multimod.js",
|
||||
"nexus\/admin\/controllers\/support\/ips.support.packageInfo.js",
|
||||
"nexus\/admin\/controllers\/support\/ips.support.pendingalert.js",
|
||||
"nexus\/admin\/controllers\/support\/ips.support.replyArea.js",
|
||||
"nexus\/admin\/controllers\/support\/ips.support.request.js",
|
||||
"nexus\/admin\/controllers\/support\/ips.support.splitForm.js",
|
||||
"nexus\/front\/controllers\/support\/ips.support.rate.js",
|
||||
"nexus\/admin\/templates\/ips.templates.store.js",
|
||||
"nexus\/front\/templates\/ips.templates.store.js",
|
||||
"nexus\/global\/templates\/ips.templates.gateways.js"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"orders": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"global\/\/dev\/js\/\/framework\/",
|
||||
"global\/\/dev\/js\/\/library\/",
|
||||
"global\/\/dev\/js\/\/library\/\/jquery",
|
||||
"global\/\/dev\/js\/\/library\/\/linkify"
|
||||
],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"normal": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"email_held_approval",
|
||||
"email_gateway_pending"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"js": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,291 @@
|
||||
{
|
||||
"html": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"admin\/billingagreements\/view",
|
||||
"front\/checkout\/changeShippingAddressForm",
|
||||
"front\/checkout\/checkoutOrderSummary",
|
||||
"front\/checkout\/checkoutShipping",
|
||||
"front\/checkout\/checkoutShippingForm",
|
||||
"front\/checkout\/checkoutWrapper",
|
||||
"front\/checkout\/confirmAndPay",
|
||||
"front\/checkout\/couponForm",
|
||||
"front\/checkout\/customerInformation",
|
||||
"front\/checkout\/customerInformationForm",
|
||||
"front\/checkout\/orderReview",
|
||||
"front\/checkout\/paymentForm",
|
||||
"front\/checkout\/transactionFail",
|
||||
"front\/checkout\/transactionGatewayPending",
|
||||
"front\/checkout\/transactionHold",
|
||||
"front\/checkout\/transactionOkay",
|
||||
"front\/checkout\/transactionWait",
|
||||
"front\/clients\/address",
|
||||
"front\/clients\/addresses",
|
||||
"front\/clients\/alternatives",
|
||||
"front\/clients\/billingAgreement",
|
||||
"front\/clients\/billingAgreements",
|
||||
"front\/clients\/cards",
|
||||
"front\/clients\/credit",
|
||||
"front\/clients\/donations",
|
||||
"front\/clients\/info",
|
||||
"front\/clients\/invoice",
|
||||
"front\/clients\/invoiceList",
|
||||
"front\/clients\/invoices",
|
||||
"front\/clients\/networkStatus",
|
||||
"front\/clients\/paymentLog",
|
||||
"front\/clients\/purchase",
|
||||
"front\/clients\/purchaseList",
|
||||
"front\/clients\/purchases",
|
||||
"admin\/customers\/accountInformation",
|
||||
"admin\/customers\/accountInformationOverview",
|
||||
"admin\/customers\/accountInformationTablePreview",
|
||||
"admin\/customers\/addressItem",
|
||||
"admin\/customers\/addressTable",
|
||||
"admin\/customers\/addressTableRows",
|
||||
"admin\/customers\/altContactsOverview",
|
||||
"admin\/customers\/altContactsOverviewRows",
|
||||
"admin\/customers\/billingAgreementsOverview",
|
||||
"admin\/customers\/billingAgreementsOverviewRows",
|
||||
"admin\/customers\/cardsOverview",
|
||||
"admin\/customers\/cardsOverviewRows",
|
||||
"admin\/customers\/cardsTable",
|
||||
"admin\/customers\/cardsTableRows",
|
||||
"admin\/customers\/customerPopup",
|
||||
"admin\/customers\/invoices",
|
||||
"admin\/customers\/invoicesTable",
|
||||
"admin\/customers\/invoicesTableRows",
|
||||
"admin\/customers\/logType",
|
||||
"admin\/customers\/notes",
|
||||
"admin\/customers\/notesBlock",
|
||||
"admin\/customers\/notesOverview",
|
||||
"admin\/customers\/notesOverviewRows",
|
||||
"admin\/customers\/numberOfPurchasesField",
|
||||
"admin\/customers\/parentAccounts",
|
||||
"admin\/customers\/purchases",
|
||||
"admin\/customers\/purchaseValueField",
|
||||
"admin\/customers\/standing",
|
||||
"admin\/customers\/support",
|
||||
"admin\/customers\/supportTable",
|
||||
"admin\/customers\/supportTableRows",
|
||||
"admin\/customers\/voidFails",
|
||||
"admin\/dashboard\/pendingActions",
|
||||
"admin\/discountforms\/bulk",
|
||||
"admin\/discountforms\/loyalty",
|
||||
"admin\/discountforms\/usergroup",
|
||||
"global\/forms\/addPaymentMethodForm",
|
||||
"global\/forms\/amexExpressCheckout",
|
||||
"global\/forms\/braintree",
|
||||
"global\/forms\/businessAddress",
|
||||
"global\/forms\/combined",
|
||||
"global\/forms\/creditCard",
|
||||
"global\/forms\/length",
|
||||
"global\/forms\/money",
|
||||
"global\/forms\/paymentRequestApi",
|
||||
"global\/forms\/renewalTerm",
|
||||
"global\/forms\/shipping",
|
||||
"global\/forms\/stateSelect",
|
||||
"global\/forms\/usernamePassword",
|
||||
"global\/forms\/usernamePasswordDisplay",
|
||||
"global\/forms\/weight",
|
||||
"front\/global\/commentTableHeader",
|
||||
"front\/global\/embedProduct",
|
||||
"front\/global\/embedProductReview",
|
||||
"front\/global\/referralRulesCommission",
|
||||
"front\/global\/searchResultProductSnippet",
|
||||
"admin\/global\/userLink",
|
||||
"admin\/global\/vatNumber",
|
||||
"admin\/hosting\/accountEditToggle",
|
||||
"admin\/hosting\/accountEditWarning",
|
||||
"admin\/hosting\/accountLink",
|
||||
"admin\/hosting\/audit",
|
||||
"front\/hosting\/ownDomainName",
|
||||
"admin\/hosting\/serverStatus",
|
||||
"admin\/hosting\/viewAccounts",
|
||||
"admin\/incomingemailsetup\/piping",
|
||||
"admin\/incomingemailsetup\/pop3",
|
||||
"admin\/incomingemailsetup\/sendgrid",
|
||||
"admin\/incomingemailsetup\/splash",
|
||||
"admin\/incomingemailsetup\/usingpop3",
|
||||
"admin\/invoices\/generate",
|
||||
"admin\/invoices\/invoiceTimeline",
|
||||
"admin\/invoices\/packageSelector",
|
||||
"admin\/invoices\/packageSelectorGroup",
|
||||
"admin\/invoices\/packageSelectorProduct",
|
||||
"global\/invoices\/printInvoice",
|
||||
"admin\/invoices\/shipmentsTable",
|
||||
"admin\/invoices\/shipmentsTableRows",
|
||||
"admin\/invoices\/status",
|
||||
"admin\/invoices\/transactionsTable",
|
||||
"admin\/invoices\/transactionsTableRows",
|
||||
"admin\/invoices\/unpaidConsequences",
|
||||
"admin\/invoices\/view",
|
||||
"admin\/livesearch\/customer",
|
||||
"admin\/livesearch\/hosting",
|
||||
"admin\/livesearch\/invoice",
|
||||
"admin\/livesearch\/licensekey",
|
||||
"admin\/livesearch\/more",
|
||||
"admin\/livesearch\/purchase",
|
||||
"admin\/livesearch\/support",
|
||||
"admin\/livesearch\/transaction",
|
||||
"admin\/notifications\/baCancellationError",
|
||||
"admin\/notifications\/paymentMethodError",
|
||||
"admin\/notifications\/support",
|
||||
"admin\/notifications\/transactions",
|
||||
"admin\/payouts\/maximumLimits",
|
||||
"admin\/payouts\/PayPal",
|
||||
"admin\/payouts\/status",
|
||||
"admin\/payouts\/view",
|
||||
"admin\/purchases\/advertisement",
|
||||
"front\/purchases\/advertisement",
|
||||
"admin\/purchases\/domain",
|
||||
"admin\/purchases\/giftVoucher",
|
||||
"front\/purchases\/giftvoucher",
|
||||
"front\/purchases\/giftvoucherPrint",
|
||||
"admin\/purchases\/hosting",
|
||||
"front\/purchases\/hosting",
|
||||
"front\/purchases\/hostingChangeDomain",
|
||||
"admin\/purchases\/hostingNoConnect",
|
||||
"front\/purchases\/hostingNoConnect",
|
||||
"admin\/purchases\/hostingSupport",
|
||||
"admin\/purchases\/hovercard",
|
||||
"admin\/purchases\/lkey",
|
||||
"admin\/purchases\/noLkey",
|
||||
"front\/purchases\/package",
|
||||
"admin\/purchases\/view",
|
||||
"admin\/shiporders\/easypostTest",
|
||||
"global\/shiporders\/packingLabel",
|
||||
"global\/shiporders\/packingSheet",
|
||||
"admin\/shiporders\/status",
|
||||
"admin\/shiporders\/view",
|
||||
"front\/store\/cart",
|
||||
"front\/store\/cartContents",
|
||||
"front\/store\/cartHeader",
|
||||
"front\/store\/cartHeaderMobile",
|
||||
"front\/store\/cartReview",
|
||||
"front\/store\/category",
|
||||
"front\/store\/categoryContents",
|
||||
"front\/store\/categorySidebar",
|
||||
"front\/store\/chooseCurrency",
|
||||
"admin\/store\/fraudRuleDesc",
|
||||
"front\/store\/giftCard",
|
||||
"front\/store\/giftCardForm",
|
||||
"front\/store\/index",
|
||||
"front\/store\/package",
|
||||
"front\/store\/packageBlock",
|
||||
"front\/store\/packageBlockPrice",
|
||||
"front\/store\/packageBlockWidget",
|
||||
"front\/store\/packageRow",
|
||||
"front\/store\/price",
|
||||
"front\/store\/priceDiscounted",
|
||||
"admin\/store\/productDeleteWarning",
|
||||
"admin\/store\/productOptions",
|
||||
"admin\/store\/productOptionsChanged",
|
||||
"admin\/store\/productOptionsTable",
|
||||
"admin\/store\/productRowHtml",
|
||||
"admin\/store\/productTaxWarning",
|
||||
"front\/store\/purchaseForm",
|
||||
"front\/store\/register",
|
||||
"front\/store\/reviews",
|
||||
"front\/store\/subscriptionPurchase",
|
||||
"admin\/subscription\/addMemberMessage",
|
||||
"front\/subscription\/clientArea",
|
||||
"admin\/subscription\/convert",
|
||||
"front\/subscription\/current",
|
||||
"admin\/subscription\/disabled",
|
||||
"front\/subscription\/profileSubscription",
|
||||
"front\/subscription\/row",
|
||||
"admin\/subscription\/rowHtml",
|
||||
"front\/subscription\/rows",
|
||||
"front\/subscription\/table",
|
||||
"front\/support\/create",
|
||||
"admin\/support\/feedback",
|
||||
"admin\/support\/filterForm",
|
||||
"admin\/support\/filterFormStream",
|
||||
"admin\/support\/filterFormTime",
|
||||
"admin\/support\/highlightSetting",
|
||||
"admin\/support\/latestFeedback",
|
||||
"admin\/support\/link",
|
||||
"admin\/support\/myDepartments",
|
||||
"admin\/support\/myHistory",
|
||||
"admin\/support\/noteForm",
|
||||
"front\/support\/pendingDone",
|
||||
"front\/support\/ratingValue",
|
||||
"admin\/support\/replyContainer",
|
||||
"front\/support\/replyContainer",
|
||||
"admin\/support\/request",
|
||||
"front\/support\/request",
|
||||
"admin\/support\/requestActions",
|
||||
"admin\/support\/requestHeader",
|
||||
"admin\/support\/requestHover",
|
||||
"front\/support\/requestList",
|
||||
"admin\/support\/requestPopup",
|
||||
"admin\/support\/requests",
|
||||
"admin\/support\/requestsTable",
|
||||
"admin\/support\/requestsTableResults",
|
||||
"admin\/support\/severities",
|
||||
"admin\/support\/staffReplyForm",
|
||||
"front\/support\/tableRows",
|
||||
"admin\/supportreports\/averageRatingCell",
|
||||
"admin\/supportreports\/supportReplyRows",
|
||||
"admin\/supportreports\/timeChart",
|
||||
"admin\/transactions\/braintreeData",
|
||||
"admin\/transactions\/braintreeDispute",
|
||||
"admin\/transactions\/dspd",
|
||||
"admin\/transactions\/fail",
|
||||
"admin\/transactions\/hold",
|
||||
"admin\/transactions\/okay",
|
||||
"admin\/transactions\/paypalStatus",
|
||||
"admin\/transactions\/prfd",
|
||||
"admin\/transactions\/revw",
|
||||
"admin\/transactions\/rfnd",
|
||||
"admin\/transactions\/status",
|
||||
"admin\/transactions\/stripeData",
|
||||
"admin\/transactions\/stripeDispute",
|
||||
"admin\/transactions\/undo_credit",
|
||||
"admin\/transactions\/view",
|
||||
"admin\/transactions\/wait",
|
||||
"front\/widgets\/bestSellers",
|
||||
"front\/widgets\/donations",
|
||||
"front\/widgets\/featuredProduct",
|
||||
"front\/widgets\/latestProducts",
|
||||
"front\/widgets\/pendingActions",
|
||||
"front\/widgets\/recentCommerceReviews",
|
||||
"front\/widgets\/subscriptions"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"css": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"front\/cart.css",
|
||||
"front\/checkout.css",
|
||||
"front\/clients.css",
|
||||
"admin\/customer_responsive.css",
|
||||
"admin\/customer.css",
|
||||
"front\/donations.css",
|
||||
"front\/embed.css",
|
||||
"admin\/invoice.css",
|
||||
"admin\/invoiceTimeline.css",
|
||||
"admin\/nexus.css",
|
||||
"front\/nexus.css",
|
||||
"admin\/purchases.css",
|
||||
"admin\/shipping.css",
|
||||
"front\/store_responsive.css",
|
||||
"front\/store.css",
|
||||
"front\/subscriptions.css",
|
||||
"admin\/support_responsive.css",
|
||||
"admin\/support.css",
|
||||
"admin\/transaction.css",
|
||||
"front\/widgets.css"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"resources": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"front\/cards\/venmo.svg",
|
||||
"front\/cards\/venmo_white.svg"
|
||||
],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106125,
|
||||
"name": "4.6.5.1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"added": [],
|
||||
"edited": [
|
||||
"staffReplyPending",
|
||||
"newInvoice",
|
||||
"acp_notification_Withdrawal",
|
||||
"invoiceWarning",
|
||||
"monitoring_reset",
|
||||
"monitoring_eom",
|
||||
"invoiceMarkedPaid",
|
||||
"unsubscribeStaffNotify",
|
||||
"acp_notification_Shipment",
|
||||
"transactionGatewayPending",
|
||||
"acp_notification_Advertisement",
|
||||
"staffNotifyNew",
|
||||
"staffNotifyNote",
|
||||
"staffAssignedReminder",
|
||||
"payoutComplete",
|
||||
"transactionApproved",
|
||||
"replyRequestLocked",
|
||||
"monitoring_panic",
|
||||
"staffNotifyReply",
|
||||
"transactionHeld",
|
||||
"transactionWaiting",
|
||||
"transactionFailed",
|
||||
"commissionRevoked",
|
||||
"transactionRefunded",
|
||||
"monitoring_acknowledged",
|
||||
"staffReply",
|
||||
"commissionEarned",
|
||||
"emailConfirmation",
|
||||
"autoresolveWarning",
|
||||
"invoiceNotify",
|
||||
"acp_notification_Transaction",
|
||||
"shipment",
|
||||
"purchaseNotify",
|
||||
"acp_notification_HostingError",
|
||||
"monitoring_offline",
|
||||
"giftVoucher",
|
||||
"monitoring_online",
|
||||
"staffReplyNoChrome"
|
||||
],
|
||||
"removed": []
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"files": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"nexus\/front\/controllers\/checkout\/ips.checkout.billingForm.js",
|
||||
"nexus\/global\/controllers\/forms\/ips.forms.businessAddressVat.js",
|
||||
"nexus\/global\/controllers\/gateways\/ips.gateways.authorizenet.js",
|
||||
"nexus\/global\/controllers\/gateways\/ips.gateways.braintree.js",
|
||||
"nexus\/global\/controllers\/gateways\/ips.gateways.stripe.js",
|
||||
"nexus\/admin\/controllers\/payments\/ips.payments.braintreeSetup.js",
|
||||
"nexus\/admin\/controllers\/store\/ips.store.productoptions.js",
|
||||
"nexus\/admin\/controllers\/store\/ips.store.productselector.js",
|
||||
"nexus\/front\/controllers\/store\/ips.store.category.js",
|
||||
"nexus\/front\/controllers\/store\/ips.store.giftCard.js",
|
||||
"nexus\/front\/controllers\/store\/ips.store.packagePage.js",
|
||||
"nexus\/front\/controllers\/store\/ips.store.register.js",
|
||||
"nexus\/admin\/controllers\/support\/ips.support.list.js",
|
||||
"nexus\/admin\/controllers\/support\/ips.support.message.js",
|
||||
"nexus\/admin\/controllers\/support\/ips.support.metamenu.js",
|
||||
"nexus\/admin\/controllers\/support\/ips.support.multimod.js",
|
||||
"nexus\/admin\/controllers\/support\/ips.support.replyArea.js",
|
||||
"nexus\/admin\/templates\/ips.templates.store.js",
|
||||
"nexus\/front\/templates\/ips.templates.store.js",
|
||||
"nexus\/global\/templates\/ips.templates.gateways.js"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"orders": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"normal": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"email_held_approval",
|
||||
"email_gateway_pending"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"js": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,279 @@
|
||||
{
|
||||
"html": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"admin\/billingagreements\/view",
|
||||
"front\/checkout\/changeShippingAddressForm",
|
||||
"front\/checkout\/checkoutOrderSummary",
|
||||
"front\/checkout\/checkoutShipping",
|
||||
"front\/checkout\/checkoutShippingForm",
|
||||
"front\/checkout\/checkoutWrapper",
|
||||
"front\/checkout\/confirmAndPay",
|
||||
"front\/checkout\/couponForm",
|
||||
"front\/checkout\/customerInformation",
|
||||
"front\/checkout\/customerInformationForm",
|
||||
"front\/checkout\/orderReview",
|
||||
"front\/checkout\/paymentForm",
|
||||
"front\/checkout\/transactionFail",
|
||||
"front\/checkout\/transactionGatewayPending",
|
||||
"front\/checkout\/transactionHold",
|
||||
"front\/checkout\/transactionOkay",
|
||||
"front\/checkout\/transactionWait",
|
||||
"front\/clients\/address",
|
||||
"front\/clients\/addresses",
|
||||
"front\/clients\/alternatives",
|
||||
"front\/clients\/billingAgreement",
|
||||
"front\/clients\/billingAgreements",
|
||||
"front\/clients\/cards",
|
||||
"front\/clients\/credit",
|
||||
"front\/clients\/donations",
|
||||
"front\/clients\/info",
|
||||
"front\/clients\/invoice",
|
||||
"front\/clients\/invoiceList",
|
||||
"front\/clients\/invoices",
|
||||
"front\/clients\/networkStatus",
|
||||
"front\/clients\/paymentLog",
|
||||
"front\/clients\/purchase",
|
||||
"front\/clients\/purchaseList",
|
||||
"front\/clients\/purchases",
|
||||
"admin\/customers\/accountInformation",
|
||||
"admin\/customers\/accountInformationOverview",
|
||||
"admin\/customers\/accountInformationTablePreview",
|
||||
"admin\/customers\/addressItem",
|
||||
"admin\/customers\/addressTable",
|
||||
"admin\/customers\/addressTableRows",
|
||||
"admin\/customers\/altContactsOverview",
|
||||
"admin\/customers\/altContactsOverviewRows",
|
||||
"admin\/customers\/billingAgreementsOverview",
|
||||
"admin\/customers\/billingAgreementsOverviewRows",
|
||||
"admin\/customers\/cardsOverview",
|
||||
"admin\/customers\/cardsOverviewRows",
|
||||
"admin\/customers\/cardsTable",
|
||||
"admin\/customers\/cardsTableRows",
|
||||
"admin\/customers\/customerPopup",
|
||||
"admin\/customers\/invoices",
|
||||
"admin\/customers\/invoicesTable",
|
||||
"admin\/customers\/invoicesTableRows",
|
||||
"admin\/customers\/logType",
|
||||
"admin\/customers\/notes",
|
||||
"admin\/customers\/notesBlock",
|
||||
"admin\/customers\/notesOverview",
|
||||
"admin\/customers\/notesOverviewRows",
|
||||
"admin\/customers\/numberOfPurchasesField",
|
||||
"admin\/customers\/parentAccounts",
|
||||
"admin\/customers\/purchases",
|
||||
"admin\/customers\/purchaseValueField",
|
||||
"admin\/customers\/standing",
|
||||
"admin\/customers\/support",
|
||||
"admin\/customers\/supportTable",
|
||||
"admin\/customers\/supportTableRows",
|
||||
"admin\/customers\/voidFails",
|
||||
"admin\/dashboard\/pendingActions",
|
||||
"admin\/discountforms\/bulk",
|
||||
"admin\/discountforms\/loyalty",
|
||||
"admin\/discountforms\/usergroup",
|
||||
"global\/forms\/addPaymentMethodForm",
|
||||
"global\/forms\/amexExpressCheckout",
|
||||
"global\/forms\/braintree",
|
||||
"global\/forms\/businessAddress",
|
||||
"global\/forms\/combined",
|
||||
"global\/forms\/creditCard",
|
||||
"global\/forms\/length",
|
||||
"global\/forms\/money",
|
||||
"global\/forms\/paymentRequestApi",
|
||||
"global\/forms\/renewalTerm",
|
||||
"global\/forms\/shipping",
|
||||
"global\/forms\/stateSelect",
|
||||
"global\/forms\/usernamePassword",
|
||||
"global\/forms\/usernamePasswordDisplay",
|
||||
"global\/forms\/weight",
|
||||
"front\/global\/commentTableHeader",
|
||||
"front\/global\/embedProduct",
|
||||
"front\/global\/embedProductReview",
|
||||
"front\/global\/referralRulesCommission",
|
||||
"front\/global\/searchResultProductSnippet",
|
||||
"admin\/global\/userLink",
|
||||
"admin\/global\/vatNumber",
|
||||
"admin\/hosting\/accountEditToggle",
|
||||
"admin\/hosting\/accountEditWarning",
|
||||
"admin\/hosting\/accountLink",
|
||||
"admin\/hosting\/audit",
|
||||
"front\/hosting\/ownDomainName",
|
||||
"admin\/hosting\/serverStatus",
|
||||
"admin\/hosting\/viewAccounts",
|
||||
"admin\/incomingemailsetup\/piping",
|
||||
"admin\/incomingemailsetup\/pop3",
|
||||
"admin\/incomingemailsetup\/sendgrid",
|
||||
"admin\/incomingemailsetup\/splash",
|
||||
"admin\/incomingemailsetup\/usingpop3",
|
||||
"admin\/invoices\/generate",
|
||||
"admin\/invoices\/invoiceTimeline",
|
||||
"admin\/invoices\/packageSelector",
|
||||
"admin\/invoices\/packageSelectorGroup",
|
||||
"admin\/invoices\/packageSelectorProduct",
|
||||
"global\/invoices\/printInvoice",
|
||||
"admin\/invoices\/shipmentsTable",
|
||||
"admin\/invoices\/shipmentsTableRows",
|
||||
"admin\/invoices\/status",
|
||||
"admin\/invoices\/transactionsTable",
|
||||
"admin\/invoices\/transactionsTableRows",
|
||||
"admin\/invoices\/unpaidConsequences",
|
||||
"admin\/invoices\/view",
|
||||
"admin\/livesearch\/customer",
|
||||
"admin\/livesearch\/hosting",
|
||||
"admin\/livesearch\/invoice",
|
||||
"admin\/livesearch\/licensekey",
|
||||
"admin\/livesearch\/more",
|
||||
"admin\/livesearch\/purchase",
|
||||
"admin\/livesearch\/support",
|
||||
"admin\/livesearch\/transaction",
|
||||
"admin\/notifications\/baCancellationError",
|
||||
"admin\/notifications\/paymentMethodError",
|
||||
"admin\/notifications\/support",
|
||||
"admin\/notifications\/transactions",
|
||||
"admin\/payouts\/maximumLimits",
|
||||
"admin\/payouts\/PayPal",
|
||||
"admin\/payouts\/status",
|
||||
"admin\/payouts\/view",
|
||||
"admin\/purchases\/advertisement",
|
||||
"front\/purchases\/advertisement",
|
||||
"admin\/purchases\/domain",
|
||||
"admin\/purchases\/giftVoucher",
|
||||
"front\/purchases\/giftvoucher",
|
||||
"front\/purchases\/giftvoucherPrint",
|
||||
"admin\/purchases\/hosting",
|
||||
"front\/purchases\/hosting",
|
||||
"front\/purchases\/hostingChangeDomain",
|
||||
"admin\/purchases\/hostingNoConnect",
|
||||
"front\/purchases\/hostingNoConnect",
|
||||
"admin\/purchases\/hostingSupport",
|
||||
"admin\/purchases\/hovercard",
|
||||
"admin\/purchases\/lkey",
|
||||
"admin\/purchases\/noLkey",
|
||||
"front\/purchases\/package",
|
||||
"admin\/purchases\/view",
|
||||
"admin\/shiporders\/easypostTest",
|
||||
"global\/shiporders\/packingLabel",
|
||||
"global\/shiporders\/packingSheet",
|
||||
"admin\/shiporders\/status",
|
||||
"admin\/shiporders\/view",
|
||||
"front\/store\/cart",
|
||||
"front\/store\/cartContents",
|
||||
"front\/store\/cartHeader",
|
||||
"front\/store\/cartHeaderMobile",
|
||||
"front\/store\/cartReview",
|
||||
"front\/store\/category",
|
||||
"front\/store\/categoryContents",
|
||||
"front\/store\/categorySidebar",
|
||||
"front\/store\/chooseCurrency",
|
||||
"admin\/store\/fraudRuleDesc",
|
||||
"front\/store\/giftCard",
|
||||
"front\/store\/giftCardForm",
|
||||
"front\/store\/index",
|
||||
"front\/store\/package",
|
||||
"front\/store\/packageBlock",
|
||||
"front\/store\/packageBlockPrice",
|
||||
"front\/store\/packageBlockWidget",
|
||||
"front\/store\/packageRow",
|
||||
"front\/store\/price",
|
||||
"front\/store\/priceDiscounted",
|
||||
"admin\/store\/productDeleteWarning",
|
||||
"admin\/store\/productOptions",
|
||||
"admin\/store\/productOptionsChanged",
|
||||
"admin\/store\/productOptionsTable",
|
||||
"admin\/store\/productRowHtml",
|
||||
"admin\/store\/productTaxWarning",
|
||||
"front\/store\/purchaseForm",
|
||||
"front\/store\/register",
|
||||
"front\/store\/reviews",
|
||||
"front\/store\/subscriptionPurchase",
|
||||
"admin\/subscription\/addMemberMessage",
|
||||
"front\/subscription\/clientArea",
|
||||
"admin\/subscription\/convert",
|
||||
"front\/subscription\/current",
|
||||
"admin\/subscription\/disabled",
|
||||
"front\/subscription\/profileSubscription",
|
||||
"front\/subscription\/row",
|
||||
"admin\/subscription\/rowHtml",
|
||||
"front\/subscription\/rows",
|
||||
"front\/subscription\/table",
|
||||
"front\/support\/create",
|
||||
"admin\/support\/feedback",
|
||||
"admin\/support\/filterForm",
|
||||
"admin\/support\/filterFormStream",
|
||||
"admin\/support\/filterFormTime",
|
||||
"admin\/support\/highlightSetting",
|
||||
"admin\/support\/latestFeedback",
|
||||
"admin\/support\/link",
|
||||
"admin\/support\/myDepartments",
|
||||
"admin\/support\/myHistory",
|
||||
"admin\/support\/noteForm",
|
||||
"front\/support\/pendingDone",
|
||||
"front\/support\/ratingValue",
|
||||
"admin\/support\/replyContainer",
|
||||
"front\/support\/replyContainer",
|
||||
"admin\/support\/request",
|
||||
"front\/support\/request",
|
||||
"admin\/support\/requestActions",
|
||||
"admin\/support\/requestHeader",
|
||||
"admin\/support\/requestHover",
|
||||
"front\/support\/requestList",
|
||||
"admin\/support\/requestPopup",
|
||||
"admin\/support\/requests",
|
||||
"admin\/support\/requestsTable",
|
||||
"admin\/support\/requestsTableResults",
|
||||
"admin\/support\/severities",
|
||||
"admin\/support\/staffReplyForm",
|
||||
"front\/support\/tableRows",
|
||||
"admin\/supportreports\/averageRatingCell",
|
||||
"admin\/supportreports\/supportReplyRows",
|
||||
"admin\/supportreports\/timeChart",
|
||||
"admin\/transactions\/braintreeData",
|
||||
"admin\/transactions\/braintreeDispute",
|
||||
"admin\/transactions\/dspd",
|
||||
"admin\/transactions\/fail",
|
||||
"admin\/transactions\/hold",
|
||||
"admin\/transactions\/okay",
|
||||
"admin\/transactions\/paypalStatus",
|
||||
"admin\/transactions\/prfd",
|
||||
"admin\/transactions\/revw",
|
||||
"admin\/transactions\/rfnd",
|
||||
"admin\/transactions\/status",
|
||||
"admin\/transactions\/stripeData",
|
||||
"admin\/transactions\/stripeDispute",
|
||||
"admin\/transactions\/undo_credit",
|
||||
"admin\/transactions\/view",
|
||||
"admin\/transactions\/wait",
|
||||
"front\/widgets\/bestSellers",
|
||||
"front\/widgets\/donations",
|
||||
"front\/widgets\/featuredProduct",
|
||||
"front\/widgets\/latestProducts",
|
||||
"front\/widgets\/pendingActions",
|
||||
"front\/widgets\/recentCommerceReviews",
|
||||
"front\/widgets\/subscriptions"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"css": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"front\/checkout.css",
|
||||
"front\/clients.css",
|
||||
"admin\/customer_responsive.css",
|
||||
"admin\/customer.css",
|
||||
"admin\/invoice.css",
|
||||
"admin\/nexus.css",
|
||||
"front\/nexus.css",
|
||||
"front\/store.css",
|
||||
"admin\/support_responsive.css",
|
||||
"admin\/support.css",
|
||||
"front\/widgets.css"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"resources": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106126,
|
||||
"name": "4.6.5.1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"added": [],
|
||||
"edited": [
|
||||
"staffReplyPending",
|
||||
"newInvoice",
|
||||
"acp_notification_Withdrawal",
|
||||
"invoiceWarning",
|
||||
"monitoring_reset",
|
||||
"monitoring_eom",
|
||||
"invoiceMarkedPaid",
|
||||
"unsubscribeStaffNotify",
|
||||
"acp_notification_Shipment",
|
||||
"transactionGatewayPending",
|
||||
"acp_notification_Advertisement",
|
||||
"staffNotifyNew",
|
||||
"staffNotifyNote",
|
||||
"staffAssignedReminder",
|
||||
"payoutComplete",
|
||||
"transactionApproved",
|
||||
"replyRequestLocked",
|
||||
"monitoring_panic",
|
||||
"staffNotifyReply",
|
||||
"transactionHeld",
|
||||
"transactionWaiting",
|
||||
"transactionFailed",
|
||||
"commissionRevoked",
|
||||
"transactionRefunded",
|
||||
"monitoring_acknowledged",
|
||||
"staffReply",
|
||||
"commissionEarned",
|
||||
"emailConfirmation",
|
||||
"autoresolveWarning",
|
||||
"invoiceNotify",
|
||||
"acp_notification_Transaction",
|
||||
"shipment",
|
||||
"purchaseNotify",
|
||||
"acp_notification_HostingError",
|
||||
"monitoring_offline",
|
||||
"giftVoucher",
|
||||
"monitoring_online",
|
||||
"staffReplyNoChrome"
|
||||
],
|
||||
"removed": []
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"files": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"nexus\/front\/controllers\/checkout\/ips.checkout.billingForm.js",
|
||||
"nexus\/global\/controllers\/forms\/ips.forms.businessAddressVat.js",
|
||||
"nexus\/global\/controllers\/gateways\/ips.gateways.authorizenet.js",
|
||||
"nexus\/global\/controllers\/gateways\/ips.gateways.braintree.js",
|
||||
"nexus\/global\/controllers\/gateways\/ips.gateways.stripe.js",
|
||||
"nexus\/admin\/controllers\/payments\/ips.payments.braintreeSetup.js",
|
||||
"nexus\/admin\/controllers\/store\/ips.store.productoptions.js",
|
||||
"nexus\/admin\/controllers\/store\/ips.store.productselector.js",
|
||||
"nexus\/front\/controllers\/store\/ips.store.category.js",
|
||||
"nexus\/front\/controllers\/store\/ips.store.giftCard.js",
|
||||
"nexus\/front\/controllers\/store\/ips.store.packagePage.js",
|
||||
"nexus\/front\/controllers\/store\/ips.store.register.js",
|
||||
"nexus\/admin\/controllers\/support\/ips.support.list.js",
|
||||
"nexus\/admin\/controllers\/support\/ips.support.message.js",
|
||||
"nexus\/admin\/controllers\/support\/ips.support.metamenu.js",
|
||||
"nexus\/admin\/controllers\/support\/ips.support.multimod.js",
|
||||
"nexus\/admin\/controllers\/support\/ips.support.replyArea.js",
|
||||
"nexus\/admin\/templates\/ips.templates.store.js",
|
||||
"nexus\/front\/templates\/ips.templates.store.js",
|
||||
"nexus\/global\/templates\/ips.templates.gateways.js"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"orders": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"normal": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"email_held_approval",
|
||||
"email_gateway_pending"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"js": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,279 @@
|
||||
{
|
||||
"html": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"admin\/billingagreements\/view",
|
||||
"front\/checkout\/changeShippingAddressForm",
|
||||
"front\/checkout\/checkoutOrderSummary",
|
||||
"front\/checkout\/checkoutShipping",
|
||||
"front\/checkout\/checkoutShippingForm",
|
||||
"front\/checkout\/checkoutWrapper",
|
||||
"front\/checkout\/confirmAndPay",
|
||||
"front\/checkout\/couponForm",
|
||||
"front\/checkout\/customerInformation",
|
||||
"front\/checkout\/customerInformationForm",
|
||||
"front\/checkout\/orderReview",
|
||||
"front\/checkout\/paymentForm",
|
||||
"front\/checkout\/transactionFail",
|
||||
"front\/checkout\/transactionGatewayPending",
|
||||
"front\/checkout\/transactionHold",
|
||||
"front\/checkout\/transactionOkay",
|
||||
"front\/checkout\/transactionWait",
|
||||
"front\/clients\/address",
|
||||
"front\/clients\/addresses",
|
||||
"front\/clients\/alternatives",
|
||||
"front\/clients\/billingAgreement",
|
||||
"front\/clients\/billingAgreements",
|
||||
"front\/clients\/cards",
|
||||
"front\/clients\/credit",
|
||||
"front\/clients\/donations",
|
||||
"front\/clients\/info",
|
||||
"front\/clients\/invoice",
|
||||
"front\/clients\/invoiceList",
|
||||
"front\/clients\/invoices",
|
||||
"front\/clients\/networkStatus",
|
||||
"front\/clients\/paymentLog",
|
||||
"front\/clients\/purchase",
|
||||
"front\/clients\/purchaseList",
|
||||
"front\/clients\/purchases",
|
||||
"admin\/customers\/accountInformation",
|
||||
"admin\/customers\/accountInformationOverview",
|
||||
"admin\/customers\/accountInformationTablePreview",
|
||||
"admin\/customers\/addressItem",
|
||||
"admin\/customers\/addressTable",
|
||||
"admin\/customers\/addressTableRows",
|
||||
"admin\/customers\/altContactsOverview",
|
||||
"admin\/customers\/altContactsOverviewRows",
|
||||
"admin\/customers\/billingAgreementsOverview",
|
||||
"admin\/customers\/billingAgreementsOverviewRows",
|
||||
"admin\/customers\/cardsOverview",
|
||||
"admin\/customers\/cardsOverviewRows",
|
||||
"admin\/customers\/cardsTable",
|
||||
"admin\/customers\/cardsTableRows",
|
||||
"admin\/customers\/customerPopup",
|
||||
"admin\/customers\/invoices",
|
||||
"admin\/customers\/invoicesTable",
|
||||
"admin\/customers\/invoicesTableRows",
|
||||
"admin\/customers\/logType",
|
||||
"admin\/customers\/notes",
|
||||
"admin\/customers\/notesBlock",
|
||||
"admin\/customers\/notesOverview",
|
||||
"admin\/customers\/notesOverviewRows",
|
||||
"admin\/customers\/numberOfPurchasesField",
|
||||
"admin\/customers\/parentAccounts",
|
||||
"admin\/customers\/purchases",
|
||||
"admin\/customers\/purchaseValueField",
|
||||
"admin\/customers\/standing",
|
||||
"admin\/customers\/support",
|
||||
"admin\/customers\/supportTable",
|
||||
"admin\/customers\/supportTableRows",
|
||||
"admin\/customers\/voidFails",
|
||||
"admin\/dashboard\/pendingActions",
|
||||
"admin\/discountforms\/bulk",
|
||||
"admin\/discountforms\/loyalty",
|
||||
"admin\/discountforms\/usergroup",
|
||||
"global\/forms\/addPaymentMethodForm",
|
||||
"global\/forms\/amexExpressCheckout",
|
||||
"global\/forms\/braintree",
|
||||
"global\/forms\/businessAddress",
|
||||
"global\/forms\/combined",
|
||||
"global\/forms\/creditCard",
|
||||
"global\/forms\/length",
|
||||
"global\/forms\/money",
|
||||
"global\/forms\/paymentRequestApi",
|
||||
"global\/forms\/renewalTerm",
|
||||
"global\/forms\/shipping",
|
||||
"global\/forms\/stateSelect",
|
||||
"global\/forms\/usernamePassword",
|
||||
"global\/forms\/usernamePasswordDisplay",
|
||||
"global\/forms\/weight",
|
||||
"front\/global\/commentTableHeader",
|
||||
"front\/global\/embedProduct",
|
||||
"front\/global\/embedProductReview",
|
||||
"front\/global\/referralRulesCommission",
|
||||
"front\/global\/searchResultProductSnippet",
|
||||
"admin\/global\/userLink",
|
||||
"admin\/global\/vatNumber",
|
||||
"admin\/hosting\/accountEditToggle",
|
||||
"admin\/hosting\/accountEditWarning",
|
||||
"admin\/hosting\/accountLink",
|
||||
"admin\/hosting\/audit",
|
||||
"front\/hosting\/ownDomainName",
|
||||
"admin\/hosting\/serverStatus",
|
||||
"admin\/hosting\/viewAccounts",
|
||||
"admin\/incomingemailsetup\/piping",
|
||||
"admin\/incomingemailsetup\/pop3",
|
||||
"admin\/incomingemailsetup\/sendgrid",
|
||||
"admin\/incomingemailsetup\/splash",
|
||||
"admin\/incomingemailsetup\/usingpop3",
|
||||
"admin\/invoices\/generate",
|
||||
"admin\/invoices\/invoiceTimeline",
|
||||
"admin\/invoices\/packageSelector",
|
||||
"admin\/invoices\/packageSelectorGroup",
|
||||
"admin\/invoices\/packageSelectorProduct",
|
||||
"global\/invoices\/printInvoice",
|
||||
"admin\/invoices\/shipmentsTable",
|
||||
"admin\/invoices\/shipmentsTableRows",
|
||||
"admin\/invoices\/status",
|
||||
"admin\/invoices\/transactionsTable",
|
||||
"admin\/invoices\/transactionsTableRows",
|
||||
"admin\/invoices\/unpaidConsequences",
|
||||
"admin\/invoices\/view",
|
||||
"admin\/livesearch\/customer",
|
||||
"admin\/livesearch\/hosting",
|
||||
"admin\/livesearch\/invoice",
|
||||
"admin\/livesearch\/licensekey",
|
||||
"admin\/livesearch\/more",
|
||||
"admin\/livesearch\/purchase",
|
||||
"admin\/livesearch\/support",
|
||||
"admin\/livesearch\/transaction",
|
||||
"admin\/notifications\/baCancellationError",
|
||||
"admin\/notifications\/paymentMethodError",
|
||||
"admin\/notifications\/support",
|
||||
"admin\/notifications\/transactions",
|
||||
"admin\/payouts\/maximumLimits",
|
||||
"admin\/payouts\/PayPal",
|
||||
"admin\/payouts\/status",
|
||||
"admin\/payouts\/view",
|
||||
"admin\/purchases\/advertisement",
|
||||
"front\/purchases\/advertisement",
|
||||
"admin\/purchases\/domain",
|
||||
"admin\/purchases\/giftVoucher",
|
||||
"front\/purchases\/giftvoucher",
|
||||
"front\/purchases\/giftvoucherPrint",
|
||||
"admin\/purchases\/hosting",
|
||||
"front\/purchases\/hosting",
|
||||
"front\/purchases\/hostingChangeDomain",
|
||||
"admin\/purchases\/hostingNoConnect",
|
||||
"front\/purchases\/hostingNoConnect",
|
||||
"admin\/purchases\/hostingSupport",
|
||||
"admin\/purchases\/hovercard",
|
||||
"admin\/purchases\/lkey",
|
||||
"admin\/purchases\/noLkey",
|
||||
"front\/purchases\/package",
|
||||
"admin\/purchases\/view",
|
||||
"admin\/shiporders\/easypostTest",
|
||||
"global\/shiporders\/packingLabel",
|
||||
"global\/shiporders\/packingSheet",
|
||||
"admin\/shiporders\/status",
|
||||
"admin\/shiporders\/view",
|
||||
"front\/store\/cart",
|
||||
"front\/store\/cartContents",
|
||||
"front\/store\/cartHeader",
|
||||
"front\/store\/cartHeaderMobile",
|
||||
"front\/store\/cartReview",
|
||||
"front\/store\/category",
|
||||
"front\/store\/categoryContents",
|
||||
"front\/store\/categorySidebar",
|
||||
"front\/store\/chooseCurrency",
|
||||
"admin\/store\/fraudRuleDesc",
|
||||
"front\/store\/giftCard",
|
||||
"front\/store\/giftCardForm",
|
||||
"front\/store\/index",
|
||||
"front\/store\/package",
|
||||
"front\/store\/packageBlock",
|
||||
"front\/store\/packageBlockPrice",
|
||||
"front\/store\/packageBlockWidget",
|
||||
"front\/store\/packageRow",
|
||||
"front\/store\/price",
|
||||
"front\/store\/priceDiscounted",
|
||||
"admin\/store\/productDeleteWarning",
|
||||
"admin\/store\/productOptions",
|
||||
"admin\/store\/productOptionsChanged",
|
||||
"admin\/store\/productOptionsTable",
|
||||
"admin\/store\/productRowHtml",
|
||||
"admin\/store\/productTaxWarning",
|
||||
"front\/store\/purchaseForm",
|
||||
"front\/store\/register",
|
||||
"front\/store\/reviews",
|
||||
"front\/store\/subscriptionPurchase",
|
||||
"admin\/subscription\/addMemberMessage",
|
||||
"front\/subscription\/clientArea",
|
||||
"admin\/subscription\/convert",
|
||||
"front\/subscription\/current",
|
||||
"admin\/subscription\/disabled",
|
||||
"front\/subscription\/profileSubscription",
|
||||
"front\/subscription\/row",
|
||||
"admin\/subscription\/rowHtml",
|
||||
"front\/subscription\/rows",
|
||||
"front\/subscription\/table",
|
||||
"front\/support\/create",
|
||||
"admin\/support\/feedback",
|
||||
"admin\/support\/filterForm",
|
||||
"admin\/support\/filterFormStream",
|
||||
"admin\/support\/filterFormTime",
|
||||
"admin\/support\/highlightSetting",
|
||||
"admin\/support\/latestFeedback",
|
||||
"admin\/support\/link",
|
||||
"admin\/support\/myDepartments",
|
||||
"admin\/support\/myHistory",
|
||||
"admin\/support\/noteForm",
|
||||
"front\/support\/pendingDone",
|
||||
"front\/support\/ratingValue",
|
||||
"admin\/support\/replyContainer",
|
||||
"front\/support\/replyContainer",
|
||||
"admin\/support\/request",
|
||||
"front\/support\/request",
|
||||
"admin\/support\/requestActions",
|
||||
"admin\/support\/requestHeader",
|
||||
"admin\/support\/requestHover",
|
||||
"front\/support\/requestList",
|
||||
"admin\/support\/requestPopup",
|
||||
"admin\/support\/requests",
|
||||
"admin\/support\/requestsTable",
|
||||
"admin\/support\/requestsTableResults",
|
||||
"admin\/support\/severities",
|
||||
"admin\/support\/staffReplyForm",
|
||||
"front\/support\/tableRows",
|
||||
"admin\/supportreports\/averageRatingCell",
|
||||
"admin\/supportreports\/supportReplyRows",
|
||||
"admin\/supportreports\/timeChart",
|
||||
"admin\/transactions\/braintreeData",
|
||||
"admin\/transactions\/braintreeDispute",
|
||||
"admin\/transactions\/dspd",
|
||||
"admin\/transactions\/fail",
|
||||
"admin\/transactions\/hold",
|
||||
"admin\/transactions\/okay",
|
||||
"admin\/transactions\/paypalStatus",
|
||||
"admin\/transactions\/prfd",
|
||||
"admin\/transactions\/revw",
|
||||
"admin\/transactions\/rfnd",
|
||||
"admin\/transactions\/status",
|
||||
"admin\/transactions\/stripeData",
|
||||
"admin\/transactions\/stripeDispute",
|
||||
"admin\/transactions\/undo_credit",
|
||||
"admin\/transactions\/view",
|
||||
"admin\/transactions\/wait",
|
||||
"front\/widgets\/bestSellers",
|
||||
"front\/widgets\/donations",
|
||||
"front\/widgets\/featuredProduct",
|
||||
"front\/widgets\/latestProducts",
|
||||
"front\/widgets\/pendingActions",
|
||||
"front\/widgets\/recentCommerceReviews",
|
||||
"front\/widgets\/subscriptions"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"css": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"front\/checkout.css",
|
||||
"front\/clients.css",
|
||||
"admin\/customer_responsive.css",
|
||||
"admin\/customer.css",
|
||||
"admin\/invoice.css",
|
||||
"admin\/nexus.css",
|
||||
"front\/nexus.css",
|
||||
"front\/store.css",
|
||||
"admin\/support_responsive.css",
|
||||
"admin\/support.css",
|
||||
"front\/widgets.css"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"resources": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106127,
|
||||
"name": "4.6.5.1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106128,
|
||||
"name": "4.6.5.1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": true,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"html": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
},
|
||||
"css": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"front\/cart.css",
|
||||
"front\/donations.css",
|
||||
"front\/embed.css",
|
||||
"admin\/invoiceTimeline.css",
|
||||
"admin\/purchases.css",
|
||||
"admin\/shipping.css",
|
||||
"front\/store_responsive.css",
|
||||
"front\/subscriptions.css",
|
||||
"admin\/transaction.css"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"resources": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"front\/cards\/venmo_white.svg",
|
||||
"front\/cards\/venmo.svg"
|
||||
],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106129,
|
||||
"name": "4.6.5.1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106130,
|
||||
"name": "4.6.5.1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106131,
|
||||
"name": "4.6.5.1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106132,
|
||||
"name": "4.6.6",
|
||||
"steps": {
|
||||
"queries": true,
|
||||
"lang": true,
|
||||
"theme": true,
|
||||
"themeSettings": false,
|
||||
"javascript": true,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"files": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"nexus\/global\/controllers\/gateways\/ips.gateways.stripe.js"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"orders": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"normal": {
|
||||
"added": [
|
||||
"stripe_address_postal_code_check_unchecked",
|
||||
"stripe_address_postal_code_check_unavailable",
|
||||
"stripe_address_postal_code_check_pass",
|
||||
"stripe_address_postal_code_check_fail"
|
||||
],
|
||||
"edited": [],
|
||||
"removed": [
|
||||
"stripe_address_zip_check_unchecked",
|
||||
"stripe_address_zip_check_unavailable",
|
||||
"stripe_address_zip_check_pass",
|
||||
"stripe_address_zip_check_fail"
|
||||
]
|
||||
},
|
||||
"js": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"1": {
|
||||
"method": "changeColumn",
|
||||
"params": [
|
||||
"nexus_ship_orders",
|
||||
"o_api",
|
||||
{
|
||||
"name": "o_api",
|
||||
"type": "VARCHAR",
|
||||
"length": 255,
|
||||
"decimals": null,
|
||||
"values": [],
|
||||
"allow_null": false,
|
||||
"default": "",
|
||||
"comment": "",
|
||||
"unsigned": false,
|
||||
"auto_increment": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"2": {
|
||||
"method": "changeColumn",
|
||||
"params": [
|
||||
"nexus_ship_orders",
|
||||
"o_api_service",
|
||||
{
|
||||
"name": "o_api_service",
|
||||
"type": "VARCHAR",
|
||||
"length": 255,
|
||||
"decimals": null,
|
||||
"values": [],
|
||||
"allow_null": false,
|
||||
"default": "",
|
||||
"comment": "",
|
||||
"unsigned": false,
|
||||
"auto_increment": false
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"html": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"front\/subscription\/row",
|
||||
"admin\/transactions\/stripeData"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"css": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
},
|
||||
"resources": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106133,
|
||||
"name": "4.6.6",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106134,
|
||||
"name": "4.6.7 Beta 1",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": true,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"normal": {
|
||||
"added": [
|
||||
"renew_payment_no_ba"
|
||||
],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
},
|
||||
"js": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106135,
|
||||
"name": "4.6.7 Beta 2",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106136,
|
||||
"name": "4.6.7",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106137,
|
||||
"name": "4.6.7",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": false,
|
||||
"theme": false,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": true,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"added": [],
|
||||
"edited": [
|
||||
"shipment"
|
||||
],
|
||||
"removed": []
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 106138,
|
||||
"name": "4.6.8 Beta 1",
|
||||
"steps": {
|
||||
"queries": true,
|
||||
"lang": true,
|
||||
"theme": true,
|
||||
"themeSettings": false,
|
||||
"javascript": true,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
Loaded 100 of 1933 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user