Version 4.6.0
This commit is contained in:
1 parent
f79dcf067a
commit
517a5e1f70
2036 files changed
+110041
-26162
No files matched your search
@@ -4,5 +4,6 @@
|
||||
"app_directory": "nexus",
|
||||
"app_protected": 0,
|
||||
"app_website": null,
|
||||
"app_update_check": null
|
||||
"app_update_check": null,
|
||||
"app_hide_tab": 0
|
||||
}
|
||||
@@ -24,6 +24,8 @@
|
||||
<task frequency="P0Y0M1DT0H0M0S">terminateHosting</task>
|
||||
<task frequency="P0Y0M0DT0H30M0S">expectedOutputMonitoring</task>
|
||||
<task frequency="P0Y0M1DT0H0M0S">cartCleanup</task>
|
||||
<task frequency="P0Y0M0DT0H10M0S">billingAgreements</task>
|
||||
<task frequency="P0Y0M0DT0H10M0S">gatewayPending</task>
|
||||
<setting key="billing_agreement_gateways"><![CDATA[{"key":"billing_agreement_gateways","default":"0","report":"bool"}]]></setting>
|
||||
<setting key="card_storage_gateways"><![CDATA[{"key":"card_storage_gateways","default":"0","report":"bool"}]]></setting>
|
||||
<setting key="cm_invoice_expireafter"><![CDATA[{"key":"cm_invoice_expireafter","default":"30","report":"full"}]]></setting>
|
||||
@@ -96,6 +98,7 @@
|
||||
<setting key="nexus_payout_max"><![CDATA[{"key":"nexus_payout_max","default":"","report":"bool"}]]></setting>
|
||||
<setting key="nexus_payout_max_period"><![CDATA[{"key":"nexus_payout_max_period","default":"[\"1\",\"day\"]","report":"bool"}]]></setting>
|
||||
<setting key="nexus_payout_min"><![CDATA[{"key":"nexus_payout_min","default":"","report":"bool"}]]></setting>
|
||||
<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>
|
||||
@@ -223,11 +226,11 @@
|
||||
<acpsearch key="app=nexus&module=support&controller=settings&tab=statuses"><![CDATA[{"lang_key":"statuses","restriction":"settings_manage","keywords":["closed","open","resolved","statuses","tags"]}]]></acpsearch>
|
||||
<acpsearch key="app=nexus&module=support&controller=settings&tab=stockactions"><![CDATA[{"lang_key":"stock_actions","restriction":"stockactions_manage","keywords":["defined","pre defined","pre set","predefined","preset","stock","stock actions","stock messages","stock replies"]}]]></acpsearch>
|
||||
<acpsearch key="app=nexus&module=support&controller=volume"><![CDATA[{"lang_key":"menu__nexus_support_volume","restriction":"volume_manage","keywords":["new ticket stats","support statistics","support stats"]}]]></acpsearch>
|
||||
<hook key="clientAreaLinkLoad"><![CDATA[{"type":"C","class":"\\IPS\\Data\\Store\\Database"}]]></hook>
|
||||
<hook key="clientAreaLink"><![CDATA[{"type":"S","class":"\\IPS\\Theme\\class_core_front_global"}]]></hook>
|
||||
<hook key="frontDispatcher"><![CDATA[{"type":"C","class":"\\IPS\\Dispatcher\\Front"}]]></hook>
|
||||
<hook key="DispatcherAdmin"><![CDATA[{"type":"C","class":"\\IPS\\Dispatcher\\Admin"}]]></hook>
|
||||
<hook key="clientAreaLinkLoad"><![CDATA[{"type":"C","class":"\\IPS\\Data\\Store\\Database"}]]></hook>
|
||||
<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>
|
||||
<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":11,"sc_condition":null}]]></themesetting>
|
||||
<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>
|
||||
@@ -1,8 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<emails><template><template_app>nexus</template_app><template_name>staffReplyPending</template_name><template_content_html><![CDATA[{$email->language->addToStack("your_reply_is_pending", FALSE)}<br />
|
||||
<br />
|
||||
<a href='{expression="\IPS\Settings::i()->base_url"}applications/nexus/interface/email/sendDiscard.php?id={$message->id}&key={expression="md5( $message->item()->email_key . $message->date )"}&send=1' style="color: #ffffff; font-family: 'Helvetica Neue', helvetica, sans-serif; text-decoration: none; font-size: 12px; background: #417ba3; line-height: 32px; padding: 0 10px; display: inline-block; border-radius: 3px;">{$email->language->addToStack("send_it", FALSE)}</a>
|
||||
<a href='{expression="\IPS\Settings::i()->base_url"}applications/nexus/interface/email/sendDiscard.php?id={$message->id}&key={expression="md5( $message->item()->email_key . $message->date )"}&send=0' style="color: #ffffff; font-family: 'Helvetica Neue', helvetica, sans-serif; text-decoration: none; font-size: 12px; background: #417ba3; line-height: 32px; padding: 0 10px; display: inline-block; border-radius: 3px;">{$email->language->addToStack("discard_it", FALSE)}</a>
|
||||
{{$key = md5( $message->item()->email_key . $message->date );}}
|
||||
<a href='{url="app=nexus&module=support&controller=email&do=sendDiscard&id={$message->id}&key={$key}&send=1" base="front"}' style="color: #ffffff; font-family: 'Helvetica Neue', helvetica, sans-serif; text-decoration: none; font-size: 12px; background: #417ba3; line-height: 32px; padding: 0 10px; display: inline-block; border-radius: 3px;">{$email->language->addToStack("send_it", FALSE)}</a>
|
||||
<a href='{url="app=nexus&module=support&controller=email&do=sendDiscard&id={$message->id}&key={$key}&send=0" base="front"}' style="color: #ffffff; font-family: 'Helvetica Neue', helvetica, sans-serif; text-decoration: none; font-size: 12px; background: #417ba3; line-height: 32px; padding: 0 10px; display: inline-block; border-radius: 3px;">{$email->language->addToStack("discard_it", FALSE)}</a>
|
||||
<br />
|
||||
<br />
|
||||
<table width='100%' cellpadding='15' cellspacing='0' border='0' style='background: #f5f5f5'>
|
||||
@@ -18,10 +19,11 @@
|
||||
|
||||
<br />
|
||||
<br />
|
||||
<em style='color: #8c8c8c'>— {setting="board_name"}</em>]]></template_content_html><template_data>$message, $newMessage, $email</template_data><template_content_plaintext><![CDATA[{$email->language->addToStack("your_reply_is_pending", FALSE)}
|
||||
<em style='color: #8c8c8c'>— {setting="board_name"}</em>]]></template_content_html><template_data>$message, $newMessage, $email</template_data><template_content_plaintext><![CDATA[{{$key = md5( $message->item()->email_key . $message->date );}}
|
||||
{$email->language->addToStack("your_reply_is_pending", FALSE)}
|
||||
---
|
||||
{$email->language->addToStack("send_it", FALSE)}: {expression="\IPS\Settings::i()->base_url" raw="true"}applications/nexus/interface/email/sendDiscard.php?id={$message->id}&key={expression="md5( $message->item()->email_key . $message->date )" raw="true"}&send=1
|
||||
{$email->language->addToStack("discard_it", FALSE)} {expression="\IPS\Settings::i()->base_url" raw="true"}applications/nexus/interface/email/sendDiscard.php?id={$message->id}&key={expression="md5( $message->item()->email_key . $message->date )" raw="true"}&send=0
|
||||
{$email->language->addToStack("send_it", FALSE)}: {url="app=nexus&module=support&controller=email&do=sendDiscard&id={$message->id}&key={$key}&send=1" base="front"}
|
||||
{$email->language->addToStack("discard_it", FALSE)} {url="app=nexus&module=support&controller=email&do=sendDiscard&id={$message->id}&key={$key}&send=0" base="front"}
|
||||
---
|
||||
{expression="\IPS\Email::buildPlaintextBody( $newMessage->content() )" raw="true"}
|
||||
---
|
||||
@@ -114,7 +116,7 @@
|
||||
<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} {$email->language->get("each_short")}</span>
|
||||
<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>
|
||||
@@ -147,7 +149,7 @@
|
||||
{$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']}</strong>
|
||||
<strong>{$tax['amount']->toString( $email->language )}</strong>
|
||||
</td>
|
||||
</tr>
|
||||
{{endforeach}}
|
||||
@@ -168,7 +170,7 @@
|
||||
<strong>{$email->language->get('email_paid_by')} {{if $transaction->method}}{$transaction->method->getTitleForLanguage( $email->language )}{{else}}{$email->language->get('account_credit')}{{endif}}</strong>
|
||||
</td>
|
||||
<td dir='{dir}' style="font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 17px; line-height: 21px" align='right'>
|
||||
<strong style="font-size: 1.5em">{$transaction->amount}</strong>
|
||||
<strong style="font-size: 1.5em">{$transaction->amount->toString( $email->language )}</strong>
|
||||
</td>
|
||||
</tr>
|
||||
{{endif}}
|
||||
@@ -250,7 +252,7 @@
|
||||
{$email->language->get("order_details")}
|
||||
=====
|
||||
{{foreach $summary['items'] as $k => $item}}
|
||||
{$item->quantity} x</span> {$item->name} [{$item->price} {$email->language->get("each_short")}] ({$item->linePrice()->toString( $email->language )})
|
||||
{$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 )}
|
||||
@@ -263,13 +265,13 @@
|
||||
{{if \count( $summary['tax'] )}}
|
||||
---
|
||||
{{foreach $summary['tax'] as $taxId => $tax}}
|
||||
{$email->language->get( 'nexus_tax_' . $taxId )} ({expression="$tax['rate']*100" raw="true"}%): {$tax['amount']}
|
||||
{$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 )}
|
||||
{{if $transactions = $invoice->transactions() and \count( $transactions )}}{{foreach $transactions as $transaction}}{{if $transaction->status === $transaction::STATUS_PAID}}
|
||||
{$email->language->get('email_paid_by')} {{if $transaction->method}}{$transaction->method->getTitleForLanguage( $email->language )}{{else}}{$email->language->get('account_credit')}{{endif}}: {$transaction->amount}
|
||||
{$email->language->get('email_paid_by')} {{if $transaction->method}}{$transaction->method->getTitleForLanguage( $email->language )}{{else}}{$email->language->get('account_credit')}{{endif}}: {$transaction->amount->toString( $email->language )}
|
||||
{{endif}}{{endforeach}}{$email->language->get('total_to_pay')}: {$invoice->amountToPay()->toString( $email->language )}
|
||||
{{endif}}]]></template_content_plaintext><template_pinned>0</template_pinned></template><template><template_app>nexus</template_app><template_name>acp_notification_Withdrawal</template_name><template_content_html><![CDATA[<br />
|
||||
{$email->language->addToStack( "email_notify_withdrawal", FALSE )}
|
||||
@@ -434,7 +436,11 @@
|
||||
{{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->tax AND \IPS\Settings::i()->nexus_show_tax}}
|
||||
<strong>{$item->grossLinePrice()->toString( $email->language)}</strong> {{if $email->language->checkKeyExists('nexus_tax_explain_val')}}<span style="font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 12px; color: #bdbdbd; line-height: 18px;">{$email->language->get('nexus_tax_explain_val')}</span>{{endif}}
|
||||
{{else}}
|
||||
<strong>{$item->linePrice()->toString( $email->language )}</strong>
|
||||
{{endif}}
|
||||
</td>
|
||||
</tr>
|
||||
{{endforeach}}
|
||||
@@ -464,7 +470,7 @@
|
||||
{{endif}}
|
||||
|
||||
{$email->language->get("email_expiring_soon")}:
|
||||
{{foreach $summary['items'] as $k => $item}}{$item->quantity} x</span> {$item->name} ({$item->linePrice()->toString( $email->language )}) - {$email->language->addToStack('ps_expire', FALSE)}: {expression="\IPS\nexus\Purchase::load( $item->id )->expire->localeDate( $invoice->member )" raw="true"}
|
||||
{{foreach $summary['items'] as $k => $item}}{$item->quantity} x {$item->name} ({{if $item->tax AND \IPS\Settings::i()->nexus_show_tax}}{$item->grossLinePrice()->toString( $email->language)} {{if $email->language->checkKeyExists('nexus_tax_explain_val')}}{$email->language->get('nexus_tax_explain_val')}{{endif}}{{else}}{$item->linePrice()->toString( $email->language )}{{endif}}) - {$email->language->addToStack('ps_expire', FALSE)}: {expression="\IPS\nexus\Purchase::load( $item->id )->expire->localeDate( $invoice->member )" raw="true"}
|
||||
{{endforeach}}]]></template_content_plaintext><template_pinned>0</template_pinned></template><template><template_app>nexus</template_app><template_name>monitoring_reset</template_name><template_content_html><![CDATA[
|
||||
{expression="$email->language->addToStack( 'monitor_email_intro', FALSE, array( 'sprintf' => \IPS\Settings::i()->board_name ) )"}
|
||||
<br />
|
||||
@@ -603,7 +609,7 @@
|
||||
<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} {$email->language->get("each_short")}</span>
|
||||
<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>
|
||||
@@ -636,7 +642,7 @@
|
||||
{$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']}</strong>
|
||||
<strong>{$tax['amount']->toString( $email->language )}</strong>
|
||||
</td>
|
||||
</tr>
|
||||
{{endforeach}}
|
||||
@@ -657,7 +663,7 @@
|
||||
<strong>{$email->language->get('email_paid_by')} {{if $transaction->method}}{$transaction->method->getTitleForLanguage( $email->language )}{{else}}{$email->language->get('account_credit')}{{endif}}</strong>
|
||||
</td>
|
||||
<td dir='{dir}' style="font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 17px; line-height: 21px" align='right'>
|
||||
<strong style="font-size: 1.5em">{$transaction->amount}</strong>
|
||||
<strong style="font-size: 1.5em">{$transaction->amount->toString( $email->language )}</strong>
|
||||
</td>
|
||||
</tr>
|
||||
{{endif}}
|
||||
@@ -691,7 +697,7 @@
|
||||
{$email->language->get("order_details")}
|
||||
=====
|
||||
{{foreach $summary['items'] as $k => $item}}
|
||||
{$item->quantity} x</span> {$item->name} [{$item->price} {$email->language->get("each_short")}] ({$item->linePrice()->toString( $email->language )})
|
||||
{$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 )}
|
||||
@@ -704,13 +710,13 @@
|
||||
{{if \count( $summary['tax'] )}}
|
||||
---
|
||||
{{foreach $summary['tax'] as $taxId => $tax}}
|
||||
{$email->language->get( 'nexus_tax_' . $taxId )} ({expression="$tax['rate']*100" raw="true"}%): {$tax['amount']}
|
||||
{$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 )}
|
||||
{{if $transactions = $invoice->transactions() and \count( $transactions )}}{{foreach $transactions as $transaction}}{{if $transaction->status === $transaction::STATUS_PAID}}
|
||||
{$email->language->get('email_paid_by')} {{if $transaction->method}}{$transaction->method->getTitleForLanguage( $email->language )}{{else}}{$email->language->get('account_credit')}{{endif}}: {$transaction->amount}
|
||||
{$email->language->get('email_paid_by')} {{if $transaction->method}}{$transaction->method->getTitleForLanguage( $email->language )}{{else}}{$email->language->get('account_credit')}{{endif}}: {$transaction->amount->toString( $email->language )}
|
||||
{{endif}}{{endforeach}}
|
||||
{{endif}}]]></template_content_plaintext><template_pinned>0</template_pinned></template><template><template_app>nexus</template_app><template_name>unsubscribeStaffNotify</template_name><template_content_html><![CDATA[<tr>
|
||||
<td dir='{dir}' valign="top"><img src='{setting="base_url"}applications/core/interface/email/spacer.png' width='1' height='1' alt=''></td>
|
||||
@@ -884,7 +890,7 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<td dir='{dir}' width="150" align='right' style="font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 15px; color: #333333; line-height: 21px"><strong>{$email->language->addToStack("amount", FALSE)}</strong></td>
|
||||
<td dir='{dir}' style="font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 15px; color: #333333; line-height: 21px"> {$transaction->amount}</td>
|
||||
<td dir='{dir}' style="font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 15px; color: #333333; line-height: 21px"> {$transaction->amount->toString( $email->language )}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
@@ -934,7 +940,7 @@
|
||||
<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;">{$email->language->addToStack("each_short", FALSE, array( 'sprintf' => array( $item->price ) ) )}</span>
|
||||
<br><span style="color: #8d8d8d; font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 15px;">{$email->language->addToStack("each_short", FALSE, array( 'sprintf' => array( $item->price->toString( $email->language ) ) ) )}</span>
|
||||
{{endif}}
|
||||
</td>
|
||||
</tr>
|
||||
@@ -967,7 +973,7 @@
|
||||
{$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']}</strong>
|
||||
<strong>{$tax['amount']->toString( $email->language )}</strong>
|
||||
</td>
|
||||
</tr>
|
||||
{{endforeach}}
|
||||
@@ -1008,12 +1014,12 @@
|
||||
{$email->language->addToStack("email_payment_method", FALSE)}: {{if $transaction->method}}{$transaction->method->getTitleForLanguage( $email->language )}{{else}}{$email->language->addToStack("account_credit", FALSE)}{{endif}}
|
||||
{$email->language->addToStack("email_transaction_id", FALSE)}: {$transaction->gw_id}
|
||||
{$email->language->addToStack("date", FALSE)}: {$transaction->date}
|
||||
{$email->language->addToStack("amount", FALSE)}: {$transaction->amount}
|
||||
{$email->language->addToStack("amount", FALSE)}: {$transaction->amount->toString( $email->language )}
|
||||
|
||||
{$email->language->addToStack("order_details", FALSE)}
|
||||
===
|
||||
{{foreach $invoiceSummary['items'] as $k => $item}}
|
||||
{$item->quantity} x</span> {$item->name} [{$email->language->addToStack("each_short", FALSE, array( 'htmlsprintf' => array( $item->price ) ) )}] ({$item->linePrice()->toString( $email->language )})
|
||||
{$item->quantity} x</span> {$item->name} [{$email->language->addToStack("each_short", FALSE, array( 'htmlsprintf' => array( $item->price->toString( $email->language ) ) ) )}] ({$item->linePrice()->toString( $email->language )})
|
||||
{{endforeach}}
|
||||
---
|
||||
{$email->language->get('subtotal')}: {$invoiceSummary['subtotal']->toString( $email->language )}
|
||||
@@ -1026,7 +1032,7 @@
|
||||
{{if \count( $invoiceSummary['tax'] )}}
|
||||
---
|
||||
{{foreach $invoiceSummary['tax'] as $taxId => $tax}}
|
||||
{$email->language->get( 'nexus_tax_' . $taxId )} ({expression="$tax['rate']*100" raw="true"}%): {$tax['amount']}
|
||||
{$email->language->get( 'nexus_tax_' . $taxId )} ({expression="$tax['rate']*100" raw="true"}%): {$tax['amount']->toString( $email->language )}
|
||||
{{endforeach}}
|
||||
{{endif}}
|
||||
---
|
||||
@@ -1338,7 +1344,7 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<td dir='{dir}' width="150" align='right' style="font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 15px; color: #333333; line-height: 21px"><strong>{$email->language->addToStack("t_amount", FALSE)}</strong></td>
|
||||
<td dir='{dir}' style="font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 15px; color: #333333; line-height: 21px"> {$transaction->amount}</td>
|
||||
<td dir='{dir}' style="font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 15px; color: #333333; line-height: 21px"> {$transaction->amount->toString( $email->language )}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
@@ -1388,7 +1394,7 @@
|
||||
<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;">{$email->language->addToStack("each_short", FALSE, array( 'sprintf' => array( $item->price ) ) )}</span>
|
||||
<br><span style="color: #8d8d8d; font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 15px;">{$email->language->addToStack("each_short", FALSE, array( 'sprintf' => array( $item->price->toString( $email->language ) ) ) )}</span>
|
||||
{{endif}}
|
||||
</td>
|
||||
</tr>
|
||||
@@ -1421,7 +1427,7 @@
|
||||
{$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']}</strong>
|
||||
<strong>{$tax['amount']->toString( $email->language )}</strong>
|
||||
</td>
|
||||
</tr>
|
||||
{{endforeach}}
|
||||
@@ -1464,12 +1470,12 @@
|
||||
{$email->language->addToStack("email_payment_method", FALSE)}: {{if $transaction->method}}{$transaction->method->getTitleForLanguage( $email->language )}{{else}}{$email->language->addToStack("account_credit", FALSE)}{{endif}}
|
||||
{$email->language->addToStack("email_transaction_id", FALSE)}: {$transaction->gw_id}
|
||||
{$email->language->addToStack("date", FALSE)}: {$transaction->date}
|
||||
{$email->language->addToStack("amount", FALSE)}: {$transaction->amount}
|
||||
{$email->language->addToStack("amount", FALSE)}: {$transaction->amount->toString( $email->language )}
|
||||
|
||||
{$email->language->addToStack("order_details", FALSE)}
|
||||
===
|
||||
{{foreach $invoiceSummary['items'] as $k => $item}}
|
||||
{$item->quantity} x</span> {$item->name} [{$email->language->addToStack("each_short", FALSE, array( 'htmlsprintf' => array( $item->price ) ) )}] ({$item->linePrice()->toString( $email->language )})
|
||||
{$item->quantity} x</span> {$item->name} [{$email->language->addToStack("each_short", FALSE, array( 'htmlsprintf' => array( $item->price->toString( $email->language ) ) ) )}] ({$item->linePrice()->toString( $email->language )})
|
||||
{{endforeach}}
|
||||
---
|
||||
{$email->language->get('subtotal')}: {$invoiceSummary['subtotal']->toString( $email->language )}
|
||||
@@ -1482,7 +1488,7 @@
|
||||
{{if \count( $invoiceSummary['tax'] )}}
|
||||
---
|
||||
{{foreach $invoiceSummary['tax'] as $taxId => $tax}}
|
||||
{$email->language->get( 'nexus_tax_' . $taxId )} ({expression="$tax['rate']*100" raw="true"}%): {$tax['amount']}
|
||||
{$email->language->get( 'nexus_tax_' . $taxId )} ({expression="$tax['rate']*100" raw="true"}%): {$tax['amount']->toString( $email->language )}
|
||||
{{endforeach}}
|
||||
{{endif}}
|
||||
---
|
||||
@@ -1695,7 +1701,7 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<td dir='{dir}' width="150" align='right' style="font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 15px; color: #333333; line-height: 21px"><strong>{$email->language->addToStack("amount", FALSE)}</strong></td>
|
||||
<td dir='{dir}' style="font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 15px; color: #333333; line-height: 21px"> {$transaction->amount}</td>
|
||||
<td dir='{dir}' style="font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 15px; color: #333333; line-height: 21px"> {$transaction->amount->toString( $email->language )}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
@@ -1745,7 +1751,7 @@
|
||||
<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;">{$email->language->addToStack("each_short", FALSE, array( 'sprintf' => array( $item->price ) ) )}</span>
|
||||
<br><span style="color: #8d8d8d; font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 15px;">{$email->language->addToStack("each_short", FALSE, array( 'sprintf' => array( $item->price->toString( $email->language ) ) ) )}</span>
|
||||
{{endif}}
|
||||
</td>
|
||||
</tr>
|
||||
@@ -1778,7 +1784,7 @@
|
||||
{$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']}</strong>
|
||||
<strong>{$tax['amount']->toString( $email->language )}</strong>
|
||||
</td>
|
||||
</tr>
|
||||
{{endforeach}}
|
||||
@@ -1819,12 +1825,12 @@
|
||||
{$email->language->addToStack("email_payment_method", FALSE)}: {{if $transaction->method}}{$transaction->method->getTitleForLanguage( $email->language )}{{else}}{$email->language->addToStack("account_credit", FALSE)}{{endif}}
|
||||
{$email->language->addToStack("email_transaction_id", FALSE)}: {$transaction->gw_id}
|
||||
{$email->language->addToStack("date", FALSE)}: {$transaction->date}
|
||||
{$email->language->addToStack("amount", FALSE)}: {$transaction->amount}
|
||||
{$email->language->addToStack("amount", FALSE)}: {$transaction->amount->toString( $email->language )}
|
||||
|
||||
{$email->language->addToStack("order_details", FALSE)}
|
||||
===
|
||||
{{foreach $invoiceSummary['items'] as $k => $item}}
|
||||
{$item->quantity} x</span> {$item->name} [{$email->language->addToStack("each_short", FALSE, array( 'htmlsprintf' => array( $item->price ) ) )}] ({$item->linePrice()->toString( $email->language )})
|
||||
{$item->quantity} x</span> {$item->name} [{$email->language->addToStack("each_short", FALSE, array( 'htmlsprintf' => array( $item->price->toString( $email->language ) ) ) )}] ({$item->linePrice()->toString( $email->language )})
|
||||
{{endforeach}}
|
||||
---
|
||||
{$email->language->get('subtotal')}: {$invoiceSummary['subtotal']->toString( $email->language )}
|
||||
@@ -1837,7 +1843,7 @@
|
||||
{{if \count( $invoiceSummary['tax'] )}}
|
||||
---
|
||||
{{foreach $invoiceSummary['tax'] as $taxId => $tax}}
|
||||
{$email->language->get( 'nexus_tax_' . $taxId )} ({expression="$tax['rate']*100" raw="true"}%): {$tax['amount']}
|
||||
{$email->language->get( 'nexus_tax_' . $taxId )} ({expression="$tax['rate']*100" raw="true"}%): {$tax['amount']->toString( $email->language )}
|
||||
{{endforeach}}
|
||||
{{endif}}
|
||||
---
|
||||
@@ -1945,7 +1951,7 @@
|
||||
<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;">{$email->language->addToStack("each_short", FALSE, array( 'sprintf' => array( $item->price ) ) )}</span>
|
||||
<br><span style="color: #8d8d8d; font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 15px;">{$email->language->addToStack("each_short", FALSE, array( 'sprintf' => array( $item->price->toString( $email->language ) ) ) )}</span>
|
||||
{{endif}}
|
||||
</td>
|
||||
</tr>
|
||||
@@ -1978,7 +1984,7 @@
|
||||
{$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']}</strong>
|
||||
<strong>{$tax['amount']->toString( $email->language )}</strong>
|
||||
</td>
|
||||
</tr>
|
||||
{{endforeach}}
|
||||
@@ -2018,7 +2024,7 @@
|
||||
{$email->language->addToStack("order_details", FALSE)}
|
||||
===
|
||||
{{foreach $invoiceSummary['items'] as $k => $item}}
|
||||
{$item->quantity} x</span> {$item->name} [{$email->language->addToStack("each_short", FALSE, array( 'htmlsprintf' => array( $item->price ) ) )}] ({$item->linePrice()->toString( $email->language )})
|
||||
{$item->quantity} x</span> {$item->name} [{$email->language->addToStack("each_short", FALSE, array( 'htmlsprintf' => array( $item->price->toString( $email->language ) ) ) )}] ({$item->linePrice()->toString( $email->language )})
|
||||
{{endforeach}}
|
||||
---
|
||||
{$email->language->get('subtotal')}: {$invoiceSummary['subtotal']->toString( $email->language )}
|
||||
@@ -2031,7 +2037,7 @@
|
||||
{{if \count( $invoiceSummary['tax'] )}}
|
||||
---
|
||||
{{foreach $invoiceSummary['tax'] as $tax}}
|
||||
{$tax['name']} ({expression="$tax['rate']*100" raw="true"}%): {$tax['amount']}
|
||||
{$tax['name']} ({expression="$tax['rate']*100" raw="true"}%): {$tax['amount']->toString( $email->language )}
|
||||
{{endforeach}}
|
||||
{{endif}}
|
||||
---
|
||||
@@ -2146,7 +2152,7 @@
|
||||
<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;">{$email->language->addToStack("each_short", FALSE, array( 'sprintf' => array( $item->price ) ) )}</span>
|
||||
<br><span style="color: #8d8d8d; font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 15px;">{$email->language->addToStack("each_short", FALSE, array( 'sprintf' => array( $item->price->toString( $email->language ) ) ) )}</span>
|
||||
{{endif}}
|
||||
</td>
|
||||
</tr>
|
||||
@@ -2179,7 +2185,7 @@
|
||||
{$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']}</strong>
|
||||
<strong>{$tax['amount']->toString( $email->language )}</strong>
|
||||
</td>
|
||||
</tr>
|
||||
{{endforeach}}
|
||||
@@ -2219,7 +2225,7 @@
|
||||
{$email->language->addToStack("order_details", FALSE)}
|
||||
===
|
||||
{{foreach $invoiceSummary['items'] as $k => $item}}
|
||||
{$item->quantity} x</span> {$item->name} [{$email->language->addToStack("each_short", FALSE, array( 'htmlsprintf' => array( $item->price ) ) )}] ({$item->linePrice()->toString( $email->language )})
|
||||
{$item->quantity} x</span> {$item->name} [{$email->language->addToStack("each_short", FALSE, array( 'htmlsprintf' => array( $item->price->toString( $email->language ) ) ) )}] ({$item->linePrice()->toString( $email->language )})
|
||||
{{endforeach}}
|
||||
---
|
||||
{$email->language->get('subtotal')}: {$invoiceSummary['subtotal']->toString( $email->language )}
|
||||
@@ -2232,7 +2238,7 @@
|
||||
{{if \count( $invoiceSummary['tax'] )}}
|
||||
---
|
||||
{{foreach $invoiceSummary['tax'] as $taxId => $tax}}
|
||||
{$email->language->get( 'nexus_tax_' . $taxId )} ({expression="$tax['rate']*100" raw="true"}%): {$tax['amount']}
|
||||
{$email->language->get( 'nexus_tax_' . $taxId )} ({expression="$tax['rate']*100" raw="true"}%): {$tax['amount']->toString( $email->language )}
|
||||
{{endforeach}}
|
||||
{{endif}}
|
||||
---
|
||||
@@ -2349,7 +2355,7 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<td dir='{dir}' width="150" align='right' style="font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 15px; color: #333333; line-height: 21px"><strong>{$email->language->addToStack("t_amount", FALSE)}</strong></td>
|
||||
<td dir='{dir}' style="font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 15px; color: #333333; line-height: 21px"> {$transaction->amount}</td>
|
||||
<td dir='{dir}' style="font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 15px; color: #333333; line-height: 21px"> {$transaction->amount->toString( $email->language )}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
@@ -2440,7 +2446,7 @@
|
||||
<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;">{$email->language->addToStack("each_short", FALSE, array( 'sprintf' => array( $item->price ) ) )}</span>
|
||||
<br><span style="color: #8d8d8d; font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 15px;">{$email->language->addToStack("each_short", FALSE, array( 'sprintf' => array( $item->price->toString( $email->language ) ) ) )}</span>
|
||||
{{endif}}
|
||||
</td>
|
||||
</tr>
|
||||
@@ -2473,7 +2479,7 @@
|
||||
{$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']}</strong>
|
||||
<strong>{$tax['amount']->toString( $email->language )}</strong>
|
||||
</td>
|
||||
</tr>
|
||||
{{endforeach}}
|
||||
@@ -2513,7 +2519,7 @@
|
||||
{$email->language->addToStack("order_details", FALSE)}
|
||||
===
|
||||
{{foreach $invoiceSummary['items'] as $k => $item}}
|
||||
{$item->quantity} x</span> {$item->name} [{$email->language->addToStack("each_short", FALSE, array( 'htmlsprintf' => array( $item->price ) ) )}] ({$item->linePrice()->toString( $email->language )})
|
||||
{$item->quantity} x</span> {$item->name} [{$email->language->addToStack("each_short", FALSE, array( 'htmlsprintf' => array( $item->price->toString( $email->language ) ) ) )}] ({$item->linePrice()->toString( $email->language )})
|
||||
{{endforeach}}
|
||||
---
|
||||
{$email->language->get('subtotal')}: {$invoiceSummary['subtotal']->toString( $email->language )}
|
||||
@@ -2526,7 +2532,7 @@
|
||||
{{if \count( $invoiceSummary['tax'] )}}
|
||||
---
|
||||
{{foreach $invoiceSummary['tax'] as $taxId => $tax}}
|
||||
{$email->language->get( 'nexus_tax_' . $taxId )} ({expression="$tax['rate']*100" raw="true"}%): {$tax['amount']}
|
||||
{$email->language->get( 'nexus_tax_' . $taxId )} ({expression="$tax['rate']*100" raw="true"}%): {$tax['amount']->toString( $email->language )}
|
||||
{{endforeach}}
|
||||
{{endif}}
|
||||
---
|
||||
@@ -2641,7 +2647,218 @@
|
||||
{$email->language->addToStack("view_support_request", FALSE)}: {$request->url()}
|
||||
{$email->language->addToStack("or_you_can_reply", FALSE)}
|
||||
{{endif}}
|
||||
{$email->language->addToStack("support_reply_email_id", FALSE, array( 'htmlsprintf' => array( '[SR' . $request->id . '.' . $request->email_key . ']' ) ) )}]]></template_content_plaintext><template_pinned>0</template_pinned></template><template><template_app>nexus</template_app><template_name>acp_notification_Transaction</template_name><template_content_html><![CDATA[<br />
|
||||
{$email->language->addToStack("support_reply_email_id", FALSE, array( 'htmlsprintf' => array( '[SR' . $request->id . '.' . $request->email_key . ']' ) ) )}]]></template_content_plaintext><template_pinned>0</template_pinned></template><template><template_app>nexus</template_app><template_name>invoiceNotify</template_name><template_content_html><![CDATA[
|
||||
{$email->language->get('email_tracked_invoice_paid')}
|
||||
<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>
|
||||
{{foreach $transactions as $transaction}}
|
||||
{{if $transaction->status === $transaction::STATUS_PAID}}
|
||||
<tr>
|
||||
<td dir='{dir}' colspan='2' align='right' style="font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 17px; line-height: 21px">
|
||||
<strong>{$email->language->get('email_paid_by')} {{if $transaction->method}}{$transaction->method->getTitleForLanguage( $email->language )}{{else}}{$email->language->get('account_credit')}{{endif}}</strong>
|
||||
</td>
|
||||
<td dir='{dir}' style="font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 17px; line-height: 21px" align='right'>
|
||||
<strong style="font-size: 1.5em">{$transaction->amount->toString( $email->language )}</strong>
|
||||
</td>
|
||||
</tr>
|
||||
{{endif}}
|
||||
{{endforeach}}
|
||||
{{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_paid')}
|
||||
|
||||
-- {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 )}
|
||||
{{if $transactions = $invoice->transactions() and \count( $transactions )}}{{foreach $transactions as $transaction}}{{if $transaction->status === $transaction::STATUS_PAID}}
|
||||
{$email->language->get('email_paid_by')} {{if $transaction->method}}{$transaction->method->getTitleForLanguage( $email->language )}{{else}}{$email->language->get('account_credit')}{{endif}}: {$transaction->amount->toString( $email->language )}
|
||||
{{endif}}{{endforeach}}
|
||||
{{endif}}]]></template_content_plaintext><template_pinned>0</template_pinned></template><template><template_app>nexus</template_app><template_name>acp_notification_Transaction</template_name><template_content_html><![CDATA[<br />
|
||||
{$email->language->addToStack( "email_transaction_" . $notification->extra, FALSE )}
|
||||
<br />
|
||||
<br />
|
||||
@@ -2737,7 +2954,7 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<td dir='{dir}' width="150" align='right' style="font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 15px; color: #333333; line-height: 21px"><strong>{$email->language->addToStack("t_amount", FALSE)}</strong></td>
|
||||
<td dir='{dir}' style="font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 15px; color: #333333; line-height: 21px"> {$transaction->amount}</td>
|
||||
<td dir='{dir}' style="font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 15px; color: #333333; line-height: 21px"> {$transaction->amount->toString( $email->language )}</td>
|
||||
</tr>
|
||||
{{if $transaction->fraud}}
|
||||
<tr>
|
||||
@@ -2807,7 +3024,7 @@
|
||||
<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;">{$email->language->addToStack("each_short", FALSE, array( 'sprintf' => array( $item->price ) ) )}</span>
|
||||
<br><span style="color: #8d8d8d; font-family: 'Helvetica Neue', helvetica, sans-serif; font-size: 15px;">{$email->language->addToStack("each_short", FALSE, array( 'sprintf' => array( $item->price->toString( $email->language ) ) ) )}</span>
|
||||
{{endif}}
|
||||
</td>
|
||||
</tr>
|
||||
@@ -2840,7 +3057,7 @@
|
||||
{$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']}</strong>
|
||||
<strong>{$tax['amount']->toString( $email->language )}</strong>
|
||||
</td>
|
||||
</tr>
|
||||
{{endforeach}}
|
||||
|
||||
@@ -1,145 +1,148 @@
|
||||
{
|
||||
"core": {
|
||||
"IncomingEmail": {
|
||||
"Support": "IPS\\nexus\\extensions\\core\\IncomingEmail\\Support"
|
||||
},
|
||||
"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"
|
||||
},
|
||||
"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"
|
||||
"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"
|
||||
},
|
||||
"Dashboard": {
|
||||
"Income": "IPS\\nexus\\extensions\\core\\Dashboard\\Income",
|
||||
"PendingActions": "IPS\\nexus\\extensions\\core\\Dashboard\\PendingActions"
|
||||
"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"
|
||||
},
|
||||
"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"
|
||||
"MemberExportPersonalInformation": {
|
||||
"Customer": "IPS\\nexus\\extensions\\core\\MemberExportPersonalInformation\\Customer"
|
||||
},
|
||||
"AchievementAction": {
|
||||
"Subscription": "IPS\\nexus\\extensions\\core\\AchievementAction\\Subscription"
|
||||
},
|
||||
"LiveSearch": {
|
||||
"Nexus": "IPS\\nexus\\extensions\\core\\LiveSearch\\Nexus"
|
||||
},
|
||||
"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",
|
||||
"PurchaseFields": "IPS\\nexus\\extensions\\core\\FileStorage\\PurchaseFields",
|
||||
"Support": "IPS\\nexus\\extensions\\core\\FileStorage\\Support"
|
||||
"Products": "IPS\\nexus\\extensions\\core\\FileStorage\\Products"
|
||||
},
|
||||
"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"
|
||||
"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"
|
||||
},
|
||||
"IncomingEmail": {
|
||||
"Support": "IPS\\nexus\\extensions\\core\\IncomingEmail\\Support"
|
||||
"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"
|
||||
},
|
||||
"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"
|
||||
},
|
||||
"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"
|
||||
},
|
||||
"MemberFilter": {
|
||||
"Subscriptions": "IPS\\nexus\\extensions\\core\\MemberFilter\\Subscriptions",
|
||||
"TotalSpend": "IPS\\nexus\\extensions\\core\\MemberFilter\\TotalSpend",
|
||||
"Purchases": "IPS\\nexus\\extensions\\core\\MemberFilter\\Purchases"
|
||||
},
|
||||
"OverviewStatistics": {
|
||||
"Subscriptions": "IPS\\nexus\\extensions\\core\\OverviewStatistics\\Subscriptions",
|
||||
"Products": "IPS\\nexus\\extensions\\core\\OverviewStatistics\\Products"
|
||||
},
|
||||
"IpAddresses": {
|
||||
"Payouts": "IPS\\nexus\\extensions\\core\\IpAddresses\\Payouts",
|
||||
"Support": "IPS\\nexus\\extensions\\core\\IpAddresses\\Support",
|
||||
"Transactions": "IPS\\nexus\\extensions\\core\\IpAddresses\\Transactions"
|
||||
},
|
||||
"LiveSearch": {
|
||||
"Nexus": "IPS\\nexus\\extensions\\core\\LiveSearch\\Nexus"
|
||||
"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"
|
||||
},
|
||||
"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"
|
||||
"OutputPlugins": {
|
||||
"Weight": "IPS\\nexus\\extensions\\core\\OutputPlugins\\Weight",
|
||||
"Money": "IPS\\nexus\\extensions\\core\\OutputPlugins\\Money",
|
||||
"Length": "IPS\\nexus\\extensions\\core\\OutputPlugins\\Length"
|
||||
},
|
||||
"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",
|
||||
"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": {
|
||||
"AccountCreditIncrease": "IPS\\nexus\\extensions\\nexus\\Item\\AccountCreditIncrease",
|
||||
"Bandwidth": "IPS\\nexus\\extensions\\nexus\\Item\\Bandwidth",
|
||||
"CouponDiscount": "IPS\\nexus\\extensions\\nexus\\Item\\CouponDiscount",
|
||||
"CustomPackage": "IPS\\nexus\\extensions\\nexus\\Item\\CustomPackage",
|
||||
"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",
|
||||
"ShippingCharge": "IPS\\nexus\\extensions\\nexus\\Item\\ShippingCharge",
|
||||
"Package": "IPS\\nexus\\extensions\\nexus\\Item\\Package",
|
||||
"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",
|
||||
"Donation": "IPS\\nexus\\extensions\\nexus\\Item\\Donation",
|
||||
"UpgradeCharge": "IPS\\nexus\\extensions\\nexus\\Item\\UpgradeCharge"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,26 +1,26 @@
|
||||
{
|
||||
"clientAreaLinkLoad": {
|
||||
"type": "C",
|
||||
"class": "\\IPS\\Data\\Store\\Database"
|
||||
},
|
||||
"clientAreaLink": {
|
||||
"type": "S",
|
||||
"class": "\\IPS\\Theme\\class_core_front_global"
|
||||
},
|
||||
"frontDispatcher": {
|
||||
"type": "C",
|
||||
"class": "\\IPS\\Dispatcher\\Front"
|
||||
},
|
||||
"DispatcherAdmin": {
|
||||
"type": "C",
|
||||
"class": "\\IPS\\Dispatcher\\Admin"
|
||||
},
|
||||
"clientAreaLinkLoad": {
|
||||
"type": "C",
|
||||
"class": "\\IPS\\Data\\Store\\Database"
|
||||
},
|
||||
"register": {
|
||||
"type": "C",
|
||||
"class": "\\IPS\\core\\modules\\front\\system\\register"
|
||||
},
|
||||
"clientAreaLink": {
|
||||
"type": "S",
|
||||
"class": "\\IPS\\Theme\\class_core_front_global"
|
||||
},
|
||||
"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="105100" 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="106107" 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="105100" 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="106107" 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="105100" 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="106107" 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="105100" 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="106107" 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="105100" 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="106107" javascript_position="1000150"><![CDATA[/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -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="105100" 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="106107" 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="105100" 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="106107" 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="105100" 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="106107" javascript_position="1000200"><![CDATA[/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -1341,6 +1341,9 @@
|
||||
if ( scope.attr('data-email') ) {
|
||||
data.billing_details.email = scope.attr('data-email');
|
||||
}
|
||||
if ( scope.attr('data-name') ) {
|
||||
data.billing_details.name = scope.attr('data-name');
|
||||
}
|
||||
if ( scope.attr('data-phone') ) {
|
||||
data.billing_details.phone = scope.attr('data-phone');
|
||||
}
|
||||
@@ -1351,6 +1354,8 @@
|
||||
this.stripe.handleCardSetup( scope.attr('data-setupSecret'), this.cardNumber, { payment_method_data: data } ).then( function( result ){
|
||||
if (result.error) {
|
||||
Debug.error(result.error);
|
||||
loading.remove();
|
||||
wizardContainer.show();
|
||||
ips.ui.alert.show({
|
||||
type: 'alert',
|
||||
icon: 'warn',
|
||||
@@ -1475,7 +1480,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="105100" javascript_position="1000200">/**
|
||||
<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
|
||||
*
|
||||
@@ -1517,7 +1522,7 @@ function aecCallbackHandler(response){
|
||||
|
||||
});
|
||||
}(jQuery, _));</file>
|
||||
<file javascript_app="nexus" javascript_location="global" javascript_path="controllers/gateways" javascript_name="ips.gateways.stripepaymentrequest.js" javascript_type="controller" javascript_version="105100" 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="106107" javascript_position="1000200">/**
|
||||
* IPS Community Suite 4
|
||||
* (c) 2017 Invision Power Services - http://www.invisionpower.com
|
||||
*
|
||||
@@ -1598,7 +1603,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="105100" 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="106107" javascript_position="1000200">/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -1630,7 +1635,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="105100" 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="106107" javascript_position="1000100">/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -1652,7 +1657,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="105100" 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="106107" javascript_position="1000250">/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -1732,7 +1737,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="105100" 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="106107" javascript_position="1000100"><![CDATA[/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -1834,7 +1839,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="105100" 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="106107" javascript_position="1000300"><![CDATA[/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -1889,7 +1894,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="105100" 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="106107" javascript_position="1000300"><![CDATA[/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -1949,7 +1954,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="105100" 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="106107" javascript_position="1000250">/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -2049,7 +2054,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="105100" 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="106107" javascript_position="1000250"><![CDATA[/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -2163,7 +2168,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="105100" 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="106107" javascript_position="1000250">/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -2206,7 +2211,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="105100" 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="106107" javascript_position="1000250"><![CDATA[/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -2294,7 +2299,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="105100" 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="106107" javascript_position="1000250"><![CDATA[/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -2564,7 +2569,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="105100" 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="106107" javascript_position="1000250"><![CDATA[/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -2713,7 +2718,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="105100" 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="106107" javascript_position="1000150">/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -2751,7 +2756,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="105100" 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="106107" javascript_position="1000150">/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -2787,7 +2792,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="105100" 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="106107" javascript_position="1000150">/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -2840,7 +2845,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="105100" 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="106107" javascript_position="1000150"><![CDATA[/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -3049,7 +3054,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="105100" 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="106107" javascript_position="1000150"><![CDATA[/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -3105,7 +3110,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="105100" 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="106107" javascript_position="1000150"><![CDATA[/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -3279,7 +3284,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="105100" 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="106107" javascript_position="1000150"><![CDATA[/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -3379,7 +3384,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="105100" 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="106107" javascript_position="1000150">/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -3428,7 +3433,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="105100" 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="106107" javascript_position="1000150">/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -3455,7 +3460,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="105100" 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="106107" javascript_position="1000150"><![CDATA[/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -3539,7 +3544,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="105100" 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="106107" javascript_position="1000150">/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -3570,10 +3575,6 @@ function aecCallbackHandler(response){
|
||||
this.scope.find('[data-role="noteForm"] button[type="submit"]').attr( { 'title': ips.getString('ctrl_and_enter'), 'data-ipsTooltip': '' } );
|
||||
}
|
||||
|
||||
this.scope.find('.ipsQuote:not([data-commerceHandled])').each( function () {
|
||||
self._handleQuote( $( this ) );
|
||||
});
|
||||
|
||||
this.resizeInfo();
|
||||
},
|
||||
|
||||
@@ -3652,7 +3653,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="105100" 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="106107" javascript_position="1000150">/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -3722,7 +3723,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="105100" 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="106107" javascript_position="1000200">/**
|
||||
* Invision Community
|
||||
* (c) Invision Power Services, Inc. - https://www.invisioncommunity.com
|
||||
*
|
||||
@@ -3744,35 +3745,48 @@ 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="105100" javascript_position="1000050"><![CDATA[ips.templates.set('nexus.store.images', " \
|
||||
<div class='ipsGrid_span3 ipsAttach ipsImageAttach ipsPad_half ipsAreaBackground_light' id='{{id}}' data-role='file' data-fileid='{{id}}' data-fullsizeurl='{{imagesrc}}' data-thumbnailurl='{{thumbnail}}' data-fileType='image'>\
|
||||
<ul class='ipsList_inline ipsImageAttach_controls'>\
|
||||
<li><input type='radio' name='{{field_name}}_primary_image' value='{{id}}' title='{{#lang}}makePrimaryProductImage{{/lang}}' data-ipsTooltip></li>\
|
||||
<li class='ipsPos_right' data-role='deleteFileWrapper'>\
|
||||
<input type='hidden' name='{{field_name}}_keep[{{id}}]' value='1'>\
|
||||
<a href='#' data-role='deleteFile' class='ipsButton ipsButton_verySmall ipsButton_light' data-ipsTooltip title='{{#lang}}removeProductImage{{/lang}}'><i class='fa fa-trash-o'></i></a>\
|
||||
</li>\
|
||||
</ul>\
|
||||
<div class='ipsImageAttach_thumb ipsType_center' data-role='preview' data-grid-ratio='65' data-action='insertFile' {{#thumb}}style='background-image: url( \"{{thumbnail_for_css}}\" )'{{/thumb}}>\
|
||||
{{#status}}\
|
||||
<span class='ipsImageAttach_status ipsType_light' data-role='status'>{{{status}}}</span>\
|
||||
<span class='ipsAttachment_progress'><span data-role='progressbar'></span></span>\
|
||||
{{/status}}\
|
||||
<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', " \
|
||||
<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}}\
|
||||
{{{thumb}}}\
|
||||
{{/thumb}}\
|
||||
<div class='ipsUploader__rowPreview__generic ipsFlex ipsFlex-ai:center ipsFlex-jc:center' {{#thumb}}style='display: none'{{/thumb}}>\
|
||||
<i class='fa fa-{{extIcon}} ipsType_large'></i>\
|
||||
</div>\
|
||||
</div>\
|
||||
<h2 class='ipsType_reset ipsAttach_title ipsType_medium ipsTruncate ipsTruncate_line' data-role='title'>{{title}}</h2>\
|
||||
<p class='ipsType_light'>{{size}} · <span data-role='status'>{{statusText}}</span></p>\
|
||||
<div class='ipsUploader_rowMeta ipsFlex ipsFlex-flex:11 ipsFlex-fd:column ipsFlex-jc:center ipsFlex-ai:start'>\
|
||||
<h2 class='ipsUploader_rowTitle ipsMargin:none ipsType_reset ipsAttach_title ipsTruncate ipsTruncate_line' data-role='title'>{{title}}</h2>\
|
||||
<p class='ipsDataItem_meta ipsType_medium ipsType_light'>\
|
||||
{{size}} {{#statusText}}· <span class='ipsType_light' data-role='status'>{{statusText}}</span>{{/statusText}}\
|
||||
</p>\
|
||||
{{#status}}<span class='ipsAttachment_progress'><span data-role='progressbar'></span></span>{{/status}}\
|
||||
</div>\
|
||||
<div data-role='deleteFileWrapper'>\
|
||||
<input type='hidden' name='{{field_name}}_keep[{{id}}]' value='1'>\
|
||||
<a href='#' data-role='deleteFile' class='ipsUploader__rowDelete' data-ipsTooltip title='{{#lang}}removeProductImage{{/lang}}'>\
|
||||
×\
|
||||
</a>\
|
||||
</div>\
|
||||
<label for='{{field_name}}_primary_image' class='cNexusPrimaryRadio' data-ipsTooltip title='{{#lang}}makePrimaryProductImage{{/lang}}'>\
|
||||
<span class='ipsCustomInput'>\
|
||||
<input type='radio' name='{{field_name}}_primary_image' value='{{id}}' {{#default}}checked{{/default}}>\
|
||||
<span></span>\
|
||||
</span>\
|
||||
{{#lang}}makePrimary{{/lang}}\
|
||||
</label>\
|
||||
</div>\
|
||||
");
|
||||
]]></file>
|
||||
<file javascript_app="nexus" javascript_location="front" javascript_path="templates" javascript_name="ips.templates.store.js" javascript_type="template" javascript_version="105100" javascript_position="1000050"><![CDATA[ips.templates.set('nexus.store.productImage', " \
|
||||
|
||||
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', " \
|
||||
<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="105100" 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="106107" 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="105100">
|
||||
<app key="nexus" version="106107">
|
||||
<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>
|
||||
@@ -30,8 +30,11 @@
|
||||
<word key="__indefart_product" js="0">a product</word>
|
||||
<word key="__indefart_product_reviews" js="0">a product review</word>
|
||||
<word key="__defart_support_request" js="0">support request</word>
|
||||
<word key="__defart_support_request_plural" js="0">support {!#[1:request][?:requests]}</word>
|
||||
<word key="__defart_product_reviews" js="0">product review</word>
|
||||
<word key="__defart_product_reviews_plural" js="0">product {!#[1:review][?:reviews]}</word>
|
||||
<word key="__defart_product" js="0">product</word>
|
||||
<word key="__defart_product_plural" js="0">{!#[1:product][?:products]}</word>
|
||||
<word key="plus_tax_rate" js="0"> + %s</word>
|
||||
<word key="complete_profile_app__nexus_CustomerFields" js="0">Customer Fields</word>
|
||||
<word key="profile_step_subaction_customer_fields" js="0">Fields</word>
|
||||
@@ -39,6 +42,7 @@
|
||||
<word key="product_pl" js="0">Products</word>
|
||||
<word key="product_pl_lc" js="0">products</word>
|
||||
<word key="product_groups" js="0">Product Groups</word>
|
||||
<word key="product_groups_sg" js="0">Product Group</word>
|
||||
<word key="search_contextual_item_product_groups" js="0">This Product Group</word>
|
||||
<word key="search_contextual_item_product" js="0">This Product</word>
|
||||
<word key="mass_manage_productgroups" js="0">Move/Delete Products</word>
|
||||
@@ -233,6 +237,7 @@
|
||||
<word key="manual_instructions" js="0">Instructions</word>
|
||||
<word key="manual_instructions_desc" js="0">Provide address to send check or bank account details for bank wire or any other instructions for submitting payment manually.</word>
|
||||
<word key="manual_gateway_description_placeholder" js="0">Click to add description...</word>
|
||||
<word key="manual_details" js="0"></word>
|
||||
<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>
|
||||
@@ -712,6 +717,9 @@
|
||||
<word key="invoice_timeline_invoice_exp_time" js="0">{# [1:day][?:days]} after invoice was generated</word>
|
||||
<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="invoice_track" js="0">Track</word>
|
||||
<word key="invoice_untrack" js="0">Untrack</word>
|
||||
<word key="ba_gw_id" js="0">Subscription ID</word>
|
||||
<word key="ba_started" js="0">Creation Date</word>
|
||||
<word key="ba_next_cycle" js="0">Next Payment</word>
|
||||
@@ -735,6 +743,7 @@
|
||||
<word key="billing_agreement_suspend_confirm" js="0">Payments will stop being taken automatically. If the Subscription is not reactivated before the purchases' expiry date, they will expire without a renewal invoice being generated automatically.</word>
|
||||
<word key="billing_agreement_reactivate" js="0">Reactivate</word>
|
||||
<word key="billing_agreement_cancel" js="0">Cancel</word>
|
||||
<word key="billing_agreement_check" js="0">Check</word>
|
||||
<word key="r__billingagreements" js="0">PayPal Subscriptions</word>
|
||||
<word key="r__billingagreements_view" js="0">Can view PayPal Subscriptions?</word>
|
||||
<word key="r__billingagreements_manage" js="0">Can suspend, reactivate and cancel PayPal Subscriptions?</word>
|
||||
@@ -997,8 +1006,8 @@
|
||||
<word key="try_another_payment" js="0">Try another payment method</word>
|
||||
<word key="split_payment" js="0">Split Payment</word>
|
||||
<word key="split_payment_title" js="0">Pay for this order using multiple payment methods</word>
|
||||
<word key="manage_orders_in_billing" js="0"><![CDATA[You can manage your orders in <a href='{internal.app=nexus&module=clients&controller=invoices}'>Your Orders</a>]]></word>
|
||||
<word key="track_orders_in_billing" js="0"><![CDATA[You can keep track of the status of this order in <a href='{internal.app=nexus&module=clients&controller=invoices}'>Your Orders</a>]]></word>
|
||||
<word key="manage_orders_in_billing" js="0"><![CDATA[You can manage your orders in <a href='{internal.front.app=nexus&module=clients&controller=invoices.clientsinvoices}'>Your Orders</a>]]></word>
|
||||
<word key="track_orders_in_billing" js="0"><![CDATA[You can keep track of the status of this order in <a href='{internal.front.app=nexus&module=clients&controller=invoices.clientsinvoices}'>Your Orders</a>]]></word>
|
||||
<word key="return_to_checkout" js="0">Return To Checkout</word>
|
||||
<word key="continue_to_registration" js="0">Continue to registration</word>
|
||||
<word key="registration_items_in_cart" js="0">You have {# [1:item][?:items]} in your cart</word>
|
||||
@@ -1373,6 +1382,7 @@
|
||||
<word key="mass_change_purchases_confirm" js="0">Started Mass Updates</word>
|
||||
<word key="mass_change_purchases_in_progress" js="0">Change / Cancel Purchases in Progress</word>
|
||||
<word key="mass_change_purchases_in_progress_text" js="0">Making changes to purchases of %s</word>
|
||||
<word key="can_not_reactivate" js="0">This purchase cannot be reactivated.</word>
|
||||
<word key="license_key" js="0">License Key</word>
|
||||
<word key="generate_new_key" js="0">Generate new key</word>
|
||||
<word key="lkey_using_x_of_unlimited_uses" js="0">Using %d of unlimited allowed uses</word>
|
||||
@@ -1410,8 +1420,13 @@
|
||||
<word key="payout__data_Manual" js="0">Payment Details</word>
|
||||
<word key="nexus_payout_min" js="0">Minimum Withdrawal</word>
|
||||
<word key="nexus_payout_maximum" js="0">Maximum Withdrawal</word>
|
||||
<word key="nexus_payout_confirm_title" js="0">Process Withdrawals</word>
|
||||
<word key="nexus_payout_proceed" js="0">Proceed</word>
|
||||
<word key="nexus_payout_confirm_text" js="0">Are you sure? This action cannot be undone.</word>
|
||||
<word key="max_withdrawl_exceeded" js="0">You have exceeded the maximum withdrawal amount for this currency</word>
|
||||
<word key="nexus_payout_approve" js="0">Withdrawals must be approved?</word>
|
||||
<word key="nexus_payout_unlimited_times" js="0">Unlimited number of Withdrawals?</word>
|
||||
<word key="nexus_payout_unlimited_times_desc" js="0">When disabled, the end user will need to cancel any active withdrawal request (per currency) before creating another.</word>
|
||||
<word key="po_status" js="0">Status</word>
|
||||
<word key="po_id" js="0">ID</word>
|
||||
<word key="po_gateway" js="0">Payment Method</word>
|
||||
@@ -1497,7 +1512,6 @@
|
||||
<word key="r__customerfeedback_manage" js="0">Can manage customer feedback settings?</word>
|
||||
<word key="r__outgoingemail_manage" js="0">Can manage outgoing email settings?</word>
|
||||
<word key="r__incomingemail_manage" js="0">Can manage incoming email settings?</word>
|
||||
<word key="r__stats" js="0">Statistics</word>
|
||||
<word key="r__volume_manage" js="0">Can see new support request statistics?</word>
|
||||
<word key="r__requests_merge" js="0">Can merge support requests?</word>
|
||||
<word key="r__requests_split" js="0">Can split support requests?</word>
|
||||
@@ -2399,6 +2413,7 @@
|
||||
<word key="mailsub__nexus_giftVoucher" js="0">Gift Card</word>
|
||||
<word key="x_in_stock" js="0">{# [?:in stock]}</word>
|
||||
<word key="not_enough_in_stock" js="0">There is not enough stock to add that amount to your cart. Enter a quantity of %d or less.</word>
|
||||
<word key="not_enough_in_stock_checkout" js="0">There is not enough stock to fulfill your order. There {!#[1:is][?:are] #} of %s remaining in stock.</word>
|
||||
<word key="add_to_cart" js="0">Add to cart</word>
|
||||
<word key="in_stock" js="0">In Stock</word>
|
||||
<word key="out_of_stock" js="0">Out of Stock</word>
|
||||
@@ -2594,7 +2609,7 @@
|
||||
<word key="altcontact_add" js="0">Add New Contact</word>
|
||||
<word key="altcontact_add_title" js="0">Add a new alternate contact to your account</word>
|
||||
<word key="altcontact_email" js="0">Email Address</word>
|
||||
<word key="altcontact_email_desc" js="0"><![CDATA[If the user does not already have an account, they first need to <a href='{internal.app=core&module=system&controller=register}'>create one</a>.]]></word>
|
||||
<word key="altcontact_email_desc" js="0"><![CDATA[If the user does not already have an account, they first need to <a href='{internal.front.app=core&module=system&controller=register.register}'>create one</a>.]]></word>
|
||||
<word key="altcontact_email_error" js="0">There is not an account with that email address.</word>
|
||||
<word key="altcontact_email_self" js="0">You cannot add yourself as an alternative contact.</word>
|
||||
<word key="altcontact_already_exists" js="0">That user is already one of your alternative contacts.</word>
|
||||
@@ -2605,7 +2620,7 @@
|
||||
<word key="altcontact_support" js="0">Also allow this contact to view other support requests not related to the selected purchases?</word>
|
||||
<word key="altcontact_support_desc" js="0">The user will be able to see and reply to all support requests on your account. They will also be able to contact support from your account without having to associate the request with one of the selected purchases.</word>
|
||||
<word key="altcontact_edit" js="0">Edit Alternate Contact</word>
|
||||
<word key="altcontact_none" js="0"><![CDATA[You don't have any alternative contacts set up. Would you like to <a href='{internal.app=nexus&module=clients&controller=alternatives&do=form}' data-ipsDialog data-ipsDialog-size='medium' data-ipsDialog-title='%s'>set one up now</a>?]]></word>
|
||||
<word key="altcontact_none" js="0"><![CDATA[You don't have any alternative contacts set up. Would you like to <a href='{internal.front.app=nexus&module=clients&controller=alternatives&do=form.clientsalternatives}' data-ipsDialog data-ipsDialog-size='medium' data-ipsDialog-title='%s'>set one up now</a>?]]></word>
|
||||
<word key="altcontact_authorized" js="0">Authorized Users</word>
|
||||
<word key="altcontact_can" js="0">can</word>
|
||||
<word key="altcontact_perm_manage" js="0">View {# [1:purchase][?:purchases]} and view and submit support requests related to {!# [1:it][?:them]}</word>
|
||||
@@ -2749,6 +2764,7 @@
|
||||
<word key="r__donations" js="0">Donations</word>
|
||||
<word key="r__donations_manage" js="0">Can view donations list?</word>
|
||||
<word key="r__donationgoals_manage" js="0">Can manage donation goals?</word>
|
||||
<word key="nexus_no_donations_found" js="0">There are no donations currently</word>
|
||||
<word key="enhancements__nexus_EasyPost" js="0">EasyPost</word>
|
||||
<word key="enhancements__nexus_EasyPost_desc" js="0">Easy shipping with USPS, UPS, DHL, FedEx and others.</word>
|
||||
<word key="easypost_enable" js="0">Enable EasyPost integration?</word>
|
||||
@@ -3309,6 +3325,8 @@ At this stage, no further action is required from you. We will send you an addit
|
||||
<word key="emailtpl_unsubscribeStaffNotify" js="0">Staff notification unsubscribe</word>
|
||||
<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="emailtpl_invoiceNotify" js="0">Tracked invoice marked paid</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>
|
||||
@@ -3322,6 +3340,7 @@ At this stage, no further action is required from you. We will send you an addit
|
||||
<word key="block_featuredProduct" js="0">Featured Products</word>
|
||||
<word key="block_featuredProduct_desc" js="0">Shows featured products</word>
|
||||
<word key="widget_group" js="0">Category</word>
|
||||
<word key="view_this_product" js="0">View the product</word>
|
||||
<word key="modperms__core_Content_nexus_Package_Review" js="0">Product Reviews</word>
|
||||
<word key="can_edit_product_reviews" js="0">Can edit product reviews?</word>
|
||||
<word key="can_delete_product_reviews" js="0">Can delete product reviews?</word>
|
||||
@@ -3379,6 +3398,7 @@ At this stage, no further action is required from you. We will send you an addit
|
||||
<word key="r__subscribers" js="0">Subscribers</word>
|
||||
<word key="r__subscribers_manage" js="0">Can manage subscribers?</word>
|
||||
<word key="nexus_subscriptions" js="0">Subscriptions</word>
|
||||
<word key="not_with_existing_subscription" js="0">This purchase cannot be reactivated because this customer already has an existing subscription.</word>
|
||||
<word key="sp_name" js="0">Name</word>
|
||||
<word key="sp_enabled" js="0">Allow Purchases?</word>
|
||||
<word key="sp_enabled_desc" js="0">Even if disabled, users who have already purchased this plan will still have all the benefits given to them by purchasing and be able to renew, however users who have purchased other subscription plans will not be able to upgrade/downgrade to this plan.</word>
|
||||
@@ -3509,7 +3529,7 @@ At this stage, no further action is required from you. We will send you an addit
|
||||
<word key="block_subscriptions" js="0">Member Subscriptions</word>
|
||||
<word key="block_subscriptions_desc" js="0">Show a list of available subscription packages to customers not yet subscribed</word>
|
||||
<word key="nexus_require_billing_subscriptions" js="0">Member Subscriptions</word>
|
||||
<word key="nexus_subs_non_available" js="0">There are not any subscriptions available at this time.</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_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>
|
||||
@@ -3587,6 +3607,16 @@ At this stage, no further action is required from you. We will send you an addit
|
||||
<word key="emailtpl_acp_notification_Advertisement" js="0">Advertisement pending approval admin notification</word>
|
||||
<word key="emailtpl_acp_notification_Shipment" js="0">Pending shipment admin notification</word>
|
||||
<word key="emailtpl_acp_notification_Withdrawal" js="0">Withdrawl request admin notification</word>
|
||||
<word key="achievement_filter_Subscriptions_node_prefix" js="0">Subscriptions</word>
|
||||
<word key="achievement_filter_Subscriptions_nth" js="0">Add a milestone condition</word>
|
||||
<word key="achievement_filter_Subscriptions" js="0">Add a subscription filter</word>
|
||||
<word key="achievement_filter_Subscription_nth_suffix" js="0"><![CDATA[<span data-role='th'>th</span> subscription]]></word>
|
||||
<word key="AchievementAction__Subscription" js="0">Member purchases a subscription</word>
|
||||
<word key="AchievementAction__Subscription_title" js="0">User purchased</word>
|
||||
<word key="AchievementAction__Subscription_title_generic" js="0">Subscription</word>
|
||||
<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="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>
|
||||
|
||||
@@ -4539,7 +4539,7 @@
|
||||
},
|
||||
"sf_max_input": {
|
||||
"name": "sf_max_input",
|
||||
"type": "SMALLINT",
|
||||
"type": "MEDIUMINT",
|
||||
"length": 6,
|
||||
"decimals": null,
|
||||
"values": [],
|
||||
@@ -4547,9 +4547,7 @@
|
||||
"default": "0",
|
||||
"comment": "",
|
||||
"unsigned": false,
|
||||
"zerofill": false,
|
||||
"auto_increment": false,
|
||||
"binary": false
|
||||
"auto_increment": false
|
||||
},
|
||||
"sf_input_format": {
|
||||
"name": "sf_input_format",
|
||||
@@ -10547,5 +10545,48 @@
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"nexus_invoice_tracker": {
|
||||
"name": "nexus_invoice_tracker",
|
||||
"columns": {
|
||||
"member_id": {
|
||||
"name": "member_id",
|
||||
"type": "BIGINT",
|
||||
"length": "20",
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": false,
|
||||
"default": null,
|
||||
"comment": "ID Number",
|
||||
"unsigned": true,
|
||||
"auto_increment": false
|
||||
},
|
||||
"invoice_id": {
|
||||
"name": "invoice_id",
|
||||
"type": "BIGINT",
|
||||
"length": null,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": false,
|
||||
"default": null,
|
||||
"comment": "",
|
||||
"unsigned": true,
|
||||
"auto_increment": false
|
||||
}
|
||||
},
|
||||
"indexes": {
|
||||
"PRIMARY": {
|
||||
"type": "primary",
|
||||
"name": "PRIMARY",
|
||||
"columns": [
|
||||
"member_id",
|
||||
"invoice_id"
|
||||
],
|
||||
"length": [
|
||||
null,
|
||||
null
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -359,6 +359,11 @@
|
||||
"default": "",
|
||||
"report": "bool"
|
||||
},
|
||||
{
|
||||
"key": "nexus_payout_unlimited_times",
|
||||
"default": "1",
|
||||
"report": "full"
|
||||
},
|
||||
{
|
||||
"key": "nexus_reg_force",
|
||||
"default": "0",
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"capture":"P0Y0M0DT1H0M0S","sendInvoiceWarnings":"P0Y0M0DT1H0M0S","generateRenewalInvoices":"P0Y0M0DT0H30M0S","expirePurchases":"P0Y0M0DT1H0M0S","expireInvoices":"P0Y0M0DT1H0M0S","supportAutoresolve":"P0Y0M0DT1H0M0S","supportAssignedReminder":"P0Y0M1DT0H0M0S","monitor":"P0Y0M0DT0H5M0S","terminateHosting":"P0Y0M1DT0H0M0S","expectedOutputMonitoring":"P0Y0M0DT0H30M0S","cartCleanup":"P0Y0M1DT0H0M0S"}
|
||||
{"capture":"P0Y0M0DT1H0M0S","sendInvoiceWarnings":"P0Y0M0DT1H0M0S","generateRenewalInvoices":"P0Y0M0DT0H30M0S","expirePurchases":"P0Y0M0DT1H0M0S","expireInvoices":"P0Y0M0DT1H0M0S","supportAutoresolve":"P0Y0M0DT1H0M0S","supportAssignedReminder":"P0Y0M1DT0H0M0S","monitor":"P0Y0M0DT0H5M0S","terminateHosting":"P0Y0M1DT0H0M0S","expectedOutputMonitoring":"P0Y0M0DT0H30M0S","cartCleanup":"P0Y0M1DT0H0M0S","billingAgreements":"P0Y0M0DT0H10M0S","gatewayPending":"P0Y0M0DT0H10M0S"}
|
||||
+152
-130
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<theme name="Default" author_name="Invision Power Services, Inc" author_url="https://www.invisioncommunity.com">
|
||||
<field sc_key="cm_store_view" sc_type="Select" sc_multiple="0" sc_updated="1588211797" sc_app="nexus" sc_default="grid" sc_tab_key="custom" sc_show_in_vse="0" sc_title="themesetting_cm_store_view" sc_order="11" sc_condition="">[{"key":"grid","value":"cm_store_view_grid"},{"key":"list","value":"cm_store_view_list"}]</field>
|
||||
<field sc_key="cm_store_view" sc_type="Select" sc_multiple="0" sc_updated="1507736128" 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="">[{"key":"grid","value":"cm_store_view_grid"},{"key":"list","value":"cm_store_view_list"}]</field>
|
||||
<template template_group="billingagreements" template_name="view" template_data="$billingAgreement, $purchases, $transactions" template_location="admin" template_app="nexus"><![CDATA[{{if $billingAgreement->status() == $billingAgreement::STATUS_ACTIVE and !$billingAgreement->next_cycle}}
|
||||
<p class="ipsMessage ipsMessage_warning">{lang="billing_agreement_run_failed" sprintf="$billingAgreement->acpUrl()->setQueryString( 'do', 'reconcile' )->csrf()"}</p>
|
||||
{{endif}}
|
||||
@@ -92,7 +92,7 @@
|
||||
{{endif}}
|
||||
</div>
|
||||
</div>]]></template>
|
||||
<template template_group="checkout" template_name="changeShippingAddressForm" template_data="$id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class='', $attributes=array(), $sidebar, $form=NULL" template_location="front" template_app="nexus"><![CDATA[<form accept-charset='utf-8' class="ipsForm {$class}" action="{$action}" method="post" {{if $uploadField}}enctype="multipart/form-data"{{endif}} {{foreach $attributes as $k => $v}}{$k}="{$v}"{{endforeach}} data-ipsForm>
|
||||
<template template_group="checkout" template_name="changeShippingAddressForm" template_data="$id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class='', $attributes=array(), $sidebar=NULL, $form=NULL" template_location="front" template_app="nexus"><![CDATA[<form accept-charset='utf-8' class="ipsForm {$class}" action="{$action}" method="post" {{if $uploadField}}enctype="multipart/form-data"{{endif}} {{foreach $attributes as $k => $v}}{$k}="{$v}"{{endforeach}} data-ipsForm>
|
||||
<input type="hidden" name="{$id}_submitted" value="1">
|
||||
{{foreach $hiddenValues as $k => $v}}
|
||||
{{if \is_array($v)}}
|
||||
@@ -228,7 +228,7 @@
|
||||
{template="checkoutOrderSummary" group="checkout" app="nexus" params="$invoice->summary()"}
|
||||
</div>
|
||||
</div>]]></template>
|
||||
<template template_group="checkout" template_name="checkoutShippingForm" template_data="$shippingAddress, $shippingAddressErrors, $id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class='', $attributes=array(), $sidebar, $form=NULL" template_location="front" template_app="nexus"><![CDATA[<form accept-charset='utf-8' class="ipsForm {$class}" action="{$action}" method="post" {{if $uploadField}}enctype="multipart/form-data"{{endif}} {{foreach $attributes as $k => $v}}{$k}="{$v}"{{endforeach}} data-ipsForm>
|
||||
<template template_group="checkout" template_name="checkoutShippingForm" template_data="$shippingAddress, $shippingAddressErrors, $id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class='', $attributes=array(), $sidebar=NULL, $form=NULL" template_location="front" template_app="nexus"><![CDATA[<form accept-charset='utf-8' class="ipsForm {$class}" action="{$action}" method="post" {{if $uploadField}}enctype="multipart/form-data"{{endif}} {{foreach $attributes as $k => $v}}{$k}="{$v}"{{endforeach}} data-ipsForm>
|
||||
<input type="hidden" name="{$id}_submitted" value="1">
|
||||
{{foreach $hiddenValues as $k => $v}}
|
||||
{{if \is_array($v)}}
|
||||
@@ -502,7 +502,7 @@
|
||||
{{else}}
|
||||
{{if isset( $overriddenRenewalTerms[ $rId ] )}}
|
||||
{money="$overriddenRenewalTerms[ $rId ]->cost->amount->multiply( new \IPS\Math\Number( (string) $item->quantity ) )" currency="$overriddenRenewalTerms[ $rId ]->cost->currency"}
|
||||
{{else}}
|
||||
{{elseif $item->renewalTerm}}
|
||||
{money="$item->renewalTerm->cost->amount->multiply( new \IPS\Math\Number( (string) $item->quantity ) )" currency="$item->renewalTerm->cost->currency"}
|
||||
{{endif}}
|
||||
{{endif}}
|
||||
@@ -542,7 +542,7 @@
|
||||
{{endif}}
|
||||
</div>
|
||||
</div>]]></template>
|
||||
<template template_group="checkout" template_name="couponForm" template_data="$id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class='', $attributes=array(), $sidebar, $form=NULL" template_location="front" template_app="nexus"><![CDATA[
|
||||
<template template_group="checkout" template_name="couponForm" template_data="$id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class='', $attributes=array(), $sidebar=NULL, $form=NULL" template_location="front" template_app="nexus"><![CDATA[
|
||||
<form accept-charset='utf-8' class="ipsForm {$class}" action="{$action}" method="post" {{if $uploadField}}enctype="multipart/form-data"{{endif}} {{foreach $attributes as $k => $v}}{$k}="{$v}"{{endforeach}} data-ipsForm data-role='couponForm'>
|
||||
<input type="hidden" name="{$id}_submitted" value="1">
|
||||
{{foreach $hiddenValues as $k => $v}}
|
||||
@@ -620,7 +620,7 @@
|
||||
{lang="new_customer_blurb"}
|
||||
</p>
|
||||
{{if \IPS\Login::registrationType() == 'redirect'}}
|
||||
<a href="{expression="\IPS\Settings::i()->allow_reg_target"}" class='ipsButton ipsButton_primary ipsButton_medium'>{lang="sign_up"}</a>
|
||||
<a href="{expression="\IPS\Settings::i()->allow_reg_target"}" target="_blank" rel="noopener" class='ipsButton ipsButton_primary ipsButton_medium'>{lang="sign_up"}</a>
|
||||
{{else}}
|
||||
<button data-action='newMember' class='ipsButton ipsButton_primary ipsButton_medium'>{lang="continue_as_new_member"}</button>
|
||||
{{endif}}
|
||||
@@ -683,7 +683,7 @@
|
||||
</div>
|
||||
</div>
|
||||
{{endif}}]]></template>
|
||||
<template template_group="checkout" template_name="customerInformationForm" template_data="$id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class='', $attributes=array(), $sidebar, $form=NULL" template_location="front" template_app="nexus"><![CDATA[
|
||||
<template template_group="checkout" template_name="customerInformationForm" template_data="$id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class='', $attributes=array(), $sidebar=NULL, $form=NULL" template_location="front" template_app="nexus"><![CDATA[
|
||||
<form accept-charset='utf-8' class="ipsForm {$class}" action="{$action}" method="post" {{if $uploadField}}enctype="multipart/form-data"{{endif}} {{foreach $attributes as $k => $v}}{$k}="{$v}"{{endforeach}} data-ipsForm>
|
||||
<input type="hidden" name="{$id}_submitted" value="1">
|
||||
{{foreach $hiddenValues as $k => $v}}
|
||||
@@ -783,7 +783,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</section>]]></template>
|
||||
<template template_group="checkout" template_name="paymentForm" template_data="$invoice, $amountToPay, $showSubmitButton, $id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class='', $attributes=array(), $sidebar, $form=NULL" template_location="front" template_app="nexus"><![CDATA[
|
||||
<template template_group="checkout" template_name="paymentForm" template_data="$invoice, $amountToPay, $showSubmitButton, $id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class='', $attributes=array(), $sidebar=NULL, $form=NULL" template_location="front" template_app="nexus"><![CDATA[
|
||||
<form accept-charset='utf-8' class="ipsForm {$class}" action="{$action}" method="post" {{foreach $attributes as $k => $v}}{$k}="{$v}"{{endforeach}} data-ipsForm>
|
||||
<input type="hidden" name="{$id}_submitted" value="1">
|
||||
{{foreach $hiddenValues as $k => $v}}
|
||||
@@ -977,7 +977,7 @@
|
||||
{{endif}}
|
||||
</ul>
|
||||
{{endif}}]]></template>
|
||||
<template template_group="clients" template_name="addresses" template_data="$billingAddress = NULL, $shippingAddress = NULL, $otherAddresses" template_location="front" template_app="nexus"><![CDATA[<a href='{url="app=nexus&module=clients&controller=addresses&do=form" seoTemplate="clientsaddresses"}' class='ipsPos_right ipsButton ipsButton_important ipsButton_verySmall' title="{lang="address_add_title"}" data-ipsDialog data-ipsDialog-size='narrow' data-ipsDialog-title='{lang="address_add"}'>{lang="address_add"}</a>
|
||||
<template template_group="clients" template_name="addresses" template_data="$billingAddress=NULL, $shippingAddress=NULL, $otherAddresses=array()" template_location="front" template_app="nexus"><![CDATA[<a href='{url="app=nexus&module=clients&controller=addresses&do=form" seoTemplate="clientsaddresses"}' class='ipsPos_right ipsButton ipsButton_important ipsButton_verySmall' title="{lang="address_add_title"}" data-ipsDialog data-ipsDialog-size='narrow' data-ipsDialog-title='{lang="address_add"}'>{lang="address_add"}</a>
|
||||
<h1 class='ipsType_pageTitle'>{lang="address_book"}</h1>
|
||||
|
||||
<p class='ipsType_reset ipsType_normal ipsSpacer_bottom'>
|
||||
@@ -1222,32 +1222,38 @@
|
||||
{lang="cards_info"}
|
||||
</p>
|
||||
|
||||
<ul class='ipsList_inline cNexusCards ipsSpacer_top ipsBox ipsPad'>
|
||||
{{foreach $cards as $card}}
|
||||
<li>
|
||||
{{if $card['card_type'] === 'paypal' or $card['card_type'] === 'venmo'}}
|
||||
<div class='cNexusCards_name'>{$card['card_number']}</div>
|
||||
{{else}}
|
||||
<span class='cNexusCards_number'>
|
||||
{{if $card['card_type'] == 'american_express' OR $card['card_type'] == 'diners_club'}}
|
||||
XXXX XXXXXX X{$card['card_number']}
|
||||
{{else}}
|
||||
XXXX XXXX XXXX {$card['card_number']}
|
||||
{{endif}}
|
||||
</span>
|
||||
{{endif}}
|
||||
{{if $card['card_type']}}
|
||||
<span class='cNexusCards_type cPayment cPayment_{$card['card_type']}'>{lang="card_type_{$card['card_type']}"}</span>
|
||||
{{endif}}
|
||||
{{if $card['card_expire']}}
|
||||
<span class='cNexusCards_expTitle'>{lang="cards_exp"}</span>
|
||||
<span class='cNexusCards_exp'>{$card['card_expire']}</span>
|
||||
{{endif}}
|
||||
|
||||
<a href="{url="app=nexus&module=clients&controller=cards&do=delete&id={$card['id']}" seoTemplate="clientscards" csrf="true"}" class='cNexusCards_delete' data-confirm data-ipsTooltip title='{lang="delete_this_card"}'>×</a>
|
||||
</li>
|
||||
{{endforeach}}
|
||||
</ul>]]></template>
|
||||
{{if \count( $cards )}}
|
||||
<ul class='ipsList_inline cNexusCards ipsSpacer_top ipsBox ipsPad'>
|
||||
{{foreach $cards as $card}}
|
||||
<li>
|
||||
{{if $card['card_type'] === 'paypal' or $card['card_type'] === 'venmo'}}
|
||||
<div class='cNexusCards_name'>{$card['card_number']}</div>
|
||||
{{else}}
|
||||
<span class='cNexusCards_number'>
|
||||
{{if $card['card_type'] == 'american_express' OR $card['card_type'] == 'diners_club'}}
|
||||
XXXX XXXXXX X{$card['card_number']}
|
||||
{{else}}
|
||||
XXXX XXXX XXXX {$card['card_number']}
|
||||
{{endif}}
|
||||
</span>
|
||||
{{endif}}
|
||||
{{if $card['card_type']}}
|
||||
<span class='cNexusCards_type cPayment cPayment_{$card['card_type']}'>{lang="card_type_{$card['card_type']}"}</span>
|
||||
{{endif}}
|
||||
{{if $card['card_expire']}}
|
||||
<span class='cNexusCards_expTitle'>{lang="cards_exp"}</span>
|
||||
<span class='cNexusCards_exp'>{$card['card_expire']}</span>
|
||||
{{endif}}
|
||||
|
||||
<a href="{url="app=nexus&module=clients&controller=cards&do=delete&id={$card['id']}" seoTemplate="clientscards" csrf="true"}" class='cNexusCards_delete' data-confirm data-ipsTooltip title='{lang="delete_this_card"}'>×</a>
|
||||
</li>
|
||||
{{endforeach}}
|
||||
</ul>
|
||||
{{else}}
|
||||
<p class='ipsType_light ipsType_large ipsType_center ipsMargin_top:double'>
|
||||
{lang="no_credit_cards"}
|
||||
</p>
|
||||
{{endif}}]]></template>
|
||||
<template template_group="clients" template_name="credit" template_data="$balance, $pastWithdrawals, $pastWithdrawalsPagination, $canWithdraw, $canTopup" template_location="front" template_app="nexus"><![CDATA[
|
||||
<h1 class='ipsType_pageTitle'>{lang="credit_title"}</h1>
|
||||
|
||||
@@ -2848,7 +2854,7 @@
|
||||
</li>
|
||||
</ol>
|
||||
</div>]]></template>
|
||||
<template template_group="forms" template_name="addPaymentMethodForm" template_data="$showSubmitButton, $id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class='', $attributes=array(), $sidebar, $form=NULL" template_location="global" template_app="nexus"><![CDATA[
|
||||
<template template_group="forms" template_name="addPaymentMethodForm" template_data="$showSubmitButton, $id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class='', $attributes=array(), $sidebar=NULL, $form=NULL" template_location="global" template_app="nexus"><![CDATA[
|
||||
<div class="ipsBox" data-controller="">
|
||||
<form accept-charset='utf-8' class="ipsForm {$class}" action="{$action}" method="post" {{if $uploadField}}enctype="multipart/form-data"{{endif}} {{foreach $attributes as $k => $v}}{$k}="{$v}"{{endforeach}} data-ipsForm>
|
||||
<input type="hidden" name="{$id}_submitted" value="1">
|
||||
@@ -3028,8 +3034,8 @@
|
||||
<input type="text" name="{$name}[postalCode]" placeholder="{lang="zip"}" value="{$value->postalCode}" data-role="postalCode" autocomplete="postal-code">
|
||||
</li>
|
||||
{{if $vat}}
|
||||
<li data-role="vatField">
|
||||
<input type="text" name="{$name}[vat]" placeholder="{lang="cm_checkout_vat_number"}" value="{{if isset( $value->vat ) and $value->vat}}{$value->vat}{{endif}}" data-role="vat">
|
||||
<li data-role="vatField" id="{$htmlId}_vat">
|
||||
<input type="text" name="{$name}[vat]" placeholder="{lang="cm_checkout_vat_number"}" value="{{if isset( $value->vat ) and $value->vat}}{$value->vat}{{endif}}" data-role="vat" class="ipsFieldRow_errorExclude">
|
||||
</li>
|
||||
{{endif}}
|
||||
</ul>]]></template>
|
||||
@@ -3220,12 +3226,12 @@
|
||||
<li data-step='{lang="price"}'>
|
||||
{{if $options['allCurrencies']}}
|
||||
{{foreach \IPS\nexus\Money::currencies() as $currency}}
|
||||
<input type="number" name="{$name}[amount_{$currency}]" size="4" data-decimals="2" data-decpoint="{expression="\IPS\Member::loggedIn()->language()->locale['decimal_point']"}" data-thousandsseparator="{expression="\IPS\Member::loggedIn()->language()->locale['thousands_sep']"}" step="0.01" value="{{if isset( $value->cost[ $currency ]->amount )}}{$value->cost[ $currency ]->amount}{{endif}}" class="ipsField_short ipsField_stackItemNoMargin"> {$currency}<br>
|
||||
<input type="number" name="{$name}[amount_{$currency}]" size="4" data-decimals="2" data-decpoint="{expression="\IPS\Member::loggedIn()->language()->locale['decimal_point']"}" data-thousandsseparator="{expression="\IPS\Member::loggedIn()->language()->locale['thousands_sep']"}" step="0.01" value="{{if $value AND isset( $value->cost[ $currency ]->amount )}}{$value->cost[ $currency ]->amount}{{endif}}" class="ipsField_short ipsField_stackItemNoMargin"> {$currency}<br>
|
||||
{{endforeach}}
|
||||
{{else}}
|
||||
<input type="number" name="{$name}[amount]" size="4" data-decimals="2" data-decpoint="{expression="\IPS\Member::loggedIn()->language()->locale['decimal_point']"}" data-thousandsseparator="{expression="\IPS\Member::loggedIn()->language()->locale['thousands_sep']"}" step="0.01" value="{{if $value}}{$value->cost->amountAsString()}{{endif}}" class="ipsField_short ipsField_stackItemNoMargin">
|
||||
{{if \count( \IPS\nexus\Money::currencies() ) === 1}}
|
||||
{$value->cost->currency}
|
||||
{{if $value}}{$value->cost->currency}{{else}}{expression="\IPS\nexus\Money::currencies()[0]"}{{endif}}
|
||||
{{else}}
|
||||
<select name="{$name}[currency]">
|
||||
{{foreach \IPS\nexus\Money::currencies() as $currency}}
|
||||
@@ -5756,7 +5762,7 @@
|
||||
|
||||
{$customFieldsForm|raw}
|
||||
]]></template>
|
||||
<template template_group="purchases" template_name="view" template_data="$purchase, $customer, $children, $invoices, $customFields" template_location="admin" template_app="nexus"><![CDATA[{{if $billingAgreement = $purchase->billing_agreement AND !$purchase->billing_agreement->canceled}}
|
||||
<template template_group="purchases" template_name="view" template_data="$purchase, $customer, $children, $customFields" template_location="admin" template_app="nexus"><![CDATA[{{if $billingAgreement = $purchase->billing_agreement AND !$purchase->billing_agreement->canceled}}
|
||||
<p class="ipsMessage ipsMessage_info">{lang="billing_agreement_purchase_info" sprintf="$billingAgreement->acpUrl()"}</p>
|
||||
{{endif}}
|
||||
<div class="ipsGrid">
|
||||
@@ -5917,7 +5923,11 @@
|
||||
</div>
|
||||
{{endif}}
|
||||
|
||||
{$invoices|raw}
|
||||
<div data-controller='core.admin.members.lazyLoadingProfileBlock' data-url='{url="app=nexus&module=customers&controller=purchases&do=showInvoices&id="}{$purchase->id}'>
|
||||
<div class="ipsSpacer_bottom ipsType_center">
|
||||
<img src="{resource="tiny_loading.gif" app="core"}">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>]]></template>
|
||||
<template template_group="shiporders" template_name="easypostTest" template_data="$easyPost" template_location="admin" template_app="nexus"><![CDATA[{{if isset( $easyPost['messages'] ) and \count( $easyPost['messages'] )}}
|
||||
@@ -6749,7 +6759,7 @@
|
||||
<div class='ipsBox ipsPadding:double' data-controller='nexus.front.store.giftCard' data-formatCurrencyUrl="{url="app=nexus&module=store&controller=gifts&do=formatCurrency"}">
|
||||
{$form|raw}
|
||||
</div>]]></template>
|
||||
<template template_group="store" template_name="giftCardForm" template_data="$id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class='', $attributes, $sidebar, $form" template_location="front" template_app="nexus"><![CDATA[{{if $form->error}}
|
||||
<template template_group="store" template_name="giftCardForm" template_data="$id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class='', $attributes=array(), $sidebar=NULL, $form=NULL" template_location="front" template_app="nexus"><![CDATA[{{if $form->error}}
|
||||
<div class="ipsMessage ipsMessage_error ipsSpacer_bottom">
|
||||
{$form->error}
|
||||
</div>
|
||||
@@ -7805,11 +7815,11 @@
|
||||
</div>
|
||||
<div class="cSubscription_desc ipsType_richText ipsType_normal ipsMargin_top">{$package->description}</div>
|
||||
</div>
|
||||
{{if $subscription}}
|
||||
{{if $subscription->package and $subscription->purchase}}
|
||||
{{$upgradeCost = $package->costToUpgrade( $subscription->package, \IPS\nexus\Customer::loggedIn() );}}
|
||||
{{if $subscription AND !$subscription->cancelled }}
|
||||
{{if $subscription->package and $subscription->purchase }}
|
||||
{{$upgradeCost = $subscription->active ? $package->costToUpgrade( $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->renewals and $subscription->purchase->can_reactivate ) or ( $pendingInvoice = $subscription->purchase->invoice_pending and $pendingInvoice->status === $pendingInvoice::STATUS_PENDING ) or $subscription->purchase->canCancel())}}
|
||||
{{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'>
|
||||
<ul class='ipsFlex ipsFlex-jc:center ipsFlex-ai:center ipsFlex-fw:wrap ipsGap:3 ipsGap_row:1'>
|
||||
{{if $pendingInvoice = $subscription->purchase->invoice_pending and $pendingInvoice->status === $pendingInvoice::STATUS_PENDING}}
|
||||
@@ -7824,7 +7834,7 @@
|
||||
{lang="purchase_renew_now"}
|
||||
</a>
|
||||
</li>
|
||||
{{elseif !$subscription->purchase->renewals and $renewOptions = json_decode( $package->renew_options, TRUE ) and \count( $renewOptions ) and $subscription->purchase->can_reactivate and ( !$subscription->purchase->billing_agreement or $subscription->purchase->billing_agreement->canceled )}}
|
||||
{{elseif $renewOptions = json_decode( $package->renew_options, TRUE ) and \count( $renewOptions ) and $subscription->purchase->can_reactivate and ( !$subscription->purchase->billing_agreement or $subscription->purchase->billing_agreement->canceled )}}
|
||||
<li>
|
||||
<a href="{url="app=nexus&module=subscriptions&controller=subscriptions&do=reactivate&id={$package->id}" base="front" csrf="true" seoTemplate="nexus_subscription"}" class='ipsButton ipsButton_small ipsButton_link ipsButton_fullWidth' title="{lang="purchase_renew_now_title"}">
|
||||
{lang="reactivate_package"}
|
||||
@@ -7837,6 +7847,12 @@
|
||||
{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>
|
||||
@@ -7930,13 +7946,9 @@
|
||||
</div>
|
||||
{{endif}}
|
||||
</div>
|
||||
{{if $table->pages > 1}}
|
||||
<div class="ipsButtonBar ipsPad_half ipsClearfix ipsClear ipsSpacer_bottom">
|
||||
<div data-role="tablePagination">
|
||||
{template="pagination" group="global" app="core" location="global" params="$table->baseUrl, $table->pages, $table->page, $table->limit, TRUE, $table->getPaginationKey()"}
|
||||
</div>
|
||||
<div class="ipsButtonBar ipsPad_half ipsClearfix ipsClear ipsSpacer_bottom {{if $table->pages <= 1}}ipsHide{{endif}}" data-role="tablePagination">
|
||||
{template="pagination" group="global" app="core" location="global" params="$table->baseUrl, $table->pages, $table->page, $table->limit, TRUE, $table->getPaginationKey()"}
|
||||
</div>
|
||||
{{endif}}
|
||||
|
||||
{{if \is_array( $rows ) AND \count( $rows )}}
|
||||
<div class='ipsClear {{foreach $table->classes as $class}}{$class} {{endforeach}}' id='elTable_{$table->uniqueId}' data-controller='nexus.front.subscriptions.main' data-role='tableRows'>
|
||||
@@ -7950,13 +7962,9 @@
|
||||
</p>
|
||||
{{endif}}
|
||||
|
||||
{{if $table->pages > 1}}
|
||||
<div class="ipsButtonBar ipsPad_half ipsClearfix ipsClear ipsSpacer_top">
|
||||
<div data-role="tablePagination">
|
||||
{template="pagination" group="global" app="core" location="global" params="$table->baseUrl, $table->pages, $table->page, $table->limit, TRUE, $table->getPaginationKey()"}
|
||||
</div>
|
||||
</div>
|
||||
{{endif}}]]></template>
|
||||
<div class="ipsButtonBar ipsPad_half ipsClearfix ipsClear ipsSpacer_top {{if $table->pages <= 1}}ipsHide{{endif}}" data-role="tablePagination">
|
||||
{template="pagination" group="global" app="core" location="global" params="$table->baseUrl, $table->pages, $table->page, $table->limit, TRUE, $table->getPaginationKey()"}
|
||||
</div>]]></template>
|
||||
<template template_group="support" template_name="create" template_data="$form" template_location="front" template_app="nexus"><![CDATA[
|
||||
{{if !\IPS\Request::i()->isAjax()}}
|
||||
{template="pageHeader" group="global" app="core" params="\IPS\Member::loggedIn()->language()->addToStack('create_new_request')"}
|
||||
@@ -7974,7 +7982,7 @@
|
||||
<hr class="ipsHr">
|
||||
{expression="nl2br( $rating['rating_note'] )"}
|
||||
</div>]]></template>
|
||||
<template template_group="support" template_name="filterForm" template_data="$id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class='', $attributes=array(), $sidebar, $form=NULL" template_location="admin" template_app="nexus"><![CDATA[<form accept-charset='utf-8' class="ipsForm ipsForm_fullWidth {$class}" action="{$action}" method="post" {{if $uploadField}}enctype="multipart/form-data"{{endif}} {{foreach $attributes as $k => $v}}{$k}="{$v}"{{endforeach}} data-ipsForm>
|
||||
<template template_group="support" template_name="filterForm" template_data="$id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class='', $attributes=array(), $sidebar=NULL, $form=NULL" template_location="admin" template_app="nexus"><![CDATA[<form accept-charset='utf-8' class="ipsForm ipsForm_fullWidth {$class}" action="{$action}" method="post" {{if $uploadField}}enctype="multipart/form-data"{{endif}} {{foreach $attributes as $k => $v}}{$k}="{$v}"{{endforeach}} data-ipsForm>
|
||||
<input type="hidden" name="{$id}_submitted" value="1">
|
||||
{{foreach $hiddenValues as $k => $v}}
|
||||
{{if \is_array($v)}}
|
||||
@@ -8057,7 +8065,7 @@
|
||||
</div>
|
||||
</form>
|
||||
</div>]]></template>
|
||||
<template template_group="support" template_name="filterFormStream" template_data="$input, $options" template_location="admin" template_app="nexus"><![CDATA[<div class="ipsTabs ipsTabs_stretch ipsClearfix ipsJS_show acpFormTabBar cNexusStream_tabs" id='elSupportTabs' data-ipsTabBar data-ipsTabBar-disableNav data-ipsTabBar-contentArea='#elRequestsTabContent'>
|
||||
<template template_group="support" template_name="filterFormStream" template_data="$input, $options" template_location="admin" template_app="nexus"><![CDATA[<div class="ipsTabs ipsClearfix ipsJS_show acpFormTabBar cNexusStream_tabs" id='elSupportTabs' data-ipsTabBar data-ipsTabBar-disableNav data-ipsTabBar-contentArea='#elRequestsTabContent'>
|
||||
<ul role="tablist">
|
||||
<a href="#elSupportTabs" data-action='expandTabs'><i class='fa fa-caret-down'></i></a>
|
||||
{{foreach $options as $stream}}
|
||||
@@ -8144,12 +8152,10 @@
|
||||
<input type="checkbox" name="{$name}[3]" {{if !$number}}checked{{endif}} data-control="unlimited" id="{$name}_unlimited">
|
||||
<span></span>
|
||||
</span> <label for="{$name}_unlimited" class='ipsField_unlimited'>{lang="do_not_highlight_requests"}</label>]]></template>
|
||||
<template template_group="support" template_name="latestFeedback" template_data="$table, $headers, $rows" template_location="admin" template_app="nexus"><![CDATA[{{if $table->pages > 1}}
|
||||
<div data-role="tablePagination">
|
||||
{template="pagination" group="global" app="core" location="global" params="$table->baseUrl, $table->pages, $table->page, $table->limit"}
|
||||
</div>
|
||||
<br>
|
||||
{{endif}}
|
||||
<template template_group="support" template_name="latestFeedback" template_data="$table, $headers, $rows" template_location="admin" template_app="nexus"><![CDATA[
|
||||
<div data-role="tablePagination" class='ipsSpacer_bottom {{if $table->pages <= 1}}ipsHide{{endif}}'>
|
||||
{template="pagination" group="global" app="core" location="global" params="$table->baseUrl, $table->pages, $table->page, $table->limit"}
|
||||
</div>
|
||||
|
||||
<ul class='ipsDataList ipsDataList_large'>
|
||||
{{foreach $rows as $row}}
|
||||
@@ -8172,11 +8178,9 @@
|
||||
{{endforeach}}
|
||||
</ul>
|
||||
|
||||
{{if $table->pages > 1}}
|
||||
<div data-role="tablePagination">
|
||||
{template="pagination" group="global" app="core" location="global" params="$table->baseUrl, $table->pages, $table->page, $table->limit"}
|
||||
</div>
|
||||
{{endif}}]]></template>
|
||||
<div data-role="tablePagination" {{if $table->pages <= 1}}class='ipsHide'{{endif}}>
|
||||
{template="pagination" group="global" app="core" location="global" params="$table->baseUrl, $table->pages, $table->page, $table->limit"}
|
||||
</div>]]></template>
|
||||
<template template_group="support" template_name="link" template_data="$request, $hovercard=TRUE" template_location="admin" template_app="nexus"><![CDATA[<a href="{$request->acpUrl()}" {{if $hovercard}}data-ipsHover data-ipsHover-target="{$request->acpUrl()->setQueryString( array( 'do' => 'hovercard' ) )}" data-ipsHover-width="750"{{endif}} data-role="supportLink">
|
||||
{{if $request->unread()}}
|
||||
<strong>{$request->title}</strong>
|
||||
@@ -8185,7 +8189,7 @@
|
||||
{{endif}}
|
||||
</a>
|
||||
<span class='ipsType_light ipsType_medium'>#{$request->id}</span>]]></template>
|
||||
<template template_group="support" template_name="myDepartments" template_data="$id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class='', $attributes=array(), $sidebar, $form=NULL" template_location="admin" template_app="nexus"><![CDATA[<div class="ipsAreaBackground ipsPad">
|
||||
<template template_group="support" template_name="myDepartments" template_data="$id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class='', $attributes=array(), $sidebar=NULL, $form=NULL" template_location="admin" template_app="nexus"><![CDATA[<div class="ipsAreaBackground ipsPad">
|
||||
<form accept-charset='utf-8' action="{$action}" method="post" {{foreach $attributes as $k => $v}}{$k}="{$v}"{{endforeach}} data-ipsForm>
|
||||
<input type="hidden" name="{$id}_submitted" value="1">
|
||||
{{foreach $hiddenValues as $k => $v}}
|
||||
@@ -8484,8 +8488,8 @@
|
||||
{{endif}}
|
||||
</div>
|
||||
</div>]]></template>
|
||||
<template template_group="support" template_name="noteForm" template_data="$request, $id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class='', $attributes=array(), $sidebar, $form=NULL" template_location="admin" template_app="nexus"><![CDATA[
|
||||
<form accept-charset='utf-8' class="cNexusSupportForm cNexusSupportForm_note ipsComposeArea ipsForm {$class}" action="{$action}" method="post" {{if $uploadField}}enctype="multipart/form-data"{{endif}} {{foreach $attributes as $k => $v}}{$k}="{$v}"{{endforeach}} data-ipsForm id='elNoteForm_form'>
|
||||
<template template_group="support" template_name="noteForm" template_data="$request, $id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class='', $attributes=array(), $sidebar=NULL, $form=NULL" template_location="admin" template_app="nexus"><![CDATA[
|
||||
<form accept-charset='utf-8' class="cNexusSupportForm cNexusSupportForm_note ipsAreaBackground_reset ipsPadding ipsComposeArea ipsForm {$class}" action="{$action}" method="post" {{if $uploadField}}enctype="multipart/form-data"{{endif}} {{foreach $attributes as $k => $v}}{$k}="{$v}"{{endforeach}} data-ipsForm id='elNoteForm_form'>
|
||||
<input type="hidden" name="{$id}_submitted" value="1">
|
||||
{{foreach $hiddenValues as $k => $v}}
|
||||
{{if \is_array($v)}}
|
||||
@@ -8507,7 +8511,7 @@
|
||||
</div>
|
||||
{{endif}}
|
||||
|
||||
<div class='ipsAreaBackground ipsClearfix ipsPad_half ipsType_right' data-ipsEditor-toolList>
|
||||
<div class='ipsClearfix ipsPadding_top ipsType_right' data-ipsEditor-toolList>
|
||||
<ul class='ipsList_inline ipsPos_left ipsType_left cNexusSupportForm_controls'>
|
||||
{{if isset( $elements['']['status'] )}}
|
||||
<li>
|
||||
@@ -8571,7 +8575,7 @@
|
||||
{{endif}}
|
||||
{{if \IPS\Member::loggedIn()->hasAcpRestriction( 'nexus', 'support', 'requests_reply_delete' )}}
|
||||
<li>
|
||||
<a href="{url="app=nexus&module=support&controller=request&do=deleteReply&id={$comment->id}"}" data-confirm data-ipsTooltip title='{lang="delete"}' class='ipsFaded ipsFaded_more ipsType_blendLinks ipsPos_right ipsType_normal'><i class='fa fa-times'></i></a>
|
||||
<a href="{url="app=nexus&module=support&controller=request&do=deleteReply&id={$comment->id}" csrf="true"}" data-confirm data-ipsTooltip title='{lang="delete"}' class='ipsFaded ipsFaded_more ipsType_blendLinks ipsPos_right ipsType_normal'><i class='fa fa-times'></i></a>
|
||||
</li>
|
||||
{{endif}}
|
||||
</ul>
|
||||
@@ -8878,7 +8882,7 @@
|
||||
|
||||
<section class='ipsBox cNexusSupportForm' data-controller='nexus.admin.support.replyArea'>
|
||||
<div>
|
||||
<div class="ipsTabs ipsTabs_small ipsClearfix" id="elSupportForm" data-ipsTabBar data-ipsTabBar-contentArea="#elSupportForm_content">
|
||||
<div class="ipsTabs ipsClearfix" id="elSupportForm" data-ipsTabBar data-ipsTabBar-contentArea="#elSupportForm_content">
|
||||
<a href="#elSupportForm" data-action="expandTabs"><i class="fa fa-caret-down"></i></a>
|
||||
<ul role="tablist">
|
||||
<li>
|
||||
@@ -9126,7 +9130,7 @@
|
||||
{{if $otherRequestsCount > 10}}
|
||||
<div class="ipsType_center">
|
||||
{{$param = $request->member ? "member={$request->member}" : "email={$request->email}";}}
|
||||
<a href="{url="app=nexus&module=support&controller=requests&{$param}"}" class="ipsButton ipsButton_verySmall ipsButton_normal">{lang="see_all_support" pluralize="$otherRequestsCount"}</a>
|
||||
<a href="{url="app=nexus&module=support&controller=requests&{$param}" csrf="true"}" class="ipsButton ipsButton_verySmall ipsButton_normal">{lang="see_all_support" pluralize="$otherRequestsCount"}</a>
|
||||
</div>
|
||||
{{endif}}
|
||||
</div>
|
||||
@@ -9397,10 +9401,18 @@
|
||||
<ul class='ipsList_reset'>
|
||||
{{foreach $actions as $action}}
|
||||
<li>
|
||||
<a href='#' class='ipsType_blendLinks' {{if isset( $action['menu'] )}}data-ipsMenu id='{{$id = mt_rand();}}{$id}'{{endif}} {{if isset( $action['data'] )}}{{foreach $action['data'] as $k => $v}}data-{$k}="{$v}" {{endforeach}}{{endif}}>
|
||||
<h3 class='ipsType_minorHeading'>{$action['tooltip']}</h3>
|
||||
{{if \count($action['menu']) > 1}}
|
||||
<a href='#' class='ipsType_blendLinks' {{if isset( $action['menu'] )}}data-ipsMenu id='{{$id = mt_rand();}}{$id}'{{endif}} {{if isset( $action['data'] )}}{{foreach $action['data'] as $k => $v}}data-{$k}="{$v}" {{endforeach}}{{endif}}>
|
||||
{{else}}
|
||||
<span>
|
||||
{{endif}}
|
||||
<h3 class='ipsType_minorHeading'>{$action['tooltip']}</h3>
|
||||
<p class='ipsType_reset cNexusSupportStatus_value ipsTruncate ipsTruncate_line'><span data-role="title">{lang="$action['title']"}</span></p>
|
||||
</a>
|
||||
{{if \count($action['menu']) > 1}}
|
||||
</a>
|
||||
{{else}}
|
||||
</span>
|
||||
{{endif}}
|
||||
{{if isset( $action['menu'] )}}
|
||||
<div id='{$id}_menu' class='ipsMenu {{if isset( $action['menuClass'] )}}{$action['menuClass']}{{endif}} ipsHide'>
|
||||
<ul>
|
||||
@@ -9655,8 +9667,8 @@
|
||||
<th class='ipsType_noBreak'> </th>
|
||||
<th class='ipsType_noBreak'>{lang="request"}</th>
|
||||
<th class='ipsType_noBreak'>{lang="r_status"}</th>
|
||||
<th class='ipsType_noBreak'>{lang="r_staff"}</th>
|
||||
<th class='ipsType_noBreak'>{lang="request_started_by"}</th>
|
||||
<th class='ipsType_noBreak ipsResponsive_hideTablet'>{lang="r_staff"}</th>
|
||||
<th class='ipsType_noBreak ipsResponsive_hideTablet'>{lang="request_started_by"}</th>
|
||||
<th class='ipsType_noBreak'>{lang="r_last_reply_by"}</th>
|
||||
<th class='ipsType_noBreak'> </th>
|
||||
<th class='ipsType_noBreak'> </th>
|
||||
@@ -9731,14 +9743,14 @@
|
||||
<td class="cNexusSupportTable_status">
|
||||
{template="status" group="support" params="$request->status" app="nexus"}
|
||||
</td>
|
||||
<td class="cNexusSupportTable_assignedTo">
|
||||
<td class="cNexusSupportTable_assignedTo ipsResponsive_hideTablet">
|
||||
{{if $request->staff}}
|
||||
<strong class="ipsType_success">
|
||||
{$request->staff->name}
|
||||
</strong>
|
||||
{{endif}}
|
||||
</td>
|
||||
<td class="cNexusSupportTable_customer ipsType_blendLinks">
|
||||
<td class="cNexusSupportTable_customer ipsType_blendLinks ipsResponsive_hideTablet">
|
||||
{{if $request->author()->member_id}}
|
||||
{template="userLink" group="global" params="$request->author()" app="nexus"}
|
||||
{{else}}
|
||||
@@ -9831,7 +9843,7 @@
|
||||
{$table|raw}]]></template>
|
||||
<template template_group="support" template_name="severity" template_data="$severity" template_location="admin" template_app="nexus"><![CDATA[<span class="cNexusSupportBadge ipsTruncate ipsTruncate_line" style="background-color: #{$severity->color}" data-ipsTooltip data-ipsTooltip-label="{$severity->_title}">{$severity->_title}</span>]]></template>
|
||||
<template template_group="support" template_name="staffReply" template_data="" template_location="admin" template_app="nexus"></template>
|
||||
<template template_group="support" template_name="staffReplyForm" template_data="$request, $id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class='', $attributes=array(), $sidebar, $form=NULL" template_location="admin" template_app="nexus"><![CDATA[
|
||||
<template template_group="support" template_name="staffReplyForm" template_data="$request, $id, $action, $elements, $hiddenValues, $actionButtons, $uploadField, $class='', $attributes=array(), $sidebar=NULL, $form=NULL" template_location="admin" template_app="nexus"><![CDATA[
|
||||
<form accept-charset='utf-8' class="cNexusSupportForm ipsForm {$class}" action="{$action}" method="post" {{if $uploadField}}enctype="multipart/form-data"{{endif}} {{foreach $attributes as $k => $v}}{$k}="{$v}"{{endforeach}} data-ipsForm id='elSupportReplyForm'>
|
||||
<input type="hidden" name="{$id}_submitted" value="1">
|
||||
{{foreach $hiddenValues as $k => $v}}
|
||||
@@ -9848,9 +9860,9 @@
|
||||
<input type="hidden" name="plupload" value="{expression="md5( mt_rand() )"}">
|
||||
{{endif}}
|
||||
|
||||
<div class='ipsComposeArea'>
|
||||
<div class='ipsComposeArea ipsAreaBackground_reset ipsPadding'>
|
||||
|
||||
<div class='ipsPad_half cNexusSupportForm_sendTo ipsJS_hide ipsClearfix' data-ipsEditor-toolList>
|
||||
<div class='ipsMargin_bottom cNexusSupportForm_sendTo ipsJS_hide ipsClearfix' data-ipsEditor-toolList>
|
||||
{{if isset( $elements['']['stock_action'] )}}
|
||||
<span class='ipsPos_right ipsResponsive_noFloat cNexusSupportForm_customAction'><i class='fa fa-flash ipsType_large ipsPos_middle' title='{lang="stock_actions"}' data-ipsTooltip></i> {$elements['']['stock_action']->html()|raw}</span>
|
||||
{{endif}}
|
||||
@@ -9890,7 +9902,7 @@
|
||||
{{endif}}
|
||||
</div>
|
||||
|
||||
<div class='ipsAreaBackground ipsClearfix ipsPad_half ipsType_right ipsJS_hide' data-ipsEditor-toolList>
|
||||
<div class='ipsClearfix ipsPadding_top ipsType_right ipsJS_hide' data-ipsEditor-toolList>
|
||||
<ul class='ipsList_inline ipsPos_left ipsType_left cNexusSupportForm_controls'>
|
||||
{{if isset( $elements['']['status'] )}}
|
||||
<li>
|
||||
@@ -9919,9 +9931,9 @@
|
||||
<li>
|
||||
<a href='#' class='ipsButton ipsButton_primary ipsButton_large ipsButton_narrow' id='elSupportReplyForm_more' data-ipsMenu data-ipsMenu-appendTo='#elSupportReplyForm'><i class='fa fa-caret-down'></i></a>
|
||||
<ul id='elSupportReplyForm_more_menu' class='ipsMenu ipsMenu_narrow ipsHide'>
|
||||
<li class='ipsMenu_item ipsPad_half'><button type='submit' class='ipsButton ipsButton_primary ipsButton_small ipsButton_fullWidth' name='goto' value='next'>{lang="reply_and_go_to_next"}</button></li>
|
||||
<li class='ipsMenu_item ipsPad_half'><button type='submit' class='ipsButton ipsButton_primary ipsButton_small ipsButton_fullWidth' name='goto' value='first'>{lang="reply_and_go_to_first"}</button></li>
|
||||
<li class='ipsMenu_item ipsPad_half'><button type='submit' class='ipsButton ipsButton_primary ipsButton_small ipsButton_fullWidth' name='goto' value='list'>{lang="reply_and_go_to_list"}</button></li>
|
||||
<li class='ipsMenu_item'><button type='submit' class='ipsButton ipsButton_link ipsButton_fullWidth' name='goto' value='next'>{lang="reply_and_go_to_next"}</button></li>
|
||||
<li class='ipsMenu_item'><button type='submit' class='ipsButton ipsButton_link ipsButton_fullWidth' name='goto' value='first'>{lang="reply_and_go_to_first"}</button></li>
|
||||
<li class='ipsMenu_item'><button type='submit' class='ipsButton ipsButton_link ipsButton_fullWidth' name='goto' value='list'>{lang="reply_and_go_to_list"}</button></li>
|
||||
</ul>
|
||||
</li>
|
||||
{{elseif $defaultAction == 'list'}}
|
||||
@@ -9929,9 +9941,9 @@
|
||||
<li>
|
||||
<a href='#' class='ipsButton ipsButton_primary ipsButton_large ipsButton_narrow' id='elSupportReplyForm_more' data-ipsMenu data-ipsMenu-appendTo='#elSupportReplyForm'><i class='fa fa-caret-down'></i></a>
|
||||
<ul id='elSupportReplyForm_more_menu' class='ipsMenu ipsMenu_narrow ipsHide'>
|
||||
<li class='ipsMenu_item ipsPad_half'><button type='submit' class='ipsButton ipsButton_primary ipsButton_small ipsButton_fullWidth'>{lang="reply_and_stay"}</button></li>
|
||||
<li class='ipsMenu_item ipsPad_half'><button type='submit' class='ipsButton ipsButton_primary ipsButton_small ipsButton_fullWidth' name='goto' value='next'>{lang="reply_and_go_to_next"}</button></li>
|
||||
<li class='ipsMenu_item ipsPad_half'><button type='submit' class='ipsButton ipsButton_primary ipsButton_small ipsButton_fullWidth' name='goto' value='first'>{lang="reply_and_go_to_first"}</button></li>
|
||||
<li class='ipsMenu_item'><button type='submit' class='ipsButton ipsButton_link ipsButton_fullWidth'>{lang="reply_and_stay"}</button></li>
|
||||
<li class='ipsMenu_item'><button type='submit' class='ipsButton ipsButton_link ipsButton_fullWidth' name='goto' value='next'>{lang="reply_and_go_to_next"}</button></li>
|
||||
<li class='ipsMenu_item'><button type='submit' class='ipsButton ipsButton_link ipsButton_fullWidth' name='goto' value='first'>{lang="reply_and_go_to_first"}</button></li>
|
||||
</ul>
|
||||
</li>
|
||||
{{elseif $defaultAction == 'next'}}
|
||||
@@ -9939,9 +9951,9 @@
|
||||
<li>
|
||||
<a href='#' class='ipsButton ipsButton_primary ipsButton_large ipsButton_narrow' id='elSupportReplyForm_more' data-ipsMenu data-ipsMenu-appendTo='#elSupportReplyForm'><i class='fa fa-caret-down'></i></a>
|
||||
<ul id='elSupportReplyForm_more_menu' class='ipsMenu ipsMenu_narrow ipsHide'>
|
||||
<li class='ipsMenu_item ipsPad_half'><button type='submit' class='ipsButton ipsButton_primary ipsButton_small ipsButton_fullWidth' name='goto' value='first'>{lang="reply_and_go_to_first"}</button></li>
|
||||
<li class='ipsMenu_item ipsPad_half'><button type='submit' class='ipsButton ipsButton_primary ipsButton_small ipsButton_fullWidth'>{lang="reply_and_stay"}</button></li>
|
||||
<li class='ipsMenu_item ipsPad_half'><button type='submit' class='ipsButton ipsButton_primary ipsButton_small ipsButton_fullWidth' name='goto' value='list'>{lang="reply_and_go_to_list"}</button></li>
|
||||
<li class='ipsMenu_item'><button type='submit' class='ipsButton ipsButton_link ipsButton_fullWidth' name='goto' value='first'>{lang="reply_and_go_to_first"}</button></li>
|
||||
<li class='ipsMenu_item'><button type='submit' class='ipsButton ipsButton_link ipsButton_fullWidth'>{lang="reply_and_stay"}</button></li>
|
||||
<li class='ipsMenu_item'><button type='submit' class='ipsButton ipsButton_link ipsButton_fullWidth' name='goto' value='list'>{lang="reply_and_go_to_list"}</button></li>
|
||||
</ul>
|
||||
</li>
|
||||
{{else}}
|
||||
@@ -9949,9 +9961,9 @@
|
||||
<li>
|
||||
<a href='#' class='ipsButton ipsButton_primary ipsButton_large ipsButton_narrow' id='elSupportReplyForm_more' data-ipsMenu data-ipsMenu-appendTo='#elSupportReplyForm'><i class='fa fa-caret-down'></i></a>
|
||||
<ul id='elSupportReplyForm_more_menu' class='ipsMenu ipsMenu_narrow ipsHide'>
|
||||
<li class='ipsMenu_item ipsPad_half'><button type='submit' class='ipsButton ipsButton_primary ipsButton_small ipsButton_fullWidth'>{lang="reply_and_stay"}</button></li>
|
||||
<li class='ipsMenu_item ipsPad_half'><button type='submit' class='ipsButton ipsButton_primary ipsButton_small ipsButton_fullWidth' name='goto' value='next'>{lang="reply_and_go_to_next"}</button></li>
|
||||
<li class='ipsMenu_item ipsPad_half'><button type='submit' class='ipsButton ipsButton_primary ipsButton_small ipsButton_fullWidth' name='goto' value='list'>{lang="reply_and_go_to_list"}</button></li>
|
||||
<li class='ipsMenu_item'><button type='submit' class='ipsButton ipsButton_link ipsButton_fullWidth'>{lang="reply_and_stay"}</button></li>
|
||||
<li class='ipsMenu_item'><button type='submit' class='ipsButton ipsButton_link ipsButton_fullWidth' name='goto' value='next'>{lang="reply_and_go_to_next"}</button></li>
|
||||
<li class='ipsMenu_item'><button type='submit' class='ipsButton ipsButton_link ipsButton_fullWidth' name='goto' value='list'>{lang="reply_and_go_to_list"}</button></li>
|
||||
</ul>
|
||||
</li>
|
||||
{{endif}}
|
||||
@@ -10680,7 +10692,7 @@
|
||||
</p>
|
||||
{{if $transaction->status === $transaction::STATUS_DISPUTED}}
|
||||
<div class="ipsSpacer_top">
|
||||
<a href="{$transaction->acpUrl()->setQueryString( array( 'do' => 'approve', 'r' => 'v' ) )}" class="ipsButton ipsButton_positive ipsButton_verySmall" data-confirm data-confirmSubMessage="{lang="transaction_approve_from_dispute"}">{lang="transaction_approve"}</a>
|
||||
<a href="{$transaction->acpUrl()->setQueryString( array( 'do' => 'approve', 'r' => 'v' ) )->csrf()}" class="ipsButton ipsButton_positive ipsButton_verySmall" data-confirm data-confirmSubMessage="{lang="transaction_approve_from_dispute"}">{lang="transaction_approve"}</a>
|
||||
<a href="{$transaction->acpUrl()->setQueryString( array( 'do' => 'refund', 'r' => 'v' ) )}" class="ipsButton ipsButton_negative ipsButton_verySmall" data-ipsDialog data-ipsDialog-title="{lang="transaction_refund_credit_title" sprintf="$transaction->amount"}">{lang="transaction_refund_credit"}</a>
|
||||
</div>
|
||||
{{endif}}
|
||||
@@ -11522,7 +11534,7 @@
|
||||
<a href='#' class='ipsCarousel_nav ipsHide' data-action='next'><i class='fa fa-chevron-right'></i></a>
|
||||
</div>
|
||||
{{endif}}
|
||||
|
||||
</div>
|
||||
]]></template>
|
||||
<template template_group="widgets" template_name="latestProducts" template_data="$packages, $orientation='vertical'" template_location="front" template_app="nexus"><![CDATA[{{if !empty( $packages ) }}
|
||||
<h3 class='ipsType_reset ipsWidget_title'>{lang="block_latestProducts"}</h3>
|
||||
@@ -11642,7 +11654,7 @@
|
||||
{{$package = \IPS\nexus\Package::load( $review->item()->id );}}
|
||||
<li class='ipsDataItem cNexusWidgetProduct ipsClearfix'>
|
||||
<div class='ipsPhotoPanel ipsPhotoPanel_mini'>
|
||||
<a href='{$package->url()}' class='ipsPos_left cNexusProduct_image ipsThumb ipsThumb_tiny ipsThumb_bg' {{if $package->image}}style='background-image: url({backgroundimage="$package->image"})'{{endif}}>
|
||||
<a href='{$review->url()}' class='ipsPos_left cNexusProduct_image ipsThumb ipsThumb_tiny ipsThumb_bg' {{if $package->image}}style='background-image: url({backgroundimage="$package->image"})'{{endif}}>
|
||||
{{if $package->image}}
|
||||
<img src="{$package->image}" class='ipsImage' alt="{$package->_title}">
|
||||
{{else}}
|
||||
@@ -11652,7 +11664,7 @@
|
||||
<div>
|
||||
<div class='ipsType_break ipsContained'>
|
||||
<div class='ipsSpacer_bottom ipsSpacer_half'>
|
||||
<a href="{$review->item()->url()}" title='{lang="view_this_product" sprintf="$review->item()->title"}' class='ipsType_normal ipsType_blendLinks'>{$review->item()->title}</a><br>
|
||||
<a href="{$review->url()}" title='{lang="view_this_product" sprintf="$review->item()->title"}' class='ipsType_normal ipsType_blendLinks'>{$review->item()->title}</a><br>
|
||||
<span class='cNexusWidgetPrice'>{$package->price()}</span>
|
||||
</div>
|
||||
|
||||
@@ -11678,7 +11690,7 @@
|
||||
{{$package = \IPS\nexus\Package::load( $review->item()->id );}}
|
||||
<li class='ipsDataItem cNexusWidgetProduct ipsClearfix'>
|
||||
<div class='ipsPhotoPanel ipsPhotoPanel_large'>
|
||||
<a href='{$package->url()}' class='ipsPos_left cNexusProduct_image ipsThumb ipsThumb_small ipsThumb_bg' {{if $package->image}}style='background-image: url({backgroundimage="$package->image"})'{{endif}}>
|
||||
<a href='{$review->url()}' class='ipsPos_left cNexusProduct_image ipsThumb ipsThumb_small ipsThumb_bg' {{if $package->image}}style='background-image: url({backgroundimage="$package->image"})'{{endif}}>
|
||||
{{if $package->image}}
|
||||
<img src="{$package->image}" class='ipsImage' alt="{$package->_title}">
|
||||
{{else}}
|
||||
@@ -11688,7 +11700,7 @@
|
||||
<div>
|
||||
<div class='ipsType_break ipsContained'>
|
||||
<div class='ipsSpacer_bottom ipsSpacer_half'>
|
||||
<a href="{$review->item()->url()}" title='{lang="view_this_product" sprintf="$review->item()->title"}' class='ipsType_normal ipsType_blendLinks'>{$review->item()->title}</a><br>
|
||||
<a href="{$review->url()}" title='{lang="view_this_product" sprintf="$review->item()->title"}' class='ipsType_normal ipsType_blendLinks'>{$review->item()->title}</a><br>
|
||||
<span class='cNexusWidgetPrice'>{$package->price()}</span>
|
||||
</div>
|
||||
|
||||
@@ -12740,7 +12752,25 @@ ul.cInvoiceUnpaidConsequences ul {
|
||||
.cNexusActionBadge_off {
|
||||
background: #ececec;
|
||||
background: var(--c3);
|
||||
}]]></css>
|
||||
}
|
||||
|
||||
.cNexusPrimaryRadio {
|
||||
background: rgb(var(--theme-area_background_reset));
|
||||
border-radius: 40px;
|
||||
position: absolute;
|
||||
top: 110px;
|
||||
left: var(--sp-3);
|
||||
padding: var(--sp-1) var(--sp-2) var(--sp-1) var(--sp-1);
|
||||
font-size: {fontsize="11"} !important;
|
||||
}
|
||||
|
||||
.cNexusPrimaryRadio .ipsCustomInput {
|
||||
margin-right: 2px;
|
||||
}
|
||||
|
||||
.ipsUploader__row.ipsAttach_error .cNexusPrimaryRadio {
|
||||
display: none;
|
||||
}]]></css>
|
||||
<css css_location="front" css_app="nexus" css_attributes="" css_path="." css_name="nexus.css"><![CDATA[.cNexusPrice {
|
||||
color: rgb( var(--theme-price) );
|
||||
}
|
||||
@@ -13491,7 +13521,7 @@ html[dir="rtl"] .cNexusStep_block .ipsColumn_fluid {
|
||||
height: 40px;
|
||||
font-size: 26px;
|
||||
padding-top: 2px;
|
||||
z-index: 5000;
|
||||
z-index: 1000;
|
||||
border-radius: 2px 2px 0 0;
|
||||
}
|
||||
html[dir="ltr"] .cSubscriptions .cSubscriptionActive {
|
||||
@@ -13916,7 +13946,7 @@ html[dir="rtl"] .cNexusStream_count {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#elNexusRequestControls li a {
|
||||
#elNexusRequestControls li a, #elNexusRequestControls li > span {
|
||||
display: block;
|
||||
position: relative;
|
||||
padding: 10px 15px 10px 10px;
|
||||
@@ -13991,10 +14021,6 @@ html[dir="rtl"] .cNexusStream_count {
|
||||
}
|
||||
|
||||
/* Reset some tab styles specifically for the ticket view page */
|
||||
#elSupportForm {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.cNexusSupportForm .ipsTabs_panels.ipsTabs_contained .ipsTabs_panel,
|
||||
.cNexusSupportRequest_metaInfo .ipsTabs_small {
|
||||
padding: 0;
|
||||
@@ -14006,23 +14032,17 @@ html[dir="rtl"] .cNexusStream_count {
|
||||
border: 0 !important;
|
||||
}*/
|
||||
|
||||
.cNexusSupportForm_message .ipsComposeArea_editor {
|
||||
padding: 0 !important;
|
||||
}
|
||||
|
||||
/* Special classes for the note reply form */
|
||||
.cNexusSupportForm_note .ipsTabs_contained {
|
||||
border-color: #ecdcb9;
|
||||
}
|
||||
|
||||
.cNexusSupportForm_note .ipsAreaBackground,
|
||||
.cNexusSupportForm_note,
|
||||
.cNexusSupportForm_note .ipsTabs {
|
||||
background: #ecd2ab;
|
||||
}
|
||||
|
||||
.cNexusSupportForm_note .ipsType_minorHeading {
|
||||
color: #765d38;
|
||||
.cNexusSupportForm_note .ipsButton_primary {
|
||||
background: #b38034;
|
||||
}
|
||||
|
||||
.cNexusSupportForm_note .ipsTabs .ipsTabs_item:not( .ipsTabs_activeItem ) {
|
||||
@@ -14034,11 +14054,6 @@ html[dir="rtl"] .cNexusStream_count {
|
||||
color: #765d38;
|
||||
}
|
||||
|
||||
.cNexusSupportForm_sendTo {
|
||||
border-bottom: 1px solid #ebebeb;
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
.cNexusSupportForm_sendTo .ipsForm > li {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
@@ -14054,6 +14069,13 @@ html[dir="rtl"] .cNexusSupportForm_sendTo .ipsForm_horizontal .ipsFieldRow:not(
|
||||
margin-right: 100px;
|
||||
}
|
||||
|
||||
.cNexusSupportForm_buttons{
|
||||
padding: 0;
|
||||
border-width: 0;
|
||||
box-shadow: none;
|
||||
background: none;
|
||||
}
|
||||
|
||||
.cNexusTicketSort {
|
||||
width: 30% !important;
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
"sc_tab_key": "custom",
|
||||
"sc_show_in_vse": 0,
|
||||
"sc_title": "themesetting_cm_store_view",
|
||||
"sc_order": 11,
|
||||
"sc_order": 12,
|
||||
"sc_condition": null
|
||||
}
|
||||
]
|
||||
@@ -382,6 +382,7 @@
|
||||
"104067": "4.4.10",
|
||||
"104068": "4.4.10",
|
||||
"104069": "4.4.10",
|
||||
"104070": "4.4.11",
|
||||
"105013": "4.5.0 Beta 1",
|
||||
"105014": "4.5.0 Beta 1",
|
||||
"105015": "4.5.0 Beta 2",
|
||||
@@ -402,5 +403,42 @@
|
||||
"105030": "4.5.0 Beta 11",
|
||||
"105031": "4.5.0 Beta 11",
|
||||
"105032": "4.5.0 Beta 12",
|
||||
"105100": "4.5.0"
|
||||
"105100": "4.5.0",
|
||||
"105101": "4.5.0",
|
||||
"105102": "4.5.1 Beta 1",
|
||||
"105103": "4.5.1 Beta 1",
|
||||
"105104": "4.5.1 Beta 2",
|
||||
"105105": "4.5.1 Beta 3",
|
||||
"105106": "4.5.1",
|
||||
"105107": "4.5.2",
|
||||
"105108": "4.5.2",
|
||||
"105109": "4.5.2",
|
||||
"105110": "4.5.2",
|
||||
"105111": "4.5.2",
|
||||
"105112": "4.5.3",
|
||||
"105113": "4.5.3",
|
||||
"105114": "4.5.3",
|
||||
"105115": "4.5.3",
|
||||
"105116": "4.5.4",
|
||||
"105117": "4.5.4",
|
||||
"105118": "4.5.4",
|
||||
"105119": "4.5.4",
|
||||
"105120": "4.5.4",
|
||||
"105121": "4.5.4",
|
||||
"105122": "4.5.4",
|
||||
"105123": "4.5.4",
|
||||
"105124": "4.5.4.1",
|
||||
"105125": "4.5.4.2",
|
||||
"105126": "4.5.4.2",
|
||||
"105127": "4.5.4.2",
|
||||
"105128": "4.5.4.2",
|
||||
"105129": "4.5.4.2",
|
||||
"105130": "4.5.4.2",
|
||||
"106100": "4.6.0 Beta 1",
|
||||
"106101": "4.6.0 Beta 1.1",
|
||||
"106103": "4.6.0 Beta 2",
|
||||
"106104": "4.6.0 Beta 3",
|
||||
"106105": "4.6.0 Beta 3.1",
|
||||
"106106": "4.6.0 Beta 4",
|
||||
"106107": "4.6.0"
|
||||
}
|
||||
@@ -0,0 +1,270 @@
|
||||
<?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 25 Mar 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 _Subscription extends \IPS\core\Achievements\Actions\AbstractAchievementAction // NOTE: Other classes exist to provided bases for common situations, like where node-based filters will be required
|
||||
{
|
||||
/**
|
||||
* Can use this rule?
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function canUse(): bool
|
||||
{
|
||||
return (bool) parent::canUse() and \IPS\Settings::i()->nexus_subs_enabled;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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['subscriptions'] = new \IPS\Helpers\Form\Node( 'achievement_filter_Subscriptions', ( $filters and isset( $filters['subscriptions'] ) and $filters['subscriptions'] ) ? $filters['subscriptions'] : 0, FALSE, [
|
||||
'url' => $url,
|
||||
'class' => 'IPS\nexus\Subscription\Package',
|
||||
'showAllNodes' => TRUE,
|
||||
'multiple' => TRUE,
|
||||
], NULL, \IPS\Member::loggedIn()->language()->addToStack( 'achievement_filter_Subscriptions_node_prefix', FALSE, [ 'sprintf' => [
|
||||
\IPS\Member::loggedIn()->language()->addToStack( 'nexus_sub_package_id', FALSE ),
|
||||
\IPS\Member::loggedIn()->language()->addToStack( 'calendars_sg', FALSE, [ 'strtolower' => TRUE ] )
|
||||
] ] ) );
|
||||
|
||||
$return['subscriptions_active'] = new \IPS\Helpers\Form\YesNo( 'achievement_filter_Subscriptions_active', $filters and isset( $filters['subscriptions_active'] ) and $filters['subscriptions_active'], FALSE, [],NULL,
|
||||
\IPS\Member::loggedIn()->language()->addToStack( 'nexus_sub_active', FALSE )
|
||||
);
|
||||
|
||||
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_Subscriptions'] ) )
|
||||
{
|
||||
$return['subscriptions'] = array_keys( $values['achievement_filter_Subscriptions'] );
|
||||
}
|
||||
if ( isset( $values['achievement_filter_Subscriptions_active'] ) )
|
||||
{
|
||||
$return['subscriptions_active'] = $values['achievement_filter_Subscriptions_active'];
|
||||
}
|
||||
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['subscriptions'] ) )
|
||||
{
|
||||
if ( !\in_array( $extra->_id, $filters['subscriptions'] ) )
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
if ( isset( $filters['subscriptions_active'] ) )
|
||||
{
|
||||
foreach ( $filters['subscriptions'] as $id )
|
||||
{
|
||||
try
|
||||
{
|
||||
$package = \IPS\nexus\Subscription\Package::load( $id );
|
||||
\IPS\nexus\Subscription::loadByMemberAndPackage( $subject, $package, TRUE );
|
||||
}
|
||||
catch ( \OutOfRangeException $e ) {
|
||||
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.
|
||||
*
|
||||
* @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 (string) $extra->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
|
||||
{
|
||||
return "Subscription";
|
||||
}
|
||||
|
||||
/**
|
||||
* 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['subscriptions_active'] ) AND $rule->filters['subscriptions_active'] )
|
||||
{
|
||||
$conditions[] = \IPS\Member::loggedIn()->language()->addToStack( 'achievement_filter_Subscriptions_active');
|
||||
}
|
||||
else
|
||||
{
|
||||
$conditions[] = \IPS\Member::loggedIn()->language()->addToStack( 'achievement_filter_Subscriptions_node_prefix');
|
||||
}
|
||||
|
||||
if ( $nodeCondition = $this->_nodeFilterDescription( $rule ) )
|
||||
{
|
||||
$conditions[] = $nodeCondition;
|
||||
}
|
||||
|
||||
return \IPS\Theme::i()->getTemplate( 'achievements' )->ruleDescription(
|
||||
\IPS\Member::loggedIn()->language()->addToStack( 'AchievementAction__Subscription_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['subscriptions'] ) )
|
||||
{
|
||||
$nodeNames = [];
|
||||
foreach ( $rule->filters['subscriptions'] as $id )
|
||||
{
|
||||
try
|
||||
{
|
||||
$nodeNames[] = \IPS\nexus\Subscription\Package::load( $id )->_title;
|
||||
}
|
||||
catch ( \OutOfRangeException $e ) {}
|
||||
}
|
||||
|
||||
if ( $nodeNames )
|
||||
{
|
||||
return \IPS\Member::loggedIn()->language()->addToStack( 'achievements_filter_Subscription_type', FALSE, [
|
||||
'htmlsprintf' => [
|
||||
\IPS\Theme::i()->getTemplate( 'achievements' )->ruleDescriptionBadge( 'achievements_filter_Subscription_type',
|
||||
\count( $nodeNames ) === 1 ? $nodeNames[0] : \IPS\Member::loggedIn()->language()->addToStack( 'achievements_filter_Subscription_pl', FALSE, [ 'sprintf' => [
|
||||
\count( $nodeNames ),
|
||||
\IPS\Member::loggedIn()->language()->addToStack( 'nexus_sub_package_id', FALSE, [ 'strtolower' => TRUE ] )
|
||||
] ] ),
|
||||
\count( $nodeNames ) === 1 ? NULL : $nodeNames
|
||||
)
|
||||
],
|
||||
] );
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get rebuild data
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
static public function rebuildData()
|
||||
{
|
||||
return [ [
|
||||
'table' => 'nexus_member_subscriptions',
|
||||
'pkey' => 'sub_id',
|
||||
'date' => 'sub_start',
|
||||
'where' => [ ['sub_active=?', 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['member_id'] )->achievementAction( 'nexus', 'Subscription', \IPS\nexus\Subscription::load( $row['sub_id'] ) );
|
||||
}
|
||||
|
||||
}
|
||||
@@ -504,6 +504,10 @@ class _Support
|
||||
if ( !$file->isImage() )
|
||||
{
|
||||
$replacements["<fileStore.core_Attachment>/{$file}"] = \IPS\Settings::i()->base_url . "applications/core/interface/file/attachment.php?id={$attachment['attach_id']}";
|
||||
if ( $attachment['attach_security_key'] )
|
||||
{
|
||||
$replacements["<fileStore.core_Attachment>/{$file}"] .= "&key={$attachment['attach_security_key']}";
|
||||
}
|
||||
}
|
||||
|
||||
\IPS\Db::i()->insert( 'core_attachments_map', array(
|
||||
|
||||
@@ -89,7 +89,7 @@ class _Notes extends \IPS\core\MemberACPProfile\Block
|
||||
if ( \IPS\Member::loggedIn()->hasAcpRestriction( 'nexus', 'customers', 'customer_notes_delete' ) )
|
||||
{
|
||||
$return['delete'] = array(
|
||||
'link' => \IPS\Http\Url::internal("app=nexus&module=customers&controller=view&id={$this->member->member_id}")->setQueryString( array( 'do' => 'deleteNote', 'note_id' => $row['note_id'], 'support' => isset( \IPS\Request::i()->support ) ? \IPS\Request::i()->support : 0 ) ),
|
||||
'link' => \IPS\Http\Url::internal("app=nexus&module=customers&controller=view&id={$this->member->member_id}")->setQueryString( array( 'do' => 'deleteNote', 'note_id' => $row['note_id'], 'support' => isset( \IPS\Request::i()->support ) ? \IPS\Request::i()->support : 0 ) )->csrf(),
|
||||
'title' => 'delete',
|
||||
'icon' => 'times-circle',
|
||||
'data' => array( 'confirm' => '' )
|
||||
|
||||
@@ -57,8 +57,8 @@ class _Purchases
|
||||
{
|
||||
return !( $node instanceof \IPS\nexus\Package\Group );
|
||||
} ) ),
|
||||
new \IPS\Helpers\Form\CheckboxSet( 'nexus_bm_filters_type', isset( $criteria['nexus_bm_filters_type'] ) ? explode( ',', $criteria['nexus_bm_filters_type'] ) : array( 'active' ), FALSE, array( 'toggles' => array( 'expired' => array( 'nexus_bm_filters_pkg_expired' ) ), 'options' => array( 'active' => 'nexus_bm_filters_type_active', 'expired' => 'nexus_bm_filters_type_expired', 'canceled' => 'nexus_bm_filters_type_canceled' ) ), NULL, NULL, NULL, 'nexus_bm_filters_types' ),
|
||||
new \IPS\Helpers\Form\Custom( 'nexus_bm_filters_pkg_expired', array( 0 => isset( $criteria['nexus_bm_filters_pkg_expired']['range'] ) ? $criteria['nexus_bm_filters_pkg_expired']['range'] : '', 1 => isset( $criteria['nexus_bm_filters_pkg_expired']['days'] ) ? $criteria['nexus_bm_filters_pkg_expired']['days'] : NULL ), FALSE, array(
|
||||
new \IPS\Helpers\Form\CheckboxSet( 'nexus_bm_filters_type', isset( $criteria['nexus_bm_filters_type'] ) ? $criteria['nexus_bm_filters_type'] : array( 'active' ), FALSE, array( 'toggles' => array( 'expired' => array( 'nexus_bm_filters_pkg_expired' ) ), 'options' => array( 'active' => 'nexus_bm_filters_type_active', 'expired' => 'nexus_bm_filters_type_expired', 'canceled' => 'nexus_bm_filters_type_canceled' ) ), NULL, NULL, NULL, 'nexus_bm_filters_types' ),
|
||||
new \IPS\Helpers\Form\Custom( 'nexus_bm_filters_pkg_expired', array( 0 => isset( $criteria['nexus_bm_filters_pkg_expired']['range'] ) ? $criteria['nexus_bm_filters_pkg_expired']['range'] : '', 1 => isset( $criteria['nexus_bm_filters_pkg_expired']['days'] ) ? $criteria['nexus_bm_filters_pkg_expired']['days'] : NULL, 3 => isset( $criteria['nexus_bm_filters_pkg_expired']['days_lt'] ) ? $criteria['nexus_bm_filters_pkg_expired']['days_lt'] : NULL ), FALSE, array(
|
||||
'getHtml' => function( $element )
|
||||
{
|
||||
$dateRange = new \IPS\Helpers\Form\DateRange( "{$element->name}[0]", $element->value[0], FALSE );
|
||||
@@ -78,6 +78,8 @@ class _Purchases
|
||||
*/
|
||||
public function save( $post )
|
||||
{
|
||||
$return = array();
|
||||
|
||||
if ( \is_array( $post['nexus_bm_filters_packages'] ) )
|
||||
{
|
||||
$ids = array();
|
||||
@@ -86,28 +88,35 @@ class _Purchases
|
||||
$ids[] = $package->id;
|
||||
}
|
||||
|
||||
$return = array(
|
||||
'nexus_bm_filters_packages' => implode( ',', $ids ),
|
||||
'nexus_bm_filters_pkg_active' => (bool) ( \in_array( "active", $post['nexus_bm_filters_type'] ) ),
|
||||
'nexus_bm_filters_pkg_canceled' => (bool) ( \in_array( "canceled", $post['nexus_bm_filters_type'] ) ),
|
||||
'nexus_bm_filters_pkg_expired' => NULL
|
||||
);
|
||||
$return['nexus_bm_filters_packages'] = implode( ',', $ids );
|
||||
}
|
||||
|
||||
if( isset( $post['nexus_bm_filters_type'] ) )
|
||||
{
|
||||
$return['nexus_bm_filters_type'] = $post['nexus_bm_filters_type'];
|
||||
$return['nexus_bm_filters_pkg_active'] = (bool) ( \in_array( "active", $post['nexus_bm_filters_type'] ) );
|
||||
$return['nexus_bm_filters_pkg_canceled'] = (bool) ( \in_array( "canceled", $post['nexus_bm_filters_type'] ) );
|
||||
$return['nexus_bm_filters_pkg_expired'] = NULL;
|
||||
|
||||
if( isset( $post['nexus_bm_filters_pkg_expired'][2] ) AND $post['nexus_bm_filters_pkg_expired'][2] == 'days' )
|
||||
{
|
||||
$return['nexus_bm_filters_pkg_expired'] = $post['nexus_bm_filters_pkg_expired'][1] ? array( 'days' => \intval( $post['nexus_bm_filters_pkg_expired'][1] ) ) : FALSE;
|
||||
}
|
||||
elseif( isset( $post['nexus_bm_filters_pkg_expired'][2] ) AND $post['nexus_bm_filters_pkg_expired'][2] == 'days_lt' )
|
||||
{
|
||||
$return['nexus_bm_filters_pkg_expired'] = $post['nexus_bm_filters_pkg_expired'][3] ? array( 'days_lt' => \intval( $post['nexus_bm_filters_pkg_expired'][3] ) ) : FALSE;
|
||||
}
|
||||
elseif( isset( $post['nexus_bm_filters_pkg_expired'][2] ) AND $post['nexus_bm_filters_pkg_expired'][2] == 'range' )
|
||||
{
|
||||
$return['nexus_bm_filters_pkg_expired'] = array( 'range' => json_decode( json_encode( $post['nexus_bm_filters_pkg_expired'][0] ), TRUE ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Normalize objects to their array form. Bulk mailer stores options as a json array where as member export does not, so $data['range']['start'] is a DateTime object */
|
||||
$return['nexus_bm_filters_pkg_expired'] = ( empty($post['nexus_bm_filters_pkg_expired'][0]) ) ? FALSE : array( 'range' => json_decode( json_encode( $post['nexus_bm_filters_pkg_expired'][0] ), TRUE ) );
|
||||
$return['nexus_bm_filters_pkg_expired'] = FALSE;
|
||||
}
|
||||
|
||||
|
||||
return $return;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
return \count( $return ) ? $return : FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -120,7 +129,7 @@ class _Purchases
|
||||
{
|
||||
if ( isset( $data['nexus_bm_filters_packages'] ) and $data['nexus_bm_filters_packages'] )
|
||||
{
|
||||
return array( 'nexus_purchases.ps_id IS NOT NULL' );
|
||||
return array( 'purchase.ps_id IS NOT NULL' );
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
@@ -141,12 +150,12 @@ class _Purchases
|
||||
|
||||
if ( isset($data[ 'nexus_bm_filters_pkg_active' ]) and $data[ 'nexus_bm_filters_pkg_active' ] )
|
||||
{
|
||||
$types[] = 'nexus_purchases.ps_active=1';
|
||||
$types[] = 'purchase.ps_active=1';
|
||||
}
|
||||
|
||||
if ( isset( $data[ 'nexus_bm_filters_pkg_canceled' ] ) and $data[ 'nexus_bm_filters_pkg_canceled' ] )
|
||||
{
|
||||
$types[] = 'nexus_purchases.ps_cancelled=1';
|
||||
$types[] = 'purchase.ps_cancelled=1';
|
||||
}
|
||||
|
||||
if ( !empty( $data[ 'nexus_bm_filters_pkg_expired' ][ 'range' ] ) AND !empty( $data[ 'nexus_bm_filters_pkg_expired' ][ 'range' ][ 'end' ] ) )
|
||||
@@ -156,20 +165,31 @@ class _Purchases
|
||||
|
||||
if ( $start and $end )
|
||||
{
|
||||
$types[] = "( nexus_purchases.ps_active=0 AND nexus_purchases.ps_cancelled=0 AND nexus_purchases.ps_expire BETWEEN {$start->getTimestamp()} AND {$end->getTimestamp()})";
|
||||
$types[] = "( purchase.ps_active=0 AND purchase.ps_cancelled=0 AND purchase.ps_expire BETWEEN {$start->getTimestamp()} AND {$end->getTimestamp()})";
|
||||
}
|
||||
}
|
||||
elseif ( !empty( $data[ 'nexus_bm_filters_pkg_expired' ][ 'days' ] ) )
|
||||
{
|
||||
$date = \IPS\DateTime::create()->sub( new \DateInterval( 'P' . $data[ 'nexus_bm_filters_pkg_expired' ][ 'days' ] . 'D' ) );
|
||||
$types[] = "( nexus_purchases.ps_active=0 AND nexus_purchases.ps_cancelled=0 AND nexus_purchases.ps_expire < {$date->getTimestamp()})";
|
||||
$types[] = "( purchase.ps_active=0 AND purchase.ps_cancelled=0 AND purchase.ps_expire < {$date->getTimestamp()})";
|
||||
}
|
||||
elseif( !empty( $data[ 'nexus_bm_filters_pkg_expired' ][ 'days_lt' ] ) AND (int) $data[ 'nexus_bm_filters_pkg_expired' ][ 'days_lt' ] )
|
||||
{
|
||||
$date = \IPS\DateTime::create()->sub( new \DateInterval( 'P' . (int) $data[ 'nexus_bm_filters_pkg_expired' ][ 'days_lt' ] . 'D' ) );
|
||||
|
||||
$types[] = "( purchase.ps_active=0 AND purchase.ps_cancelled=0 AND purchase.ps_expire > {$date->getTimestamp()})";
|
||||
}
|
||||
elseif( isset( $data['nexus_bm_filters_type'] ) AND \in_array( 'expired', $data['nexus_bm_filters_type'] ) )
|
||||
{
|
||||
$types[] = "(purchase.ps_expire < " . time() . ")";
|
||||
}
|
||||
|
||||
if ( !empty( $types ) )
|
||||
{
|
||||
$types = implode( ' OR ', $types );
|
||||
$query->join( 'nexus_purchases', "nexus_purchases.ps_app='nexus' AND nexus_purchases.ps_type='package' AND nexus_purchases.ps_member=core_members.member_id AND " . \IPS\Db::i()->in( 'nexus_purchases.ps_item_id', explode( ',', $data['nexus_bm_filters_packages'] ) ) . " AND ( {$types} )" );
|
||||
}
|
||||
|
||||
$query->join( ['nexus_purchases', 'purchase'], "purchase.ps_app='nexus' AND purchase.ps_type='package' AND purchase.ps_member=core_members.member_id AND " . \IPS\Db::i()->in( 'purchase.ps_item_id', explode( ',', $data['nexus_bm_filters_packages'] ) ) . ( $types ? " AND ( {$types} )" : '' ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -98,6 +98,8 @@ class _Nexus
|
||||
\IPS\Db::i()->update( 'nexus_support_ratings', array( 'rating_staff' => $member->member_id ), array( 'rating_staff=?', $member2->member_id ) );
|
||||
|
||||
\IPS\Db::i()->delete( 'nexus_customer_spend', array( 'spend_member_id=?', $member2->member_id ) );
|
||||
|
||||
\IPS\Db::i()->delete( 'nexus_alternate_contacts', array( 'main_id = alt_id' ) );
|
||||
|
||||
/* Account Credit */
|
||||
$customerToKeep = \IPS\nexus\Customer::load( $member->member_id );
|
||||
|
||||
@@ -48,18 +48,6 @@ class _DisablePOP
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Code to execute when other applications are uninstalled
|
||||
*
|
||||
* @param string $application Application directory
|
||||
* @return void
|
||||
* @deprecated This is here for backwards-compatibility - all new code should go in onOtherUninstall
|
||||
*/
|
||||
public function onOtherAppUninstall( $application )
|
||||
{
|
||||
return $this->onOtherUninstall( $application );
|
||||
}
|
||||
|
||||
/**
|
||||
* Code to execute when other applications or plugins are uninstalled
|
||||
*
|
||||
|
||||
@@ -189,7 +189,7 @@ class _CustomPackage extends \IPS\nexus\extensions\nexus\Item\Package
|
||||
{
|
||||
if( $values['p_tax'] )
|
||||
{
|
||||
$tax = \IPS\nexus\Tax::load( $values['p_tax'] );
|
||||
$tax = $values['p_tax'];
|
||||
}
|
||||
}
|
||||
catch( \OutOfRangeException $e ){}
|
||||
|
||||
@@ -68,7 +68,7 @@ class _MiscellaneousCharge extends \IPS\nexus\Invoice\Item\Charge
|
||||
{
|
||||
$availableShippingMethods['easypost'] = 'enhancements__nexus_EasyPost';
|
||||
}
|
||||
$form->add( new \IPS\Helpers\Form\Select( 'item_shipmethods', '*', FALSE, array( 'options' => $availableShippingMethods, 'multiple' => TRUE, 'unlimited' => '*' ), NULL, NULL, NULL, 'item_shipmethods' ) );
|
||||
$form->add( new \IPS\Helpers\Form\CheckboxSet( 'item_shipmethods', '*', FALSE, array( 'options' => $availableShippingMethods, 'multiple' => TRUE, 'unlimited' => '*', 'impliedUnlimited' => TRUE ), NULL, NULL, NULL, 'item_shipmethods' ) );
|
||||
|
||||
$form->add( new \IPS\Helpers\Form\YesNo( 'item_pay_other', FALSE, FALSE, array( 'togglesOn' => array( 'item_pay_to', 'item_commission', 'item_fee' ) ) ) );
|
||||
$form->add( new \IPS\Helpers\Form\Member( 'item_pay_to', FALSE, FALSE, array(), NULL, NULL, NULL, 'item_pay_to' ) );
|
||||
|
||||
@@ -503,10 +503,7 @@ class _Package extends \IPS\nexus\Invoice\Item\Purchase
|
||||
/* Is this the same as any of the other items? */
|
||||
foreach ( $itemsToAdd as $_item )
|
||||
{
|
||||
$cloned = clone $_item;
|
||||
$cloned->quantity = 1;
|
||||
|
||||
if ( $cloned == $item )
|
||||
if ( $_item->isSameAsOtherItem( $item ) )
|
||||
{
|
||||
$_item->quantity++;
|
||||
continue 2;
|
||||
@@ -516,10 +513,7 @@ class _Package extends \IPS\nexus\Invoice\Item\Purchase
|
||||
/* Or anything on the invoice? */
|
||||
foreach ( $invoice->items as $k => $_item )
|
||||
{
|
||||
$cloned = clone $_item;
|
||||
$cloned->quantity = 1;
|
||||
|
||||
if ( $cloned == $item )
|
||||
if ( $_item->isSameAsOtherItem( $item ) )
|
||||
{
|
||||
$invoice->changeItem( $k, array( 'quantity' => $_item->quantity + 1 ) );
|
||||
continue 2;
|
||||
|
||||
@@ -43,6 +43,51 @@ class _Subscription extends \IPS\nexus\Invoice\Item\Purchase
|
||||
*/
|
||||
public static $title = 'nexus_member_subscription';
|
||||
|
||||
/**
|
||||
* Purchase can be reactivated in the ACP?
|
||||
*
|
||||
* @param \IPS\nexus\Purchase $purchase The purchase
|
||||
* @param NULL $error Error to show, passed by reference
|
||||
* @return bool
|
||||
*/
|
||||
public static function canAcpReactivate( \IPS\nexus\Purchase $purchase, &$error=NULL )
|
||||
{
|
||||
/* If the user has a different subscription that is active -or- can be reactivated, then we cannot reactivate this one */
|
||||
if ( $subscription = \IPS\nexus\Subscription::loadByMember( $purchase->member, FALSE ) AND ( $subscription->purchase->active OR ( $subscription->purchase->cancelled AND $subscription->purchase->can_reactivate ) ) )
|
||||
{
|
||||
if ( $subscription->purchase == $purchase )
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
$error = 'not_with_existing_subscription';
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Otherwise, we're good */
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* ACP Edit Save
|
||||
*
|
||||
* @param \IPS\nexus\Purchase $purchase The purchase
|
||||
* @param array $values Values from form
|
||||
* @return string
|
||||
*/
|
||||
public static function acpEditSave( \IPS\nexus\Purchase $purchase, array $values )
|
||||
{
|
||||
parent::acpEditSave( $purchase, $values );
|
||||
|
||||
try
|
||||
{
|
||||
$subscription = \IPS\nexus\Subscription::loadByMemberAndPurchase( $purchase->member, $purchase );
|
||||
$subscription->expire = \is_object( $purchase->expire ) ? $purchase->expire->getTimestamp() : ( $purchase->expire ?: 0 );
|
||||
$subscription->save();
|
||||
}
|
||||
catch( \UnderflowException $e) { }
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Title
|
||||
*
|
||||
@@ -201,6 +246,9 @@ class _Subscription extends \IPS\nexus\Invoice\Item\Purchase
|
||||
$subscription->purchase_id = $purchase->id;
|
||||
$subscription->invoice_id = $invoice->id;
|
||||
$subscription->save();
|
||||
|
||||
/* Achievements */
|
||||
$purchase->member->achievementAction( 'nexus', 'Subscription', $subscription );
|
||||
}
|
||||
catch ( \Exception $e ) {}
|
||||
}
|
||||
|
||||
Whitespace-only changes.
@@ -1,43 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief Send/Discard handler for pending support replies
|
||||
* @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 Nexus
|
||||
* @since 25 Apr 2014
|
||||
*/
|
||||
|
||||
\define('REPORT_EXCEPTIONS', TRUE);
|
||||
require_once '../../../../init.php';
|
||||
\IPS\Dispatcher\External::i();
|
||||
|
||||
try
|
||||
{
|
||||
$reply = \IPS\nexus\Support\Reply::load( \IPS\Request::i()->id );
|
||||
if ( !\IPS\Login::compareHashes( md5( $reply->item()->email_key . $reply->date ), (string) \IPS\Request::i()->key ) )
|
||||
{
|
||||
throw new \OutOfRangeException;
|
||||
}
|
||||
}
|
||||
catch ( \OutOfRangeException $e )
|
||||
{
|
||||
\IPS\Output::i()->error( 'node_error', '2X206/1', 404, '' );
|
||||
}
|
||||
|
||||
if ( $reply->type !== \IPS\nexus\Support\Reply::REPLY_PENDING )
|
||||
{
|
||||
\IPS\Output::i()->error( 'support_reply_not_pending', '1X206/2', 403, '' );
|
||||
}
|
||||
|
||||
if ( \IPS\Request::i()->send )
|
||||
{
|
||||
$reply->sendPending();
|
||||
}
|
||||
else
|
||||
{
|
||||
$reply->delete();
|
||||
}
|
||||
|
||||
\IPS\Output::i()->sendOutput( \IPS\Theme::i()->getTemplate( 'global', 'core', 'front' )->blankTemplate( \IPS\Theme::i()->getTemplate( 'support', 'nexus', 'front' )->pendingDone( \IPS\Request::i()->send ? 'support_pending_sent' : 'support_pending_discarded' ) ) );
|
||||
@@ -12,6 +12,8 @@
|
||||
\define('REPORT_EXCEPTIONS', TRUE);
|
||||
require_once '../../../../init.php';
|
||||
|
||||
\IPS\Output::i()->pageCaching = FALSE;
|
||||
|
||||
try
|
||||
{
|
||||
$invoice = \IPS\nexus\Invoice::load( \IPS\Request::i()->x_invoice_num );
|
||||
|
||||
@@ -12,6 +12,8 @@
|
||||
\define('REPORT_EXCEPTIONS', TRUE);
|
||||
require_once '../../../../init.php';
|
||||
|
||||
\IPS\Output::i()->pageCaching = FALSE;
|
||||
|
||||
$webhookNotification = NULL;
|
||||
$transaction = NULL;
|
||||
foreach ( \IPS\nexus\Gateway::roots() as $method )
|
||||
|
||||
@@ -13,6 +13,8 @@
|
||||
require_once '../../../../init.php';
|
||||
\IPS\Session\Front::i();
|
||||
|
||||
\IPS\Output::i()->pageCaching = FALSE;
|
||||
|
||||
/**
|
||||
* PayPal Webhook Handler
|
||||
*/
|
||||
|
||||
@@ -71,10 +71,11 @@ try
|
||||
$transaction->billing_agreement = $billingAgreement;
|
||||
$transaction->save();
|
||||
|
||||
/* Just save that we're waiting for the webhook */
|
||||
/* 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();
|
||||
$transaction->sendNotification();
|
||||
\IPS\Db::i()->update( 'core_tasks', array( 'enabled' => 1 ), "`key`='gatewayPending'" );
|
||||
\IPS\Output::i()->redirect( $transaction->url() );
|
||||
}
|
||||
|
||||
@@ -101,11 +102,49 @@ try
|
||||
$billingAgreement->save();
|
||||
$transaction->billing_agreement = $billingAgreement;
|
||||
$transaction->save();
|
||||
|
||||
/* Get the initial setup transaction if possible */
|
||||
$haveInitialTransaction = FALSE;
|
||||
$transactions = $transaction->method->api( "payments/billing-agreements/{$billingAgreement->gw_id}/transactions?start_date=" . date( 'Y-m-d', time() - 86400 ) . '&end_date=' . date( 'Y-m-d' ), NULL, 'get' );
|
||||
foreach ( $transactions['agreement_transaction_list'] as $t )
|
||||
{
|
||||
if ( $t['status'] == 'Completed' )
|
||||
{
|
||||
$transaction->gw_id = $t['transaction_id'];
|
||||
$transaction->save();
|
||||
|
||||
if ( $fraudResult and $fraudResult !== \IPS\nexus\Transaction::STATUS_PAID )
|
||||
{
|
||||
$transaction->executeFraudAction( $fraudResult, TRUE );
|
||||
}
|
||||
else
|
||||
{
|
||||
$transaction->member->log( 'transaction', array(
|
||||
'type' => 'paid',
|
||||
'status' => $transaction::STATUS_PAID,
|
||||
'id' => $transaction->id,
|
||||
'invoice_id' => $transaction->invoice->id,
|
||||
'invoice_title' => $transaction->invoice->title,
|
||||
) );
|
||||
|
||||
$memberJustCreated = $transaction->approve();
|
||||
if ( $memberJustCreated )
|
||||
{
|
||||
\IPS\Session::i()->setMember( $memberJustCreated );
|
||||
\IPS\Member\Device::loadOrCreate( $memberJustCreated, FALSE )->updateAfterAuthentication( NULL );
|
||||
}
|
||||
}
|
||||
|
||||
$transaction->sendNotification();
|
||||
\IPS\Output::i()->redirect( $transaction->url() );
|
||||
}
|
||||
}
|
||||
|
||||
/* Just save that we're waiting for the webhook */
|
||||
$transaction->status = \IPS\nexus\Transaction::STATUS_GATEWAY_PENDING;
|
||||
$transaction->save();
|
||||
$transaction->sendNotification();
|
||||
\IPS\Db::i()->update( 'core_tasks', array( 'enabled' => 1 ), "`key`='gatewayPending'" );
|
||||
\IPS\Output::i()->redirect( $transaction->url() );
|
||||
}
|
||||
|
||||
|
||||
@@ -13,6 +13,8 @@
|
||||
require_once '../../../../init.php';
|
||||
\IPS\Session\Front::i();
|
||||
|
||||
\IPS\Output::i()->pageCaching = FALSE;
|
||||
|
||||
/* Get the invoice */
|
||||
try
|
||||
{
|
||||
|
||||
@@ -13,6 +13,8 @@
|
||||
require_once '../../../../init.php';
|
||||
\IPS\Session\Front::i();
|
||||
|
||||
\IPS\Output::i()->pageCaching = FALSE;
|
||||
|
||||
/* Little IN_DEV helper to prevent firing this until we've triggered the webhooks */
|
||||
if ( \IPS\IN_DEV and !isset( \IPS\Request::i()->indevconfirm ) )
|
||||
{
|
||||
|
||||
@@ -13,6 +13,8 @@
|
||||
require_once '../../../../init.php';
|
||||
\IPS\Session\Front::i();
|
||||
|
||||
\IPS\Output::i()->pageCaching = FALSE;
|
||||
|
||||
/**
|
||||
* Stripe Webhook Handler
|
||||
*/
|
||||
@@ -113,7 +115,7 @@ class stripeWebhookHandler
|
||||
private function chargeSucceeded()
|
||||
{
|
||||
/* Check the status */
|
||||
if ( $this->transaction->status !== \IPS\nexus\Transaction::STATUS_GATEWAY_PENDING )
|
||||
if ( !\in_array( $this->transaction->status, [ \IPS\nexus\Transaction::STATUS_GATEWAY_PENDING, IPS\nexus\Transaction::STATUS_PENDING ] ) )
|
||||
{
|
||||
if ( $this->transaction->status === \IPS\nexus\Transaction::STATUS_PAID )
|
||||
{
|
||||
@@ -183,7 +185,7 @@ class stripeWebhookHandler
|
||||
private function chargeSucceededNew()
|
||||
{
|
||||
/* Check the status */
|
||||
if ( $this->transaction->status !== \IPS\nexus\Transaction::STATUS_PENDING )
|
||||
if ( !\in_array( $this->transaction->status, [ \IPS\nexus\Transaction::STATUS_GATEWAY_PENDING, IPS\nexus\Transaction::STATUS_PENDING ] ) )
|
||||
{
|
||||
if ( $this->transaction->status === \IPS\nexus\Transaction::STATUS_PAID )
|
||||
{
|
||||
@@ -195,6 +197,12 @@ class stripeWebhookHandler
|
||||
}
|
||||
}
|
||||
|
||||
/* If the invoice this is for is already paid, this may be a duplicate charge, so don't capture */
|
||||
if ( $this->transaction->invoice->status === \IPS\nexus\Invoice::STATUS_PAID )
|
||||
{
|
||||
throw new \Exception('INVOICE_ALREADY_PAID');
|
||||
}
|
||||
|
||||
/* Validate the charge with Stripe */
|
||||
try
|
||||
{
|
||||
|
||||
@@ -37,6 +37,7 @@ class Api
|
||||
*/
|
||||
public function error( $code, $message )
|
||||
{
|
||||
\IPS\Output::i()->pageCaching = FALSE;
|
||||
\IPS\Output::i()->sendOutput( json_encode( array( 'errorCode' => $code, 'errorMessage' => $message ) ), 400, 'application/json' );
|
||||
}
|
||||
|
||||
@@ -180,6 +181,7 @@ class Api
|
||||
|
||||
\IPS\nexus\Customer::load( $key->member )->log( 'lkey', array( 'type' => 'activated', 'key' => $key->key, 'ps_id' => $key->purchase->id ), FALSE );
|
||||
|
||||
\IPS\Output::i()->pageCaching = FALSE;
|
||||
\IPS\Output::i()->sendOutput( json_encode( array( 'response' => 'OKAY', 'usage_id' => $k ) ), 200, 'application/json' );
|
||||
}
|
||||
|
||||
@@ -200,9 +202,9 @@ class Api
|
||||
{
|
||||
case 102:
|
||||
case 103:
|
||||
\IPS\Output::i()->sendOutput( json_encode( array( 'status' => 'INACTIVE' ) ), 200, 'application/json' );
|
||||
\IPS\Output::i()->sendOutput( json_encode( array( 'status' => 'INACTIVE' ) ), 200, 'application/json', \IPS\Output::getCacheHeaders( time(), 360 ) );
|
||||
case 104:
|
||||
\IPS\Output::i()->sendOutput( json_encode( array( 'status' => 'EXPIRED' ) ), 200, 'application/json' );
|
||||
\IPS\Output::i()->sendOutput( json_encode( array( 'status' => 'EXPIRED' ) ), 200, 'application/json', \IPS\Output::getCacheHeaders( time(), 360 ) );
|
||||
|
||||
default:
|
||||
throw $e;
|
||||
@@ -223,7 +225,7 @@ class Api
|
||||
$key->activate_data = $activateData;
|
||||
$key->save();
|
||||
|
||||
\IPS\Output::i()->sendOutput( json_encode( array( 'status' => 'ACTIVE', 'uses' => $key->uses, 'max_uses' => $key->max_uses ) ), 200, 'application/json' );
|
||||
\IPS\Output::i()->sendOutput( json_encode( array( 'status' => 'ACTIVE', 'uses' => $key->uses, 'max_uses' => $key->max_uses ) ), 200, 'application/json', \IPS\Output::getCacheHeaders( time(), 360 ) );
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -268,7 +270,7 @@ class Api
|
||||
'customer_email' => \IPS\nexus\Customer::load( $key->member )->email,
|
||||
'uses' => $key->uses,
|
||||
'max_uses' => $key->max_uses
|
||||
) ), 200, 'application/json' );
|
||||
) ), 200, 'application/json', \IPS\Output::getCacheHeaders( time(), 360 ) );
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -294,6 +296,7 @@ class Api
|
||||
$key->activate_data = $activateData;
|
||||
$key->save();
|
||||
|
||||
\IPS\Output::i()->pageCaching = FALSE;
|
||||
\IPS\Output::i()->sendOutput( json_encode( array( 'status' => 'OKAY' ) ), 200, 'application/json' );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,6 +12,9 @@
|
||||
\define('REPORT_EXCEPTIONS', TRUE);
|
||||
require_once '../../../../init.php';
|
||||
\IPS\Dispatcher\External::i();
|
||||
|
||||
\IPS\Output::i()->pageCaching = FALSE;
|
||||
|
||||
try
|
||||
{
|
||||
$server = \IPS\nexus\Hosting\Server::load( \IPS\Request::i()->server );
|
||||
|
||||
@@ -88,25 +88,6 @@ class _purchases extends \IPS\Dispatcher\Controller
|
||||
return;
|
||||
}
|
||||
|
||||
/* Create associated invoices table */
|
||||
try
|
||||
{
|
||||
$originalInvoice = $this->purchase->original_invoice;
|
||||
$invoices = \IPS\nexus\Invoice::table( array( array( 'i_id=? OR ' . \IPS\Db::i()->findInSet( 'i_renewal_ids', array( $this->purchase->id ) ), $originalInvoice->id ) ), $this->purchase->acpUrl(), "p.{$this->purchase->id}" );
|
||||
}
|
||||
catch ( \OutOfRangeException $e )
|
||||
{
|
||||
$invoices = \IPS\nexus\Invoice::table( array( array( \IPS\Db::i()->findInSet( 'i_renewal_ids', array( $this->purchase->id ) ) ) ), $this->purchase->acpUrl(), "p.{$this->purchase->id}" );
|
||||
}
|
||||
$invoices->filters = array(
|
||||
'paid' => array( 'i_status=?', \IPS\nexus\Invoice::STATUS_PAID )
|
||||
);
|
||||
$invoices->advancedSearch = array(
|
||||
'i_status' => array( \IPS\Helpers\Table\SEARCH_SELECT, array( 'options' => \IPS\nexus\Invoice::statuses(), 'multiple' => TRUE ) ),
|
||||
'i_total' => \IPS\Helpers\Table\SEARCH_NUMERIC,
|
||||
'i_date' => \IPS\Helpers\Table\SEARCH_DATE_RANGE,
|
||||
);
|
||||
|
||||
/* Custom Fields */
|
||||
$customFields = array();
|
||||
foreach ( $this->purchase->custom_fields as $k => $v )
|
||||
@@ -133,7 +114,38 @@ class _purchases extends \IPS\Dispatcher\Controller
|
||||
|
||||
/* Display */
|
||||
\IPS\Output::i()->sidebar['actions'] = $this->purchase->buttons();
|
||||
\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate( 'purchases' )->view( $this->purchase, $customer, $children, $invoices, $customFields );
|
||||
\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate( 'purchases' )->view( $this->purchase, $customer, $children, $customFields );
|
||||
\IPS\Output::i()->jsFiles = array_merge( \IPS\Output::i()->jsFiles, \IPS\Output::i()->js( 'admin_members.js', 'core' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the associated invoices table for a purchase
|
||||
*
|
||||
* @note This is lazy loaded after the purchase page is generated
|
||||
* @return void
|
||||
*/
|
||||
protected function showInvoices()
|
||||
{
|
||||
/* Create associated invoices table */
|
||||
try
|
||||
{
|
||||
$originalInvoice = $this->purchase->original_invoice;
|
||||
$invoices = \IPS\nexus\Invoice::table( array( array( 'i_id=? OR ' . \IPS\Db::i()->findInSet( 'i_renewal_ids', array( $this->purchase->id ) ), $originalInvoice->id ) ), $this->purchase->acpUrl()->setQueryString( 'do', 'showInvoices' ), "p.{$this->purchase->id}" );
|
||||
}
|
||||
catch ( \OutOfRangeException $e )
|
||||
{
|
||||
$invoices = \IPS\nexus\Invoice::table( array( array( \IPS\Db::i()->findInSet( 'i_renewal_ids', array( $this->purchase->id ) ) ) ), $this->purchase->acpUrl()->setQueryString( 'do', 'showInvoices' ), "p.{$this->purchase->id}" );
|
||||
}
|
||||
$invoices->filters = array(
|
||||
'paid' => array( 'i_status=?', \IPS\nexus\Invoice::STATUS_PAID )
|
||||
);
|
||||
$invoices->advancedSearch = array(
|
||||
'i_status' => array( \IPS\Helpers\Table\SEARCH_SELECT, array( 'options' => \IPS\nexus\Invoice::statuses(), 'multiple' => TRUE ) ),
|
||||
'i_total' => \IPS\Helpers\Table\SEARCH_NUMERIC,
|
||||
'i_date' => \IPS\Helpers\Table\SEARCH_DATE_RANGE,
|
||||
);
|
||||
|
||||
\IPS\Output::i()->output = (string) $invoices;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -414,6 +426,12 @@ class _purchases extends \IPS\Dispatcher\Controller
|
||||
\IPS\Dispatcher::i()->checkAcpPermission( 'purchases_cancel' );
|
||||
\IPS\Session::i()->csrfCheck();
|
||||
|
||||
$error = NULL;
|
||||
if ( !$this->purchase->canAcpReactivate( $error ) )
|
||||
{
|
||||
\IPS\Output::i()->error( $error ?? 'can_not_reactivate', '2X195/K', 403, '' );
|
||||
}
|
||||
|
||||
$parent = $this->purchase->parent();
|
||||
|
||||
if ( ( $this->purchase->billing_agreement and !$this->purchase->billing_agreement->canceled ) or ( $this->purchase->grouped_renewals and $parent->billing_agreement and !$parent->billing_agreement->canceled ) )
|
||||
|
||||
@@ -96,6 +96,13 @@ class _billingagreements extends \IPS\Dispatcher\Controller
|
||||
{
|
||||
if ( $billingAgreement->status() == $billingAgreement::STATUS_ACTIVE )
|
||||
{
|
||||
\IPS\Output::i()->sidebar['actions']['refresh'] = array(
|
||||
'icon' => 'refresh',
|
||||
'title' => 'billing_agreement_check',
|
||||
'link' => $billingAgreement->acpUrl()->setQueryString( array( 'do' => 'act', 'act' => 'refresh' ) )->csrf(),
|
||||
'data' => array( 'confirm' => '' )
|
||||
);
|
||||
|
||||
\IPS\Output::i()->sidebar['actions']['suspend'] = array(
|
||||
'icon' => 'times',
|
||||
'title' => 'billing_agreement_suspend',
|
||||
@@ -184,7 +191,7 @@ class _billingagreements extends \IPS\Dispatcher\Controller
|
||||
|
||||
/* Check act */
|
||||
$act = \IPS\Request::i()->act;
|
||||
if ( !\in_array( $act, array( 'suspend', 'reactivate', 'cancel' ) ) )
|
||||
if ( !\in_array( $act, array( 'suspend', 'reactivate', 'cancel', 'refresh' ) ) )
|
||||
{
|
||||
\IPS\Output::i()->error( 'node_error', '3X320/8', 403, '' );
|
||||
}
|
||||
|
||||
@@ -1368,6 +1368,39 @@ class _invoices extends \IPS\Dispatcher\Controller
|
||||
\IPS\Output::i()->output = $form;
|
||||
}
|
||||
|
||||
/**
|
||||
* Track
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function track()
|
||||
{
|
||||
\IPS\Session::i()->csrfCheck();
|
||||
|
||||
try
|
||||
{
|
||||
$invoice = \IPS\nexus\Invoice::load( \IPS\Request::i()->id );
|
||||
|
||||
if ( \IPS\Request::i()->track )
|
||||
{
|
||||
\IPS\Db::i()->insert( 'nexus_invoice_tracker', array(
|
||||
'member_id' => \IPS\Member::loggedIn()->member_id,
|
||||
'invoice_id' => $invoice->id
|
||||
), TRUE );
|
||||
}
|
||||
else
|
||||
{
|
||||
\IPS\Db::i()->delete( 'nexus_invoice_tracker', array( 'member_id=? AND invoice_id=?', \IPS\Member::loggedIn()->member_id, $invoice->id ) );
|
||||
}
|
||||
|
||||
$this->_redirect( $invoice );
|
||||
}
|
||||
catch ( \OutOfRangeException $e )
|
||||
{
|
||||
\IPS\Output::i()->error( 'node_error', '2X190/G', 404, '' );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Redirect
|
||||
*
|
||||
|
||||
@@ -72,11 +72,16 @@ class _payouts extends \IPS\Dispatcher\Controller
|
||||
$classname = \IPS\nexus\Gateway::payoutGateways()[ $gateway ];
|
||||
if ( class_exists( $classname ) and method_exists( $classname, 'massProcess' ) )
|
||||
{
|
||||
\IPS\Output::i()->sidebar['actions'][] = array(
|
||||
\IPS\Output::i()->sidebar['actions'][] = [
|
||||
'icon' => 'check',
|
||||
'title' => \IPS\Member::loggedIn()->language()->addToStack( 'account_credit_mass_payout', TRUE, array( 'sprintf' => array( \IPS\Member::loggedIn()->language()->addToStack( 'payout__admin_' . $gateway ) ) ) ),
|
||||
'link' => \IPS\Http\Url::internal( 'app=nexus&module=payments&controller=payouts&do=massprocess&gateway=' . $gateway )->csrf()
|
||||
);
|
||||
'link' => \IPS\Http\Url::internal( 'app=nexus&module=payments&controller=payouts&do=massprocess&gateway=' . $gateway )->csrf(),
|
||||
'data' => [
|
||||
'confirm' => '',
|
||||
'confirmMessage' => \IPS\Member::loggedIn()->language()->addToStack( 'nexus_payout_confirm_title' ),
|
||||
'confirmSubMessage' => \IPS\Member::loggedIn()->language()->addToStack( 'nexus_payout_confirm_text' )
|
||||
]
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -156,7 +161,7 @@ class _payouts extends \IPS\Dispatcher\Controller
|
||||
protected function massprocess()
|
||||
{
|
||||
\IPS\Dispatcher::i()->checkAcpPermission( 'payouts_process' );
|
||||
\IPS\Session::i()->csrfCheck();
|
||||
\IPS\Request::i()->confirmedDelete( 'nexus_payout_confirm_title', 'nexus_payout_confirm_text', 'nexus_payout_proceed' );
|
||||
|
||||
$classname = \IPS\nexus\Gateway::payoutGateways()[ \IPS\Request::i()->gateway ];
|
||||
if ( !class_exists( $classname ) or !method_exists( $classname, 'massProcess' ) )
|
||||
@@ -301,7 +306,7 @@ class _payouts extends \IPS\Dispatcher\Controller
|
||||
$form = new \IPS\Helpers\Form;
|
||||
$form->addMessage('payout_description');
|
||||
$form->addHeader('commission_settings');
|
||||
$form->add( new \IPS\Helpers\Form\Select( 'nexus_no_commission', explode( ',', \IPS\Settings::i()->nexus_no_commission ), FALSE, array( 'multiple' => TRUE, 'options' => $groups ) ) );
|
||||
$form->add( new \IPS\Helpers\Form\CheckboxSet( 'nexus_no_commission', explode( ',', \IPS\Settings::i()->nexus_no_commission ), FALSE, array( 'multiple' => TRUE, 'options' => $groups ) ) );
|
||||
$form->addHeader('withdrawal_methods');
|
||||
$form->add( new \IPS\Helpers\Form\CheckboxSet( 'nexus_payout', $settings, FALSE, array( 'options' => $options, 'toggles' => $toggles ) ) );
|
||||
foreach ( $fields as $field )
|
||||
@@ -319,10 +324,13 @@ class _payouts extends \IPS\Dispatcher\Controller
|
||||
} ), NULL, NULL, NULL, 'nexus_payout_maximum' ) );
|
||||
|
||||
$form->add( new \IPS\Helpers\Form\YesNo( 'nexus_payout_approve', \IPS\Settings::i()->nexus_payout_approve, FALSE, array(), NULL, NULL, NULL, 'nexus_payout_approve' ) );
|
||||
$form->add( new \IPS\Helpers\Form\YesNo( 'nexus_payout_unlimited_times', \IPS\Settings::i()->nexus_payout_unlimited_times, TRUE ) );
|
||||
|
||||
$form->addHeader('topup_settings');
|
||||
$form->add( new \IPS\Helpers\Form\YesNo( 'allow_topups', \IPS\Settings::i()->nexus_min_topup, FALSE, array( 'togglesOn' => array( 'nexus_min_topup', 'nexus_max_credit' ) ) ) );
|
||||
$form->add( new \IPS\nexus\Form\Money( 'nexus_min_topup', \IPS\Settings::i()->nexus_min_topup ?: '*', FALSE, array( 'unlimitedLang' => 'no_restriction' ), NULL, NULL, NULL, 'nexus_min_topup' ) );
|
||||
$form->add( new \IPS\nexus\Form\Money( 'nexus_max_credit', \IPS\Settings::i()->nexus_max_credit ?: '*', FALSE, array( 'unlimitedLang' => 'no_restriction' ), NULL, NULL, NULL, 'nexus_max_credit' ) );
|
||||
|
||||
if ( $values = $form->values() )
|
||||
{
|
||||
$payoutSettings = array();
|
||||
|
||||
@@ -65,7 +65,7 @@ class _shippingrates extends \IPS\Node\Controller
|
||||
* @param string $lastUsedTab The tab last used in the form
|
||||
* @return void
|
||||
*/
|
||||
protected function _afterSave( \IPS\Node\Model $old = NULL, \IPS\Node\Model $new, $lastUsedTab = FALSE )
|
||||
protected function _afterSave( ?\IPS\Node\Model $old, \IPS\Node\Model $new, $lastUsedTab = FALSE )
|
||||
{
|
||||
$haveNoLowerLimit = FALSE;
|
||||
$haveNoUpperLimit = FALSE;
|
||||
|
||||
@@ -27,6 +27,11 @@ class _income extends \IPS\Dispatcher\Controller
|
||||
* @brief Has been CSRF-protected
|
||||
*/
|
||||
public static $csrfProtected = TRUE;
|
||||
|
||||
/**
|
||||
* @brief Allow MySQL RW separation for efficiency
|
||||
*/
|
||||
public static $allowRWSeparation = TRUE;
|
||||
|
||||
/**
|
||||
* Execute
|
||||
|
||||
@@ -27,6 +27,11 @@ class _markets extends \IPS\Dispatcher\Controller
|
||||
* @brief Has been CSRF-protected
|
||||
*/
|
||||
public static $csrfProtected = TRUE;
|
||||
|
||||
/**
|
||||
* @brief Allow MySQL RW separation for efficiency
|
||||
*/
|
||||
public static $allowRWSeparation = TRUE;
|
||||
|
||||
/**
|
||||
* Execute
|
||||
@@ -83,7 +88,7 @@ class _markets extends \IPS\Dispatcher\Controller
|
||||
|
||||
foreach ( \IPS\GeoLocation::$countries as $countryCode )
|
||||
{
|
||||
$chart->addSeries( \IPS\Member::loggedIn()->language()->get( 'country-' . $countryCode ), 'number', $activeTab === 'count' ? 'COUNT(*)' : 'SUM(i_total)', TRUE, $countryCode );
|
||||
$chart->addSeries( [ 'value' => \IPS\Member::loggedIn()->language()->get( 'country-' . $countryCode ), 'key' => $countryCode ], 'number', $activeTab === 'count' ? 'COUNT(*)' : 'SUM(i_total)', TRUE, $countryCode );
|
||||
}
|
||||
|
||||
if ( $chart->type === 'GeoChart' )
|
||||
|
||||
@@ -27,6 +27,11 @@ class _purchases extends \IPS\Dispatcher\Controller
|
||||
* @brief Has been CSRF-protected
|
||||
*/
|
||||
public static $csrfProtected = TRUE;
|
||||
|
||||
/**
|
||||
* @brief Allow MySQL RW separation for efficiency
|
||||
*/
|
||||
public static $allowRWSeparation = TRUE;
|
||||
|
||||
/**
|
||||
* Execute
|
||||
|
||||
@@ -77,7 +77,7 @@ class _fields extends \IPS\Node\Controller
|
||||
* @param string $lastUsedTab The tab last used in the form
|
||||
* @return void
|
||||
*/
|
||||
protected function _afterSave( \IPS\Node\Model $old = NULL, \IPS\Node\Model $new, $lastUsedTab = FALSE )
|
||||
protected function _afterSave( ?\IPS\Node\Model $old, \IPS\Node\Model $new, $lastUsedTab = FALSE )
|
||||
{
|
||||
if ( $old AND $old->extra != $new->extra )
|
||||
{
|
||||
|
||||
@@ -89,7 +89,7 @@ class _packages extends \IPS\Node\Controller
|
||||
* @param string $lastUsedTab The tab last used in the form
|
||||
* @return void
|
||||
*/
|
||||
protected function _afterSave( \IPS\Node\Model $old = NULL, \IPS\Node\Model $new, $lastUsedTab = FALSE )
|
||||
protected function _afterSave( ?\IPS\Node\Model $old, \IPS\Node\Model $new, $lastUsedTab = FALSE )
|
||||
{
|
||||
if ( !( $new instanceof \IPS\nexus\Package ) )
|
||||
{
|
||||
@@ -777,7 +777,7 @@ class _packages extends \IPS\Node\Controller
|
||||
try
|
||||
{
|
||||
$themeFunction = 'IPS\\Theme\\'. $functionName;
|
||||
$output = \IPS\Email::buildFromContent( 'Test', $themeFunction( $dummyPurchase ) )->compileContent( 'html', \IPS\Member::loggedIn() );
|
||||
$output = \IPS\Email::buildFromContent( 'Test', $themeFunction( $dummyPurchase ), NULL, \IPS\Email::TYPE_TRANSACTIONAL )->compileContent( 'html', \IPS\Member::loggedIn() );
|
||||
}
|
||||
catch ( \Exception $e )
|
||||
{
|
||||
|
||||
@@ -91,7 +91,7 @@ class _settings extends \IPS\Dispatcher\Controller
|
||||
$form->addTab( 'nexus_purchase_settings' );
|
||||
$form->add( new \IPS\Helpers\Form\YesNo( 'nexus_reg_force', \IPS\Settings::i()->nexus_reg_force, FALSE ) );
|
||||
$form->add( new \IPS\nexus\Form\Money( 'nexus_minimum_order', json_decode( \IPS\Settings::i()->nexus_minimum_order, TRUE ) ) );
|
||||
$form->add( new \IPS\Helpers\Form\Select( 'cm_protected', explode( ',', \IPS\Settings::i()->cm_protected ), FALSE, array( 'options' => $groups, 'multiple' => TRUE ) ) );
|
||||
$form->add( new \IPS\Helpers\Form\CheckboxSet( 'cm_protected', explode( ',', \IPS\Settings::i()->cm_protected ), FALSE, array( 'options' => $groups, 'multiple' => TRUE ) ) );
|
||||
$form->addTab('nexus_gift_vouchers');
|
||||
$form->add( new \IPS\Helpers\Form\Stack( 'nexus_gift_vouchers', $giftVouchers, FALSE, array( 'stackFieldType' => 'IPS\nexus\Form\Money' ) ) );
|
||||
$form->add( new \IPS\Helpers\Form\YesNo( 'nexus_gift_vouchers_free', \IPS\Settings::i()->nexus_gift_vouchers_free ) );
|
||||
|
||||
@@ -356,8 +356,8 @@ class _subscriptions extends \IPS\Node\Controller
|
||||
$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\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, FALSE, array( 'valueAs' => \IPS\Helpers\Form\Interval::DAYS ), NULL, NULL, NULL, 'nexus_subs_invoice_grace' ) );
|
||||
$form->add( new \IPS\Helpers\Form\Select( 'nexus_subs_exclude_groups', explode( ',', \IPS\Settings::i()->nexus_subs_exclude_groups ), FALSE, array( 'options' => $groups, 'multiple' => TRUE ) ) );
|
||||
$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\CheckboxSet( 'nexus_subs_exclude_groups', explode( ',', \IPS\Settings::i()->nexus_subs_exclude_groups ), FALSE, array( 'options' => $groups, 'multiple' => TRUE ) ) );
|
||||
|
||||
|
||||
$form->addHeader('package_upgrade_downgrade');
|
||||
@@ -411,7 +411,7 @@ class _subscriptions extends \IPS\Node\Controller
|
||||
* @param string $lastUsedTab The tab last used in the form
|
||||
* @return void
|
||||
*/
|
||||
protected function _afterSave( \IPS\Node\Model $old = NULL, \IPS\Node\Model $new, $lastUsedTab = FALSE )
|
||||
protected function _afterSave( ?\IPS\Node\Model $old, \IPS\Node\Model $new, $lastUsedTab = FALSE )
|
||||
{
|
||||
$changes = array();
|
||||
if ( $old )
|
||||
|
||||
@@ -526,7 +526,7 @@ class _requests extends \IPS\Dispatcher\Controller
|
||||
$form->addMessage( 'support_notify_blurb' );
|
||||
foreach ( $types as $k => $t )
|
||||
{
|
||||
$form->add( new \IPS\Helpers\Form\Select( $k, isset( $existing[ $t ] ) ? ( $existing[ $t ] === '*' ? 0 : explode( ',', $existing[ $t ] ) ) : NULL, FALSE, array( 'options' => $myDepartments, 'multiple' => TRUE, 'unlimited' => 0, 'unlimitedLang' => 'all', 'noDefault' => TRUE ) ) );
|
||||
$form->add( new \IPS\Helpers\Form\CheckboxSet( $k, isset( $existing[ $t ] ) ? ( $existing[ $t ] === '*' ? 0 : explode( ',', $existing[ $t ] ) ) : NULL, FALSE, array( 'options' => $myDepartments, 'multiple' => TRUE, 'unlimited' => 0, 'unlimitedLang' => 'all', 'noDefault' => TRUE, 'impliedUnlimited' => TRUE ) ) );
|
||||
}
|
||||
|
||||
if ( $values = $form->values() )
|
||||
|
||||
@@ -114,19 +114,17 @@ class _checkout extends \IPS\Dispatcher\Controller
|
||||
{
|
||||
$showFirstStep = TRUE;
|
||||
}
|
||||
if ( !$showFirstStep )
|
||||
|
||||
foreach ( \IPS\nexus\Customer\CustomField::roots() as $field )
|
||||
{
|
||||
foreach ( \IPS\nexus\Customer\CustomField::roots() as $field )
|
||||
$column = $field->column;
|
||||
if ( $field->purchase_show and $field->purchase_require and !$this->invoice->member->$column )
|
||||
{
|
||||
$column = $field->column;
|
||||
if ( $field->purchase_show and $field->purchase_require and !$this->invoice->member->$column )
|
||||
{
|
||||
$showFirstStep = TRUE;
|
||||
$canSkipFirstStepIfNameAndBillingAddressIsKnown = FALSE;
|
||||
break;
|
||||
}
|
||||
$showFirstStep = TRUE;
|
||||
$canSkipFirstStepIfNameAndBillingAddressIsKnown = FALSE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -182,6 +180,7 @@ class _checkout extends \IPS\Dispatcher\Controller
|
||||
/* Init */
|
||||
$buttonLang = 'continue_to_review';
|
||||
$needBillingInfo = ( $this->invoice->hasItemsRequiringBillingAddress() or $this->invoice->hasPhysicalItems() );
|
||||
$needTaxStatus = NULL;
|
||||
|
||||
if ( $this->invoice->hasPhysicalItems() )
|
||||
{
|
||||
@@ -254,6 +253,26 @@ class _checkout extends \IPS\Dispatcher\Controller
|
||||
}
|
||||
if ( $needBillingInfo )
|
||||
{
|
||||
/* Do we need to know if they are a business or consumer? */
|
||||
foreach ( $this->invoice->items as $item )
|
||||
{
|
||||
if ( $tax = $item->tax )
|
||||
{
|
||||
if ( $tax->type === 'eu' )
|
||||
{
|
||||
$needTaxStatus = 'eu';
|
||||
break;
|
||||
}
|
||||
if ( $tax->type === 'business' )
|
||||
{
|
||||
$needTaxStatus = 'business';
|
||||
}
|
||||
}
|
||||
}
|
||||
$addressHelperClass = $needTaxStatus ? 'IPS\nexus\Form\BusinessAddress' : 'IPS\Helpers\Form\Address';
|
||||
$addressHelperOptions = ( $needTaxStatus === 'eu' ) ? array( 'vat' => TRUE ) : array();
|
||||
|
||||
/* The actual billing address */
|
||||
$addresses = \IPS\Db::i()->select( '*', 'nexus_customer_addresses', array( '`member`=?', \IPS\Member::loggedIn()->member_id ) );
|
||||
if ( \count( $addresses ) )
|
||||
{
|
||||
@@ -261,7 +280,7 @@ class _checkout extends \IPS\Dispatcher\Controller
|
||||
$options = array();
|
||||
foreach ( new \IPS\Patterns\ActiveRecordIterator( $addresses, 'IPS\nexus\Customer\Address' ) as $address )
|
||||
{
|
||||
$options[ $address->id ] = $address->address->toString('<br>');
|
||||
$options[ $address->id ] = $address->address->toString('<br>') . ( ( isset( $address->address->business ) and $address->address->business and isset( $address->address->vat ) and $address->address->vat ) ? ( '<br>' . \IPS\Member::loggedIn()->language()->addToStack('cm_checkout_vat_number') . ': ' . mb_strtoupper( preg_replace( '/[^A-Z0-9]/', '', $address->address->vat ) ) ) : '' );
|
||||
if ( ( !$this->invoice->billaddress and $address->primary_billing ) or $this->invoice->billaddress == $address->address )
|
||||
{
|
||||
$billing = $address->id;
|
||||
@@ -270,13 +289,13 @@ class _checkout extends \IPS\Dispatcher\Controller
|
||||
$options[0] = \IPS\Member::loggedIn()->language()->addToStack( 'other' );
|
||||
|
||||
$form->add( new \IPS\Helpers\Form\Radio( 'billing_address', $billing, TRUE, array( 'options' => $options, 'toggles' => array( 0 => array( 'new_billing_address' ) ), 'parse' => 'raw' ) ) );
|
||||
$newAddress = new \IPS\Helpers\Form\Address( 'new_billing_address', !$billing ? $this->invoice->billaddress : NULL, FALSE, array(), NULL, NULL, NULL, 'new_billing_address' );
|
||||
$newAddress = new $addressHelperClass( 'new_billing_address', !$billing ? $this->invoice->billaddress : NULL, FALSE, $addressHelperOptions, NULL, NULL, NULL, 'new_billing_address' );
|
||||
$newAddress->label = ' ';
|
||||
$form->add( $newAddress );
|
||||
}
|
||||
else
|
||||
{
|
||||
$form->add( new \IPS\Helpers\Form\Address( 'new_billing_address', $this->invoice->billaddress, TRUE ) );
|
||||
$form->add( new $addressHelperClass( 'new_billing_address', $this->invoice->billaddress, TRUE, $addressHelperOptions ) );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -521,10 +540,24 @@ class _checkout extends \IPS\Dispatcher\Controller
|
||||
$member->cm_first_name = $values['cm_first_name'];
|
||||
$member->cm_last_name = $values['cm_last_name'];
|
||||
|
||||
if( !\IPS\Login::usernameIsInUse( "{$values['cm_first_name']} {$values['cm_last_name']}" ) )
|
||||
/* If this name is available, use that, otherwise append a number to the name to avoid an incomplete account. */
|
||||
$i = 0;
|
||||
do
|
||||
{
|
||||
$member->name = "{$values['cm_first_name']} {$values['cm_last_name']}";
|
||||
$name = "{$values['cm_first_name']} {$values['cm_last_name']}";
|
||||
if ( $i > 0 )
|
||||
{
|
||||
$name .= $i;
|
||||
}
|
||||
|
||||
if ( !\IPS\Login::usernameIsInUse( $name ) )
|
||||
{
|
||||
$member->name = $name;
|
||||
break;
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
while( TRUE );
|
||||
}
|
||||
$member->email = $values['email_address'];
|
||||
$member->setLocalPassword( $values['password'] );
|
||||
@@ -935,7 +968,7 @@ class _checkout extends \IPS\Dispatcher\Controller
|
||||
/* Remove any existing shipping charges on the invoice */
|
||||
foreach ( $this->invoice->items as $k => $v )
|
||||
{
|
||||
if ( $v instanceof \IPS\nexus\extensions\nexus\Item\ ShippingCharge )
|
||||
if ( $v instanceof \IPS\nexus\extensions\nexus\Item\ShippingCharge )
|
||||
{
|
||||
$this->invoice->removeItem( $k );
|
||||
}
|
||||
@@ -1134,6 +1167,21 @@ 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' )
|
||||
{
|
||||
$package = \IPS\nexus\Package::load( $item->id );
|
||||
$data = $package->optionValuesStockAndPrice( $package->optionValues( $item->details ) );
|
||||
|
||||
if ( $data['stock'] != -1 and $data['stock'] < $item->quantity )
|
||||
{
|
||||
\IPS\Output::i()->error( \IPS\Member::loggedIn()->language()->addToStack( 'not_enough_in_stock_checkout', FALSE, array( 'pluralize' => array( $data['stock'] ), 'sprintf' => array( $item->name ) ) ), '1X196/G', 403, '' );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Work out recurring payments */
|
||||
$recurrings = array();
|
||||
@@ -1223,50 +1271,54 @@ class _checkout extends \IPS\Dispatcher\Controller
|
||||
}
|
||||
}
|
||||
|
||||
/* If there's something to pay, we'll need to look at the gateways... */
|
||||
/* Get available payment methods, removing any that aren't supported by the items on this invoice */
|
||||
$paymentMethods = array();
|
||||
foreach ( \IPS\nexus\Gateway::roots() as $gateway )
|
||||
{
|
||||
$paymentMethods[ $gateway->id ] = $gateway;
|
||||
}
|
||||
$canUseAccountCredit = TRUE;
|
||||
foreach ( $this->invoice->items as $item )
|
||||
{
|
||||
if ( $item->paymentMethodIds )
|
||||
{
|
||||
foreach ( $paymentMethods as $k => $v )
|
||||
{
|
||||
if ( \in_array( '*', $item->paymentMethodIds ) ) // This looks odd but in older versions IPS\nexus\extensions\nexus\Item\Subscription::renewalPaymentMethodIds() was mistakenly returning array('*') and since the value is stored in the invoice we have to keep this for compatibility with invoices created at that time
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( !\in_array( $k, $item->paymentMethodIds ) )
|
||||
{
|
||||
unset( $paymentMethods[ $k ] );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( !$item::$canUseAccountCredit )
|
||||
{
|
||||
$canUseAccountCredit = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
/* If there's something to pay, show a form for it... */
|
||||
$paymentType = NULL;
|
||||
$hiddenValues = array();
|
||||
if ( $amountToPay->amount->isGreaterThanZero() )
|
||||
{
|
||||
$paymentType = 'pay';
|
||||
|
||||
/* Get available payment methods */
|
||||
$paymentMethods = array();
|
||||
foreach ( \IPS\nexus\Gateway::roots() as $gateway )
|
||||
/* Remove any payment methods that can't be used for this transaction */
|
||||
foreach ( $paymentMethods as $gateway )
|
||||
{
|
||||
if ( $gateway->checkValidity( $amountToPay, $this->invoice->billaddress, \IPS\nexus\Customer::loggedIn()->member_id ? \IPS\nexus\Customer::loggedIn() : \IPS\nexus\Customer::constructFromData( $this->invoice->guest_data['member'] ), $recurrings ) )
|
||||
if ( !$gateway->checkValidity( $amountToPay, $this->invoice->billaddress, \IPS\nexus\Customer::loggedIn()->member_id ? \IPS\nexus\Customer::loggedIn() : \IPS\nexus\Customer::constructFromData( $this->invoice->guest_data['member'] ), $recurrings ) )
|
||||
{
|
||||
$paymentMethods[ $gateway->id ] = $gateway;
|
||||
unset( $paymentMethods[ $gateway->id ] );
|
||||
}
|
||||
}
|
||||
|
||||
/* Remove any not supported by items */
|
||||
$canUseAccountCredit = TRUE;
|
||||
foreach ( $this->invoice->items as $item )
|
||||
{
|
||||
if ( $item->paymentMethodIds )
|
||||
{
|
||||
foreach ( $paymentMethods as $k => $v )
|
||||
{
|
||||
if ( \in_array( '*', $item->paymentMethodIds ) ) // This looks odd but in older versions IPS\nexus\extensions\nexus\Item\Subscription::renewalPaymentMethodIds() was mistakenly returning array('*') and since the value is stored in the invoice we have to keep this for compatibility with invoices created at that time
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( !\in_array( $k, $item->paymentMethodIds ) )
|
||||
{
|
||||
unset( $paymentMethods[ $k ] );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( !$item::$canUseAccountCredit )
|
||||
{
|
||||
$canUseAccountCredit = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
/* If we don't have any, show an error */
|
||||
/* If we don't have any available payment methods, show an error */
|
||||
if ( \count( $paymentMethods ) === 0 and !$amountToPay->amount->isZero() )
|
||||
{
|
||||
\IPS\Output::i()->error( 'err_no_methods', '4X196/3', 500, 'err_no_methods_admin' );
|
||||
@@ -1312,7 +1364,7 @@ class _checkout extends \IPS\Dispatcher\Controller
|
||||
}
|
||||
}
|
||||
/* If there's nothing to pay now, but there will be something to pay later... if we DON'T have any stored payment methods, we may be able to prompt the user to create one */
|
||||
elseif ( $recurrings and \IPS\nexus\Gateway::cardStorageGateways() and !\IPS\Db::i()->select( 'COUNT(*)', 'nexus_customer_cards', array( 'card_member=?', \IPS\nexus\Customer::loggedIn()->member_id ) )->first() and $elements = \IPS\nexus\Customer\CreditCard::createFormElements( \IPS\nexus\Customer::loggedIn(), FALSE, $showSubmitButton, $hiddenValues ) )
|
||||
elseif ( $recurrings and array_intersect( array_keys( $paymentMethods ), array_keys( \IPS\nexus\Gateway::cardStorageGateways() ) ) and !\IPS\Db::i()->select( 'COUNT(*)', 'nexus_customer_cards', array( 'card_member=?', \IPS\nexus\Customer::loggedIn()->member_id ) )->first() and $elements = \IPS\nexus\Customer\CreditCard::createFormElements( \IPS\nexus\Customer::loggedIn(), FALSE, $showSubmitButton, $hiddenValues ) )
|
||||
{
|
||||
$paymentType = 'card';
|
||||
}
|
||||
@@ -1444,8 +1496,8 @@ class _checkout extends \IPS\Dispatcher\Controller
|
||||
$transaction->save();
|
||||
|
||||
$credits[ $this->invoice->currency ]->amount = $credits[ $this->invoice->currency ]->amount->subtract( $transaction->amount->amount );
|
||||
$this->invoice->member->cm_credits = $credits;
|
||||
$this->invoice->member->save();
|
||||
\IPS\nexus\Customer::loggedIn()->cm_credits = $credits;
|
||||
\IPS\nexus\Customer::loggedIn()->save();
|
||||
|
||||
$this->invoice->member->log( 'transaction', array(
|
||||
'type' => 'paid',
|
||||
@@ -1565,9 +1617,6 @@ class _checkout extends \IPS\Dispatcher\Controller
|
||||
/* Check if there's anything still to pay */
|
||||
if ( $this->invoice->amountToPay()->amount->isZero() )
|
||||
{
|
||||
/* Mark the invoice paid */
|
||||
$this->invoice->markPaid();
|
||||
|
||||
/* Redirect */
|
||||
$destination = $this->invoice->return_uri ?: $this->invoice->url();
|
||||
if ( \IPS\Member::loggedIn()->member_id )
|
||||
|
||||
@@ -35,6 +35,7 @@ class _addresses extends \IPS\Dispatcher\Controller
|
||||
\IPS\Output::i()->error( 'no_module_permission_guest', '2X235/1', 403, '' );
|
||||
}
|
||||
|
||||
\IPS\Output::i()->jsFiles = array_merge( \IPS\Output::i()->jsFiles, \IPS\Output::i()->js( 'global_forms.js', 'nexus', 'global' ) );
|
||||
\IPS\Output::i()->cssFiles = array_merge( \IPS\Output::i()->cssFiles, \IPS\Theme::i()->css( 'clients.css', 'nexus' ) );
|
||||
\IPS\Output::i()->breadcrumb[] = array( \IPS\Http\Url::internal( 'app=nexus&module=clients&controller=addresses', 'front', 'clientsaddresses' ), \IPS\Member::loggedIn()->language()->addToStack('client_addresses') );
|
||||
\IPS\Output::i()->title = \IPS\Member::loggedIn()->language()->addToStack('client_addresses');
|
||||
|
||||
@@ -79,6 +79,18 @@ class _credit extends \IPS\Dispatcher\Controller
|
||||
$perPage
|
||||
);
|
||||
$pastWithdrawals = new \IPS\Patterns\ActiveRecordIterator( $pastWithdrawalsSelect, 'IPS\nexus\Payout' );
|
||||
|
||||
$activePayouts = [];
|
||||
if( !\IPS\Settings::i()->nexus_payout_unlimited_times )
|
||||
{
|
||||
foreach ( $pastWithdrawals as $payout )
|
||||
{
|
||||
if ( $payout->status == \IPS\nexus\Payout::STATUS_PENDING )
|
||||
{
|
||||
$activePayouts[ $payout->currency ] = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Can we withdraw? */
|
||||
$canWithdraw = FALSE;
|
||||
@@ -87,7 +99,7 @@ class _credit extends \IPS\Dispatcher\Controller
|
||||
{
|
||||
foreach ( \IPS\nexus\Money::currencies() as $currency )
|
||||
{
|
||||
if ( isset( $balance[ $currency ] ) and $balance[ $currency ]->amount->isGreaterThanZero() )
|
||||
if ( isset( $balance[ $currency ] ) and $balance[ $currency ]->amount->isGreaterThanZero() and !isset( $activePayouts[ $currency ] ) )
|
||||
{
|
||||
$canWithdraw = TRUE;
|
||||
}
|
||||
@@ -130,6 +142,7 @@ class _credit extends \IPS\Dispatcher\Controller
|
||||
*/
|
||||
protected function withdraw()
|
||||
{
|
||||
$activeWithdrawals = \IPS\Settings::i()->nexus_payout_unlimited_times ? [] : iterator_to_array( \IPS\Db::i()->select( 'po_currency', 'nexus_payouts', array( 'po_status=? AND po_member=?', \IPS\nexus\Payout::STATUS_PENDING, \IPS\nexus\Customer::loggedIn()->member_id ) ) );
|
||||
$withdrawForm = NULL;
|
||||
$withdrawOptions = json_decode( \IPS\Settings::i()->nexus_payout, TRUE );
|
||||
if ( isset( $withdrawOptions['Stripe'] ) )
|
||||
@@ -154,7 +167,7 @@ class _credit extends \IPS\Dispatcher\Controller
|
||||
$currencyToggles = array();
|
||||
foreach ( \IPS\nexus\Money::currencies() as $currency )
|
||||
{
|
||||
if ( isset( $balance[ $currency ] ) )
|
||||
if ( isset( $balance[ $currency ] ) AND !\in_array( $currency, $activeWithdrawals ) )
|
||||
{
|
||||
$currencyOptions[ $currency ] = $currency;
|
||||
$currencyToggles[ $currency ] = array( 'withdraw_amount_' . $currency );
|
||||
@@ -163,11 +176,11 @@ class _credit extends \IPS\Dispatcher\Controller
|
||||
|
||||
$withdrawForm->add( new \IPS\Helpers\Form\Radio( 'withdraw_currency', NULL, TRUE, array( 'options' => $currencyOptions, 'toggles' => $currencyToggles ) ) );
|
||||
}
|
||||
|
||||
|
||||
$canWithdraw = FALSE;
|
||||
foreach ( \IPS\nexus\Money::currencies() as $currency )
|
||||
{
|
||||
if ( !isset( $balance[ $currency ] ) )
|
||||
if ( !isset( $balance[ $currency ] ) OR ( !\IPS\Settings::i()->nexus_payout_unlimited_times AND \in_array( $currency, $activeWithdrawals ) ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
@@ -177,10 +190,10 @@ class _credit extends \IPS\Dispatcher\Controller
|
||||
/* Default 'max' is our balance */
|
||||
$max = (string) $balance[ $currency ]->amount;
|
||||
|
||||
/* Do we have a maximum withdrawl amount set up? */
|
||||
/* Do we have a maximum withdrawal amount set up? */
|
||||
if( $maximumWithdrawalsAmounts AND $maximumWithdrawalsAmounts[ $currency ] )
|
||||
{
|
||||
/* If our maximum withdrawl amount is less than our balance, then the max we can withdraw is that */
|
||||
/* If our maximum withdrawal amount is less than our balance, then the max we can withdraw is that */
|
||||
$upperLimit = $maximumWithdrawalsAmounts[ $currency ];
|
||||
|
||||
/* Determine our date cutoff */
|
||||
|
||||
@@ -46,7 +46,13 @@ class _donations extends \IPS\Dispatcher\Controller
|
||||
\IPS\Output::i()->title = \IPS\Member::loggedIn()->language()->addToStack('client_donations');
|
||||
\IPS\Output::i()->sidebar['enabled'] = FALSE;
|
||||
\IPS\Output::i()->cssFiles = array_merge( \IPS\Output::i()->cssFiles, \IPS\Theme::i()->css( 'donations.css' ) );
|
||||
|
||||
|
||||
/* "Nowt 'ere lad, may as well knock it over tut 404" - Marc */
|
||||
if( \count( \IPS\nexus\Donation\Goal::roots() ) === 0 )
|
||||
{
|
||||
\IPS\Output::i()->error( 'nexus_no_donations_found', '1X238/2', 404, '' );
|
||||
}
|
||||
|
||||
\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate('clients')->donations();
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief Legacy Referrals Controller
|
||||
* @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 10 Sep 2020
|
||||
*/
|
||||
|
||||
namespace IPS\nexus\modules\front\clients;
|
||||
|
||||
/* 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;
|
||||
}
|
||||
|
||||
/**
|
||||
* Legacy Referrals Controller
|
||||
*/
|
||||
class _referrals extends \IPS\Dispatcher\Controller
|
||||
{
|
||||
/**
|
||||
* Manage
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function manage()
|
||||
{
|
||||
/* Referrals have moved to the core. */
|
||||
\IPS\Output::i()->redirect( \IPS\Http\Url::internal( "app=core&module=system&controller=settings&area=referrals", 'front', 'settings_referrals' ) );
|
||||
}
|
||||
}
|
||||
@@ -435,6 +435,8 @@ class _product extends \IPS\Content\Controller
|
||||
}
|
||||
}
|
||||
|
||||
ksort( $options );
|
||||
|
||||
$form->add( new \IPS\Helpers\Form\Radio( 'renewal_term', NULL, TRUE, array( 'options' => $options ) ) );
|
||||
}
|
||||
|
||||
|
||||
@@ -54,6 +54,8 @@ class _store 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=store&controller=store', 'front', 'store' ) );
|
||||
}
|
||||
$this->currency = \IPS\Request::i()->currency;
|
||||
}
|
||||
|
||||
@@ -37,6 +37,8 @@ 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' ) );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,7 +59,12 @@ class _subscriptions extends \IPS\Dispatcher\Controller
|
||||
|
||||
/* Create the table */
|
||||
$table = new \IPS\nexus\Subscription\Table( \IPS\Http\Url::internal( 'app=nexus&module=subscriptions&controller=subscriptions', 'front', 'nexus_subscriptions' ) );
|
||||
$table->activeSubscription = \IPS\nexus\Subscription::loadByMember( \IPS\Member::loggedIn(), FALSE );
|
||||
$current = \IPS\nexus\Subscription::loadByMember( \IPS\Member::loggedIn(), FALSE );
|
||||
|
||||
if ( $current AND ( !$current->purchase OR !$current->purchase->cancelled OR $current->purchase->can_reactivate ) )
|
||||
{
|
||||
$table->activeSubscription = $current;
|
||||
}
|
||||
|
||||
if ( isset( \IPS\Request::i()->purchased ) and $table->activeSubscription )
|
||||
{
|
||||
@@ -118,12 +125,15 @@ class _subscriptions extends \IPS\Dispatcher\Controller
|
||||
|
||||
/* Fetch purchase */
|
||||
$purchase = NULL;
|
||||
foreach ( \IPS\nexus\extensions\nexus\Item\Subscription::getPurchases( \IPS\nexus\Customer::loggedIn(), $subscription->package->id ) as $row )
|
||||
if( $subscription )
|
||||
{
|
||||
if ( $row->active and ! $row->cancelled )
|
||||
foreach ( \IPS\nexus\extensions\nexus\Item\Subscription::getPurchases( \IPS\nexus\Customer::loggedIn(), $subscription->package->id ) as $row )
|
||||
{
|
||||
$purchase = $row;
|
||||
break;
|
||||
if ( $row->active and ! $row->cancelled )
|
||||
{
|
||||
$purchase = $row;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -162,8 +172,8 @@ class _subscriptions extends \IPS\Dispatcher\Controller
|
||||
/* CSRF Check */
|
||||
\IPS\Session::i()->csrfCheck();
|
||||
|
||||
/* Already purchased a subscription? */
|
||||
if ( \IPS\nexus\Subscription::loadByMember( \IPS\nexus\Customer::loggedIn(), 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 ) ) )
|
||||
{
|
||||
\IPS\Output::i()->error( 'nexus_subs_already_got_package', '2X379/6', 403, '' );
|
||||
}
|
||||
@@ -235,7 +245,7 @@ class _subscriptions extends \IPS\Dispatcher\Controller
|
||||
\IPS\Output::i()->error( 'nexus_no_subs_subs', '2X379/8', 404, '' );
|
||||
}
|
||||
$purchase = NULL;
|
||||
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->can_reactivate )
|
||||
{
|
||||
@@ -256,9 +266,10 @@ class _subscriptions extends \IPS\Dispatcher\Controller
|
||||
$purchase->member->log( 'purchase', array( 'type' => 'info', 'id' => $purchase->id, 'name' => $purchase->name, 'info' => 'change_renewals', 'to' => array( 'cost' => $purchase->renewals->cost->amount, 'currency' => $purchase->renewals->cost->currency, 'term' => $purchase->renewals->getTerm() ) ) );
|
||||
|
||||
/* Either send to renewal invoice or just back to subscriptions list */
|
||||
if ( !$purchase->active and $purchase->canRenewUntil() !== FALSE )
|
||||
if ( !$purchase->active and $cycles = $purchase->canRenewUntil( NULL, TRUE ) AND $cycles !== FALSE )
|
||||
{
|
||||
\IPS\Output::i()->redirect( $purchase->url()->setQueryString( 'do', 'renew' )->csrf() );
|
||||
$url = $cycles === 1 ? $purchase->url()->setQueryString( 'do', 'renew' )->csrf() : $purchase->url()->setQueryString( 'do', 'renew' );
|
||||
\IPS\Output::i()->redirect( $url );
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -266,4 +277,45 @@ class _subscriptions extends \IPS\Dispatcher\Controller
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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,63 @@
|
||||
<?php
|
||||
/**
|
||||
* @brief Handle actions from emails
|
||||
* @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 Nexus
|
||||
* @since 17 Nov 2020
|
||||
*/
|
||||
|
||||
namespace IPS\nexus\modules\front\support;
|
||||
|
||||
/* 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;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle actions from emails
|
||||
*/
|
||||
class _email extends \IPS\Dispatcher\Controller
|
||||
{
|
||||
/**
|
||||
* Send or discard reply
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function sendDiscard()
|
||||
{
|
||||
try
|
||||
{
|
||||
$reply = \IPS\nexus\Support\Reply::load( \IPS\Request::i()->id );
|
||||
if ( !\IPS\Login::compareHashes( md5( $reply->item()->email_key . $reply->date ), (string) \IPS\Request::i()->key ) )
|
||||
{
|
||||
throw new \OutOfRangeException;
|
||||
}
|
||||
}
|
||||
catch ( \OutOfRangeException $e )
|
||||
{
|
||||
\IPS\Output::i()->error( 'node_error', '2X206/1', 404, '' );
|
||||
}
|
||||
|
||||
if ( $reply->type !== \IPS\nexus\Support\Reply::REPLY_PENDING )
|
||||
{
|
||||
\IPS\Output::i()->error( 'support_reply_not_pending', '1X206/2', 403, '' );
|
||||
}
|
||||
|
||||
if ( \IPS\Request::i()->send )
|
||||
{
|
||||
$reply->sendPending();
|
||||
}
|
||||
else
|
||||
{
|
||||
$reply->delete();
|
||||
}
|
||||
|
||||
\IPS\Output::i()->title = \IPS\Member::loggedIn()->language()->addToStack( \IPS\Request::i()->send ? 'support_pending_sent' : 'support_pending_discarded' );
|
||||
\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate( 'support', 'nexus', 'front' )->pendingDone( \IPS\Request::i()->send ? 'support_pending_sent' : 'support_pending_discarded' );
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105101,
|
||||
"name": "4.5.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": 105102,
|
||||
"name": "4.5.1 Beta 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,25 @@
|
||||
{
|
||||
"html": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"admin\/purchases\/view",
|
||||
"admin\/support\/noteForm",
|
||||
"admin\/support\/request",
|
||||
"admin\/support\/requestActions",
|
||||
"admin\/support\/staffReplyForm"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"css": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"admin\/support.css"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"resources": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105103,
|
||||
"name": "4.5.1 Beta 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": 105104,
|
||||
"name": "4.5.1 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": 105105,
|
||||
"name": "4.5.1 Beta 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": 105106,
|
||||
"name": "4.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": 105107,
|
||||
"name": "4.5.2",
|
||||
"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,19 @@
|
||||
{
|
||||
"html": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"front\/clients\/cards"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"css": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
},
|
||||
"resources": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105108,
|
||||
"name": "4.5.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": 105109,
|
||||
"name": "4.5.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": 105110,
|
||||
"name": "4.5.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": 105111,
|
||||
"name": "4.5.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": 105112,
|
||||
"name": "4.5.3",
|
||||
"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,19 @@
|
||||
{
|
||||
"html": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"global\/forms\/renewalTerm"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"css": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
},
|
||||
"resources": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105113,
|
||||
"name": "4.5.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": 105114,
|
||||
"name": "4.5.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": 105115,
|
||||
"name": "4.5.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": 105116,
|
||||
"name": "4.5.4",
|
||||
"steps": {
|
||||
"queries": false,
|
||||
"lang": true,
|
||||
"theme": true,
|
||||
"themeSettings": false,
|
||||
"javascript": false,
|
||||
"emailTemplates": false,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": false,
|
||||
"tasks": true,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"normal": {
|
||||
"added": [
|
||||
"billing_agreement_check"
|
||||
],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
},
|
||||
"js": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"added": [
|
||||
"billingAgreements",
|
||||
"gatewayPending"
|
||||
],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"html": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"global\/forms\/businessAddress",
|
||||
"front\/subscription\/row",
|
||||
"front\/widgets\/featuredProduct"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"css": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"front\/subscriptions.css"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"resources": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"id": 105117,
|
||||
"name": "4.5.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": 105118,
|
||||
"name": "4.5.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": 105119,
|
||||
"name": "4.5.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": 105120,
|
||||
"name": "4.5.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": 105121,
|
||||
"name": "4.5.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": 105122,
|
||||
"name": "4.5.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": 105123,
|
||||
"name": "4.5.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": 105124,
|
||||
"name": "4.5.4.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": 105125,
|
||||
"name": "4.5.4.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": 105126,
|
||||
"name": "4.5.4.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": 105127,
|
||||
"name": "4.5.4.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": 105128,
|
||||
"name": "4.5.4.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": 105129,
|
||||
"name": "4.5.4.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": 105130,
|
||||
"name": "4.5.4.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": 106100,
|
||||
"name": "4.6.0 Beta 1",
|
||||
"steps": {
|
||||
"queries": true,
|
||||
"lang": true,
|
||||
"theme": true,
|
||||
"themeSettings": true,
|
||||
"javascript": true,
|
||||
"emailTemplates": true,
|
||||
"hooks": false,
|
||||
"acpSearchKeywords": false,
|
||||
"settings": true,
|
||||
"tasks": false,
|
||||
"modules": false,
|
||||
"widgets": false,
|
||||
"whatsnew": false,
|
||||
"customOptions": false,
|
||||
"customRoutines": false
|
||||
},
|
||||
"forceMainUpgrader": false,
|
||||
"forceManualDownloadNoCiC": false,
|
||||
"forceManualDownloadCiC": false
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"added": [
|
||||
"invoiceNotify"
|
||||
],
|
||||
"edited": [
|
||||
"staffReplyPending",
|
||||
"newInvoice",
|
||||
"invoiceWarning",
|
||||
"invoiceMarkedPaid",
|
||||
"transactionGatewayPending",
|
||||
"transactionApproved",
|
||||
"transactionHeld",
|
||||
"transactionWaiting",
|
||||
"transactionFailed",
|
||||
"transactionRefunded",
|
||||
"acp_notification_Transaction"
|
||||
],
|
||||
"removed": []
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"files": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"nexus\/global\/controllers\/gateways\/ips.gateways.stripe.js",
|
||||
"nexus\/admin\/controllers\/support\/ips.support.request.js",
|
||||
"nexus\/admin\/templates\/ips.templates.store.js"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"orders": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"normal": {
|
||||
"added": [
|
||||
"__defart_support_request_plural",
|
||||
"__defart_product_reviews_plural",
|
||||
"__defart_product_plural",
|
||||
"product_groups_sg",
|
||||
"mailsub__nexus_invoiceNotify",
|
||||
"invoice_track",
|
||||
"invoice_untrack",
|
||||
"can_not_reactivate",
|
||||
"nexus_payout_confirm_title",
|
||||
"nexus_payout_proceed",
|
||||
"nexus_payout_confirm_text",
|
||||
"nexus_payout_unlimited_times",
|
||||
"nexus_payout_unlimited_times_desc",
|
||||
"not_enough_in_stock_checkout",
|
||||
"email_tracked_invoice_paid",
|
||||
"emailtpl_invoiceNotify",
|
||||
"view_this_product",
|
||||
"not_with_existing_subscription",
|
||||
"achievement_filter_Subscriptions_node_prefix",
|
||||
"achievement_filter_Subscriptions_nth",
|
||||
"achievement_filter_Subscriptions",
|
||||
"achievement_filter_Subscription_nth_suffix",
|
||||
"AchievementAction__Subscription",
|
||||
"AchievementAction__Subscription_title",
|
||||
"AchievementAction__Subscription_title_generic",
|
||||
"achievement_filter_Subscriptions_active",
|
||||
"achievements_filter_Subscription_type",
|
||||
"achievements_filter_Subscription_pl"
|
||||
],
|
||||
"edited": [
|
||||
"manage_orders_in_billing",
|
||||
"track_orders_in_billing",
|
||||
"altcontact_email_desc",
|
||||
"altcontact_none",
|
||||
"nexus_subs_non_available"
|
||||
],
|
||||
"removed": [
|
||||
"r__stats"
|
||||
]
|
||||
},
|
||||
"js": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
{
|
||||
"1": {
|
||||
"method": "createTable",
|
||||
"params": [
|
||||
{
|
||||
"name": "nexus_invoice_tracker",
|
||||
"columns": {
|
||||
"member_id": {
|
||||
"name": "member_id",
|
||||
"type": "BIGINT",
|
||||
"length": "20",
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": false,
|
||||
"default": null,
|
||||
"comment": "ID Number",
|
||||
"unsigned": true,
|
||||
"auto_increment": false
|
||||
},
|
||||
"invoice_id": {
|
||||
"name": "invoice_id",
|
||||
"type": "BIGINT",
|
||||
"length": null,
|
||||
"decimals": null,
|
||||
"values": null,
|
||||
"allow_null": false,
|
||||
"default": null,
|
||||
"comment": "",
|
||||
"unsigned": true,
|
||||
"auto_increment": false
|
||||
}
|
||||
},
|
||||
"indexes": {
|
||||
"PRIMARY": {
|
||||
"type": "primary",
|
||||
"name": "PRIMARY",
|
||||
"columns": [
|
||||
"member_id",
|
||||
"invoice_id"
|
||||
],
|
||||
"length": [
|
||||
null,
|
||||
null
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"2": {
|
||||
"method": "changeColumn",
|
||||
"params": [
|
||||
"nexus_support_fields",
|
||||
"sf_max_input",
|
||||
{
|
||||
"name": "sf_max_input",
|
||||
"type": "MEDIUMINT",
|
||||
"length": 6,
|
||||
"decimals": null,
|
||||
"values": [],
|
||||
"allow_null": false,
|
||||
"default": "0",
|
||||
"comment": "",
|
||||
"unsigned": false,
|
||||
"auto_increment": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"3": {
|
||||
"method": "delete",
|
||||
"params": [
|
||||
"nexus_alternate_contacts",
|
||||
[
|
||||
"main_id = alt_id"
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"added": [
|
||||
"nexus_payout_unlimited_times"
|
||||
],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"html": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"front\/checkout\/changeShippingAddressForm",
|
||||
"front\/checkout\/checkoutShippingForm",
|
||||
"front\/checkout\/confirmAndPay",
|
||||
"front\/checkout\/couponForm",
|
||||
"front\/checkout\/customerInformationForm",
|
||||
"front\/checkout\/paymentForm",
|
||||
"front\/clients\/addresses",
|
||||
"global\/forms\/addPaymentMethodForm",
|
||||
"front\/store\/giftCardForm",
|
||||
"front\/subscription\/row",
|
||||
"front\/subscription\/table",
|
||||
"admin\/support\/filterForm",
|
||||
"admin\/support\/filterFormStream",
|
||||
"admin\/support\/latestFeedback",
|
||||
"admin\/support\/myDepartments",
|
||||
"admin\/support\/noteForm",
|
||||
"admin\/support\/replyContainer",
|
||||
"admin\/support\/request",
|
||||
"admin\/support\/requestsTableResults",
|
||||
"admin\/support\/staffReplyForm",
|
||||
"admin\/transactions\/stripeDispute",
|
||||
"front\/widgets\/recentCommerceReviews"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"css": {
|
||||
"added": [],
|
||||
"edited": [
|
||||
"admin\/nexus.css"
|
||||
],
|
||||
"removed": []
|
||||
},
|
||||
"resources": {
|
||||
"added": [],
|
||||
"edited": [],
|
||||
"removed": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"added": [],
|
||||
"edited": [
|
||||
"cm_store_view"
|
||||
],
|
||||
"removed": []
|
||||
}
|
||||
Loaded 100 of 2036 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user