default.tpl 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752
  1. <script>
  2. // Define state tab index value
  3. var statesTab = 10;
  4. // Do not enforce state input client side
  5. var stateNotRequired = true;
  6. </script>
  7. {include file="orderforms/{$carttpl}/common.tpl"}
  8. <script type="text/javascript" src="{$BASE_PATH_JS}/StatesDropdown.js"></script>
  9. <script type="text/javascript" src="{$BASE_PATH_JS}/PasswordStrength.js"></script>
  10. <script>
  11. window.langPasswordStrength = "{$LANG.pwstrength}";
  12. window.langPasswordWeak = "{$LANG.pwstrengthweak}";
  13. window.langPasswordModerate = "{$LANG.pwstrengthmoderate}";
  14. window.langPasswordStrong = "{$LANG.pwstrengthstrong}";
  15. </script>
  16. <div class="row">
  17. <div class="col-md-12">
  18. <div class="already-registered {if $loggedin}w-hidden{/if}">
  19. <div class="float-right">
  20. <button type="button" class="btn btn-primary{if $loggedin || !$loggedin && $custtype eq "existing"} w-hidden{/if}" id="btnAlreadyRegistered">
  21. {$LANG.orderForm.alreadyRegistered}
  22. </button>
  23. <button type="button" class="btn btn-primary{if $loggedin || $custtype neq "existing"} w-hidden{/if}" id="btnNewUserSignup">
  24. {$LANG.orderForm.createAccount}
  25. </button>
  26. </div>
  27. <div class="clearfix"></div>
  28. </div>
  29. {if $errormessage}
  30. <div class="alert alert-danger checkout-error-feedback" role="alert">
  31. <p>{$LANG.orderForm.correctErrors}:</p>
  32. <ul>
  33. {$errormessage}
  34. </ul>
  35. </div>
  36. <div class="clearfix"></div>
  37. {/if}
  38. <form method="post" action="{$smarty.server.PHP_SELF}?a=checkout" name="orderfrm" id="frmCheckout">
  39. <input type="hidden" name="submit" value="true" />
  40. <input type="hidden" name="custtype" id="inputCustType" value="{$custtype}" />
  41. {if $custtype neq "new" && $loggedin}
  42. <div class="sub-heading">
  43. <span>
  44. {lang key='switchAccount.title'}
  45. </span>
  46. </div>
  47. <div id="containerExistingAccountSelect" class="row account-select-container">
  48. {foreach $accounts as $account}
  49. <div class="col-sm-{if $accounts->count() == 1}12{else}6{/if}">
  50. <div class="account{if $selectedAccountId == $account->id} active{/if}">
  51. <label class="radio-inline" for="account{$account->id}">
  52. <input id="account{$account->id}" class="account-select{if $account->isClosed || $account->noPermission || $inExpressCheckout} disabled{/if}" type="radio" name="account_id" value="{$account->id}"{if $account->isClosed || $account->noPermission || $inExpressCheckout} disabled="disabled"{/if}{if $selectedAccountId == $account->id} checked="checked"{/if}>
  53. <span class="address">
  54. <strong>
  55. {if $account->companyname}{$account->companyname}{else}{$account->fullName}{/if}
  56. </strong>
  57. {if $account->isClosed || $account->noPermission}
  58. <span class="label label-default">
  59. {if $account->isClosed}
  60. {lang key='closed'}
  61. {else}
  62. {lang key='noPermission'}
  63. {/if}
  64. </span>
  65. {elseif $account->currencyCode}
  66. <span class="label label-info">
  67. {$account->currencyCode}
  68. </span>
  69. {/if}
  70. <br>
  71. <span class="small">
  72. {$account->address1}{if $account->address2}, {$account->address2}{/if}<br>
  73. {if $account->city}{$account->city},{/if}
  74. {if $account->state} {$account->state},{/if}
  75. {if $account->postcode} {$account->postcode},{/if}
  76. {$account->countryName}
  77. </span>
  78. </span>
  79. </label>
  80. </div>
  81. </div>
  82. {/foreach}
  83. <div class="col-sm-12">
  84. <div class="account border-bottom{if !$selectedAccountId || !is_numeric($selectedAccountId)} active{/if}">
  85. <label class="radio-inline">
  86. <input class="account-select" type="radio" name="account_id" value="new"{if !$selectedAccountId || !is_numeric($selectedAccountId)} checked="checked"{/if}{if $inExpressCheckout} disabled="disabled" class="disabled"{/if}>
  87. {lang key='orderForm.createAccount'}
  88. </label>
  89. </div>
  90. </div>
  91. </div>
  92. {/if}
  93. <div id="containerExistingUserSignin"{if $loggedin || $custtype neq "existing"} class="w-hidden"{/if}>
  94. <div class="sub-heading">
  95. <span>{$LANG.orderForm.existingCustomerLogin}</span>
  96. </div>
  97. <div class="alert alert-danger w-hidden" id="existingLoginMessage">
  98. </div>
  99. <div class="TM-card">
  100. <div class="row">
  101. <div class="col-lg-5">
  102. <div class="form-group prepend-icon">
  103. <label for="inputLoginEmail" class="field-icon">
  104. <i class="fas fa-envelope"></i>
  105. </label>
  106. <input type="text" name="loginemail" id="inputLoginEmail" class="field form-control" placeholder="{$LANG.orderForm.emailAddress}" value="{$loginemail}">
  107. </div>
  108. </div>
  109. <div class="col-lg-5">
  110. <div class="form-group prepend-icon">
  111. <label for="inputLoginPassword" class="field-icon">
  112. <i class="fas fa-lock"></i>
  113. </label>
  114. <input type="password" name="loginpassword" id="inputLoginPassword" class="field form-control" placeholder="{$LANG.clientareapassword}">
  115. </div>
  116. </div>
  117. <div class="col-lg-2">
  118. <button type="button" id="btnExistingLogin" class="btn btn-primary btn-md btn-block mb-lg-0 mb-3">
  119. <span id="existingLoginButton">{lang key='login'}</span>
  120. <span id="existingLoginPleaseWait" class="w-hidden"><i class="fad fa-circle-notch fa-spin"></i></span>
  121. </button>
  122. </div>
  123. </div>
  124. </div>
  125. <div class="padding-all">
  126. {include file="orderforms/{$carttpl}/linkedaccounts.tpl" linkContext="checkout-existing"}
  127. </div>
  128. </div>
  129. <div id="containerNewUserSignup"{if $custtype === 'existing' || (is_numeric($selectedAccountId) && $selectedAccountId > 0) || ($loggedin && $accounts->count() > 0 && $selectedAccountId !== 'new')} class="w-hidden"{/if}>
  130. <div{if $loggedin} class="w-hidden"{/if}>
  131. <div class="padding-all">
  132. {include file="orderforms/{$carttpl}/linkedaccounts.tpl" linkContext="checkout-new"}
  133. </div>
  134. </div>
  135. <h4>{$LANG.orderForm.personalInformation}</h4>
  136. <div class="TM-card">
  137. <div class="row">
  138. <div class="col-sm-6">
  139. <div class="form-group prepend-icon">
  140. <label for="inputFirstName" class="field-icon">
  141. <i class="fas fa-user"></i>
  142. </label>
  143. <input type="text" name="firstname" id="inputFirstName" class="field form-control" placeholder="{$LANG.orderForm.firstName}" value="{$clientsdetails.firstname}" autofocus>
  144. </div>
  145. </div>
  146. <div class="col-sm-6">
  147. <div class="form-group prepend-icon">
  148. <label for="inputLastName" class="field-icon">
  149. <i class="fas fa-user"></i>
  150. </label>
  151. <input type="text" name="lastname" id="inputLastName" class="field form-control" placeholder="{$LANG.orderForm.lastName}" value="{$clientsdetails.lastname}">
  152. </div>
  153. </div>
  154. <div class="col-sm-6">
  155. <div class="form-group prepend-icon">
  156. <label for="inputEmail" class="field-icon">
  157. <i class="fas fa-envelope"></i>
  158. </label>
  159. <input type="email" name="email" id="inputEmail" class="field form-control" placeholder="{$LANG.orderForm.emailAddress}" value="{$clientsdetails.email}">
  160. </div>
  161. </div>
  162. <div class="col-sm-6">
  163. <div class="form-group prepend-icon">
  164. <label for="inputPhone" class="field-icon">
  165. <i class="fas fa-phone"></i>
  166. </label>
  167. <input type="tel" name="phonenumber" id="inputPhone" class="field form-control" placeholder="{$LANG.orderForm.phoneNumber}" value="{$clientsdetails.phonenumber}">
  168. </div>
  169. </div>
  170. </div>
  171. </div>
  172. <h4>{$LANG.orderForm.billingAddress}</h4>
  173. <div class="TM-card">
  174. <div class="row">
  175. <div class="col-sm-12">
  176. <div class="form-group prepend-icon">
  177. <label for="inputCompanyName" class="field-icon">
  178. <i class="fas fa-building"></i>
  179. </label>
  180. <input type="text" name="companyname" id="inputCompanyName" class="field form-control" placeholder="{$LANG.orderForm.companyName} ({$LANG.orderForm.optional})" value="{$clientsdetails.companyname}">
  181. </div>
  182. </div>
  183. <div class="col-sm-12">
  184. <div class="form-group prepend-icon">
  185. <label for="inputAddress1" class="field-icon">
  186. <i class="fas fa-building"></i>
  187. </label>
  188. <input type="text" name="address1" id="inputAddress1" class="field form-control" placeholder="{$LANG.orderForm.streetAddress}" value="{$clientsdetails.address1}">
  189. </div>
  190. </div>
  191. <div class="col-sm-12">
  192. <div class="form-group prepend-icon">
  193. <label for="inputAddress2" class="field-icon">
  194. <i class="fas fa-map-marker-alt"></i>
  195. </label>
  196. <input type="text" name="address2" id="inputAddress2" class="field form-control" placeholder="{$LANG.orderForm.streetAddress2}" value="{$clientsdetails.address2}">
  197. </div>
  198. </div>
  199. <div class="col-sm-4">
  200. <div class="form-group prepend-icon">
  201. <label for="inputCity" class="field-icon">
  202. <i class="fas fa-building"></i>
  203. </label>
  204. <input type="text" name="city" id="inputCity" class="field form-control" placeholder="{$LANG.orderForm.city}" value="{$clientsdetails.city}">
  205. </div>
  206. </div>
  207. <div class="col-sm-5">
  208. <div class="form-group prepend-icon">
  209. <label for="state" class="field-icon" id="inputStateIcon">
  210. <i class="fas fa-map-signs"></i>
  211. </label>
  212. <label for="stateinput" class="field-icon" id="inputStateIcon">
  213. <i class="fas fa-map-signs"></i>
  214. </label>
  215. <input type="text" name="state" id="inputState" class="field form-control" placeholder="{$LANG.orderForm.state}" value="{$clientsdetails.state}">
  216. </div>
  217. </div>
  218. <div class="col-sm-3">
  219. <div class="form-group prepend-icon">
  220. <label for="inputPostcode" class="field-icon">
  221. <i class="fas fa-certificate"></i>
  222. </label>
  223. <input type="text" name="postcode" id="inputPostcode" class="field form-control" placeholder="{$LANG.orderForm.postcode}" value="{$clientsdetails.postcode}">
  224. </div>
  225. </div>
  226. <div class="col-sm-12">
  227. <div class="form-group prepend-icon">
  228. <label for="inputCountry" class="field-icon" id="inputCountryIcon">
  229. <i class="fas fa-globe"></i>
  230. </label>
  231. <select name="country" id="inputCountry" class="field form-control">
  232. {foreach $countries as $countrycode => $countrylabel}
  233. <option value="{$countrycode}"{if (!$country && $countrycode == $defaultcountry) || $countrycode eq $country} selected{/if}>
  234. {$countrylabel}
  235. </option>
  236. {/foreach}
  237. </select>
  238. </div>
  239. </div>
  240. {if $showTaxIdField}
  241. <div class="col-sm-12">
  242. <div class="form-group prepend-icon">
  243. <label for="inputTaxId" class="field-icon">
  244. <i class="fas fa-building"></i>
  245. </label>
  246. <input type="text" name="tax_id" id="inputTaxId" class="field form-control" placeholder="{$taxLabel} ({$LANG.orderForm.optional})" value="{$clientsdetails.tax_id}">
  247. </div>
  248. </div>
  249. {/if}
  250. </div>
  251. </div>
  252. {if $customfields}
  253. <h4>{$LANG.orderadditionalrequiredinfo} <i><small class="text-muted">{lang key='orderForm.requiredField'}</small></i></h4>
  254. <div class="TM-card">
  255. <div class="row">
  256. {foreach from=$customfields key=num item=customfield}
  257. <div class="col-sm-12">
  258. <div class="form-group">
  259. {if $customfield.type eq 'tickbox'}
  260. <label class=checkbox-inline" for="customfield{$customfield.id}">
  261. {$customfield.input}
  262. {$customfield.name} {$customfield.required}
  263. </lable>
  264. {if $customfield.description}<span class="field-help-text">{$customfield.description}</span>{/if}
  265. {else}
  266. <label for="customfield{$customfield.id}">{$customfield.name} {$customfield.required}</label>
  267. {if $customfield.type eq "link"}
  268. <div class="input-group-prepend">
  269. <span class="input-group-text" id="customfield{$customfield.id}"><i class="fas fa-link"></i></span>
  270. {$customfield.input}
  271. </div>
  272. {else}
  273. {$customfield.input}
  274. {/if}
  275. {if $customfield.description}<span class="field-help-text">{$customfield.description}</span>{/if}
  276. {/if}
  277. </div>
  278. </div>
  279. {/foreach}
  280. </div>
  281. </div>
  282. {/if}
  283. </div>
  284. {if $domainsinorder}
  285. <h4>{$LANG.domainregistrantinfo}</h4>
  286. <div class="TM-card">
  287. <p class="small text-muted">{$LANG.orderForm.domainAlternativeContact}</p>
  288. <div class="row margin-bottom">
  289. <div class="col-sm-12">
  290. <select name="contact" id="inputDomainContact" class="field form-control">
  291. <option value="">{$LANG.usedefaultcontact}</option>
  292. {foreach $domaincontacts as $domcontact}
  293. <option value="{$domcontact.id}"{if $contact == $domcontact.id} selected{/if}>
  294. {$domcontact.name}
  295. </option>
  296. {/foreach}
  297. <option value="addingnew"{if $contact == "addingnew"} selected{/if}>
  298. {$LANG.clientareanavaddcontact}...
  299. </option>
  300. </select>
  301. </div>
  302. </div>
  303. </div>
  304. <div class="TM-card{if $contact neq "addingnew"} w-hidden{/if}">
  305. <div class="row" id="domainRegistrantInputFields">
  306. <div class="col-sm-6">
  307. <div class="form-group prepend-icon">
  308. <label for="inputDCFirstName" class="field-icon">
  309. <i class="fas fa-user"></i>
  310. </label>
  311. <input type="text" name="domaincontactfirstname" id="inputDCFirstName" class="field form-control" placeholder="{$LANG.orderForm.firstName}" value="{$domaincontact.firstname}">
  312. </div>
  313. </div>
  314. <div class="col-sm-6">
  315. <div class="form-group prepend-icon">
  316. <label for="inputDCLastName" class="field-icon">
  317. <i class="fas fa-user"></i>
  318. </label>
  319. <input type="text" name="domaincontactlastname" id="inputDCLastName" class="field form-control" placeholder="{$LANG.orderForm.lastName}" value="{$domaincontact.lastname}">
  320. </div>
  321. </div>
  322. <div class="col-sm-6">
  323. <div class="form-group prepend-icon">
  324. <label for="inputDCEmail" class="field-icon">
  325. <i class="fas fa-envelope"></i>
  326. </label>
  327. <input type="email" name="domaincontactemail" id="inputDCEmail" class="field form-control" placeholder="{$LANG.orderForm.emailAddress}" value="{$domaincontact.email}">
  328. </div>
  329. </div>
  330. <div class="col-sm-6">
  331. <div class="form-group prepend-icon">
  332. <label for="inputDCPhone" class="field-icon">
  333. <i class="fas fa-phone"></i>
  334. </label>
  335. <input type="tel" name="domaincontactphonenumber" id="inputDCPhone" class="field form-control" placeholder="{$LANG.orderForm.phoneNumber}" value="{$domaincontact.phonenumber}">
  336. </div>
  337. </div>
  338. <div class="col-sm-12">
  339. <div class="form-group prepend-icon">
  340. <label for="inputDCCompanyName" class="field-icon">
  341. <i class="fas fa-building"></i>
  342. </label>
  343. <input type="text" name="domaincontactcompanyname" id="inputDCCompanyName" class="field form-control" placeholder="{$LANG.orderForm.companyName} ({$LANG.orderForm.optional})" value="{$domaincontact.companyname}">
  344. </div>
  345. </div>
  346. <div class="col-sm-12">
  347. <div class="form-group prepend-icon">
  348. <label for="inputDCAddress1" class="field-icon">
  349. <i class="fas fa-building"></i>
  350. </label>
  351. <input type="text" name="domaincontactaddress1" id="inputDCAddress1" class="field form-control" placeholder="{$LANG.orderForm.streetAddress}" value="{$domaincontact.address1}">
  352. </div>
  353. </div>
  354. <div class="col-sm-12">
  355. <div class="form-group prepend-icon">
  356. <label for="inputDCAddress2" class="field-icon">
  357. <i class="fas fa-map-marker-alt"></i>
  358. </label>
  359. <input type="text" name="domaincontactaddress2" id="inputDCAddress2" class="field form-control" placeholder="{$LANG.orderForm.streetAddress2}" value="{$domaincontact.address2}">
  360. </div>
  361. </div>
  362. <div class="col-sm-4">
  363. <div class="form-group prepend-icon">
  364. <label for="inputDCCity" class="field-icon">
  365. <i class="fas fa-building"></i>
  366. </label>
  367. <input type="text" name="domaincontactcity" id="inputDCCity" class="field form-control" placeholder="{$LANG.orderForm.city}" value="{$domaincontact.city}">
  368. </div>
  369. </div>
  370. <div class="col-sm-5">
  371. <div class="form-group prepend-icon">
  372. <label for="inputDCState" class="field-icon">
  373. <i class="fas fa-map-signs"></i>
  374. </label>
  375. <input type="text" name="domaincontactstate" id="inputDCState" class="field form-control" placeholder="{$LANG.orderForm.state}" value="{$domaincontact.state}">
  376. </div>
  377. </div>
  378. <div class="col-sm-3">
  379. <div class="form-group prepend-icon">
  380. <label for="inputDCPostcode" class="field-icon">
  381. <i class="fas fa-certificate"></i>
  382. </label>
  383. <input type="text" name="domaincontactpostcode" id="inputDCPostcode" class="field form-control" placeholder="{$LANG.orderForm.postcode}" value="{$domaincontact.postcode}">
  384. </div>
  385. </div>
  386. <div class="col-sm-12">
  387. <div class="form-group prepend-icon">
  388. <label for="inputDCCountry" class="field-icon" id="inputCountryIcon">
  389. <i class="fas fa-globe"></i>
  390. </label>
  391. <select name="domaincontactcountry" id="inputDCCountry" class="field form-control">
  392. {foreach $countries as $countrycode => $countrylabel}
  393. <option value="{$countrycode}"{if (!$domaincontact.country && $countrycode == $defaultcountry) || $countrycode eq $domaincontact.country} selected{/if}>
  394. {$countrylabel}
  395. </option>
  396. {/foreach}
  397. </select>
  398. </div>
  399. </div>
  400. <div class="col-sm-12">
  401. <div class="form-group prepend-icon">
  402. <label for="inputDCTaxId" class="field-icon">
  403. <i class="fas fa-building"></i>
  404. </label>
  405. <input type="text" name="domaincontacttax_id" id="inputDCTaxId" class="field form-control" placeholder="{$taxLabel} ({$LANG.orderForm.optional})" value="{$domaincontact.tax_id}">
  406. </div>
  407. </div>
  408. </div>
  409. </div>
  410. {/if}
  411. {if !$loggedin}
  412. <div id="containerNewUserSecurity"{if (!$loggedin && $custtype eq "existing") || ($remote_auth_prelinked && !$securityquestions) } class="w-hidden"{/if}>
  413. <h4>{$LANG.orderForm.accountSecurity}</h4>
  414. <div class="TM-card">
  415. <div id="containerPassword" class="row{if $remote_auth_prelinked && $securityquestions} w-hidden{/if}">
  416. <div id="passwdFeedback" style="display: none;" class="alert alert-info text-center col-sm-12"></div>
  417. <div class="col-sm-6">
  418. <div class="form-group prepend-icon">
  419. <label for="inputNewPassword1" class="field-icon">
  420. <i class="fas fa-lock"></i>
  421. </label>
  422. <input type="password" name="password" id="inputNewPassword1" data-error-threshold="{$pwStrengthErrorThreshold}" data-warning-threshold="{$pwStrengthWarningThreshold}" class="field form-control" placeholder="{$LANG.clientareapassword}"{if $remote_auth_prelinked} value="{$password}"{/if}>
  423. </div>
  424. </div>
  425. <div class="col-sm-6">
  426. <div class="form-group prepend-icon">
  427. <label for="inputNewPassword2" class="field-icon">
  428. <i class="fas fa-lock"></i>
  429. </label>
  430. <input type="password" name="password2" id="inputNewPassword2" class="field form-control" placeholder="{$LANG.clientareaconfirmpassword}"{if $remote_auth_prelinked} value="{$password}"{/if}>
  431. </div>
  432. </div>
  433. <div class="col-sm-6">
  434. <button type="button" class="btn btn-default btn-sm generate-password" data-targetfields="inputNewPassword1,inputNewPassword2">
  435. {$LANG.generatePassword.btnLabel}
  436. </button>
  437. </div>
  438. <div class="col-sm-6">
  439. <div class="password-strength-meter">
  440. <div class="progress">
  441. <div class="progress-bar progress-bar-success progress-bar-striped" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" id="passwordStrengthMeterBar"></div>
  442. </div>
  443. <p class="text-center small text-muted" id="passwordStrengthTextLabel">{$LANG.pwstrength}: {$LANG.pwstrengthenter}</p>
  444. </div>
  445. </div>
  446. </div>
  447. </div>
  448. {if $securityquestions}
  449. <div class="TM-card">
  450. <div class="row">
  451. <div class="col-sm-12">
  452. <div class="form-group">
  453. <select name="securityqid" id="inputSecurityQId" class="field form-control">
  454. <option value="">{$LANG.clientareasecurityquestion}</option>
  455. {foreach $securityquestions as $question}
  456. <option value="{$question.id}"{if $question.id eq $securityqid} selected{/if}>
  457. {$question.question}
  458. </option>
  459. {/foreach}
  460. </select>
  461. </div>
  462. </div>
  463. <div class="col-sm-12">
  464. <div class="form-group prepend-icon">
  465. <label for="inputSecurityQAns" class="field-icon">
  466. <i class="fas fa-lock"></i>
  467. </label>
  468. <input type="password" name="securityqans" id="inputSecurityQAns" class="field form-control" placeholder="{$LANG.clientareasecurityanswer}">
  469. </div>
  470. </div>
  471. </div>
  472. </div>
  473. {/if}
  474. </div>
  475. {/if}
  476. {foreach $hookOutput as $output}
  477. <div style="margin:60px 0;">
  478. {$output}
  479. </div>
  480. {/foreach}
  481. <h4>{$LANG.orderForm.paymentDetails}</h4>
  482. <p class="small text-muted margin-bottom">{$LANG.orderForm.preferredPaymentMethod}</p>
  483. <div id="applyCreditContainer" class="apply-credit-container{if !$canUseCreditOnCheckout} w-hidden{/if}" data-apply-credit="{$applyCredit}">
  484. <div class="p-3 border rounded mb-3">
  485. <p class="fw-500 text-muted mb-1 small">{lang key='availcreditbal'}:</p>
  486. <span class="h2 fw-500 mt-0">{$creditBalance}</span>
  487. </div>
  488. <label class="radio">
  489. <input id="useCreditOnCheckout" type="radio" name="applycredit" value="1"{if $applyCredit} checked{/if}>
  490. <span id="spanFullCredit"{if !($creditBalance->toNumeric() >= $total->toNumeric())} class="w-hidden"{/if}>
  491. {lang key='cart.applyCreditAmountNoFurtherPayment' amount=$total}
  492. </span>
  493. <span id="spanUseCredit"{if $creditBalance->toNumeric() >= $total->toNumeric()} class="w-hidden"{/if}>
  494. {lang key='cart.applyCreditAmount' amount=$creditBalance}
  495. </span>
  496. </label>
  497. <label class="radio">
  498. <input id="skipCreditOnCheckout" type="radio" name="applycredit" value="0"{if !$applyCredit} checked{/if}>
  499. {lang key='cart.applyCreditSkip' amount=$creditBalance}
  500. </label>
  501. </div>
  502. {if !$inExpressCheckout}
  503. <div id="paymentGatewaysContainer" class="form-group">
  504. <div class="TM-card" id="cros-payment-gateway">
  505. {foreach $gateways as $gateway}
  506. <label class="radio-inline{if $selectedgateway eq $gateway.sysname} is-selected{/if}" id="lbl-{$gateway.sysname}" onclick="getApply('{$gateway.sysname}')">
  507. <span>
  508. <input type="radio" onclick="getApply(this.value)"
  509. name="paymentmethod"
  510. value="{$gateway.sysname}"
  511. data-payment-type="{$gateway.payment_type}"
  512. data-show-local="{$gateway.show_local_cards}"
  513. data-remote-inputs="{$gateway.uses_remote_inputs}"
  514. class="payment-methods{if $gateway.type eq "CC"} is-credit-card{/if}"
  515. {if $selectedgateway eq $gateway.sysname} checked{/if}
  516. />
  517. <span class="check-label">{$gateway.name}</span>
  518. </span>
  519. {assign var=gatewayIcon value=$gateway.sysname|lower|replace:" ":"-"}
  520. {if file_exists("templates/orderforms/{$carttpl}/img/gateways/{$gatewayIcon}.png")}
  521. <span class="check-icon">
  522. {if file_exists("templates/orderforms/{$carttpl}/img/gateways/overrides/{$gatewayIcon}.png")}
  523. <img src="templates/orderforms/{$carttpl}/img/gateways/overrides/{$gatewayIcon}.png" alt="{$gateway.name}" />
  524. {else}
  525. <img src="templates/orderforms/{$carttpl}/img/gateways/{$gatewayIcon}.png" alt="{$gateway.name}" />
  526. {/if}
  527. </span>
  528. {/if}
  529. </label>
  530. {/foreach}
  531. </div>
  532. </div>
  533. <div class="alert alert-danger text-center gateway-errors w-hidden"></div>
  534. <div class="clearfix"></div>
  535. <div class="cc-input-container{if $selectedgatewaytype neq "CC"} w-hidden{/if}" id="creditCardInputFields">
  536. {if $client}
  537. <div id="existingCardsContainer" class="existing-cc-grid">
  538. {include file="orderforms/{$carttpl}/includes/existing-paymethods.tpl"}
  539. </div>
  540. {/if}
  541. <div class="row cvv-input" id="existingCardInfo">
  542. <div class="col-lg-3 col-sm-4">
  543. <div class="form-group prepend-icon">
  544. <label for="inputCardCVV2" class="field-icon">
  545. <i class="fas fa-barcode"></i>
  546. </label>
  547. <div class="input-group">
  548. <input type="tel" name="cccvv" id="inputCardCVV2" class="field form-control" placeholder="{$LANG.creditcardcvvnumbershort}" autocomplete="cc-cvc">
  549. <span class="input-group-btn input-group-append">
  550. <button type="button" class="btn btn-default" data-toggle="popover" data-placement="bottom" data-content="<img src='{$BASE_PATH_IMG}/ccv.gif' width='210' />">
  551. ?
  552. </button>
  553. </span>
  554. </div>
  555. <span class="field-error-msg">{lang key="paymentMethodsManage.cvcNumberNotValid"}</span>
  556. </div>
  557. </div>
  558. </div>
  559. <ul>
  560. <li>
  561. <label class="radio-inline py-2 px-3 border rounded w-100">
  562. <input type="radio" name="ccinfo" value="new" id="new" {if !$client || $client->payMethods->count() === 0} checked="checked"{/if} />
  563. &nbsp;{lang key='creditcardenternewcard'}
  564. </label>
  565. </li>
  566. </ul>
  567. <div class="row" id="newCardInfo">
  568. <div id="cardNumberContainer" class="col-sm-6 new-card-container">
  569. <div class="form-group prepend-icon">
  570. <label for="inputCardNumber" class="field-icon">
  571. <i class="fas fa-credit-card"></i>
  572. </label>
  573. <input type="tel" name="ccnumber" id="inputCardNumber" class="form-control field cc-number-field" placeholder="{$LANG.orderForm.cardNumber}" autocomplete="cc-number" data-message-unsupported="{lang key='paymentMethodsManage.unsupportedCardType'}" data-message-invalid="{lang key='paymentMethodsManage.cardNumberNotValid'}" data-supported-cards="{$supportedCardTypes}" />
  574. <span class="field-error-msg"></span>
  575. </div>
  576. </div>
  577. <div class="col-sm-3 new-card-container">
  578. <div class="form-group prepend-icon">
  579. <label for="inputCardExpiry" class="field-icon">
  580. <i class="fas fa-calendar-alt"></i>
  581. </label>
  582. <input type="tel" name="ccexpirydate" id="inputCardExpiry" class="field form-control" placeholder="MM / YY{if $showccissuestart} ({$LANG.creditcardcardexpires}){/if}" autocomplete="cc-exp">
  583. <span class="field-error-msg">{lang key="paymentMethodsManage.expiryDateNotValid"}</span>
  584. </div>
  585. </div>
  586. <div class="col-sm-3" id="cvv-field-container">
  587. <div class="form-group prepend-icon">
  588. <label for="inputCardCVV" class="field-icon">
  589. <i class="fas fa-barcode"></i>
  590. </label>
  591. <div class="input-group">
  592. <input type="tel" name="cccvv" id="inputCardCVV" class="field form-control" placeholder="{$LANG.creditcardcvvnumbershort}" autocomplete="cc-cvc">
  593. <span class="input-group-btn input-group-append">
  594. <button type="button" class="btn btn-default" data-toggle="popover" data-placement="bottom" data-content="<img src='{$BASE_PATH_IMG}/ccv.gif' width='210' />">
  595. ?
  596. </button>
  597. </span><br>
  598. </div>
  599. <span class="field-error-msg">{lang key="paymentMethodsManage.cvcNumberNotValid"}</span>
  600. </div>
  601. </div>
  602. {if $showccissuestart}
  603. <div class="col-sm-3 col-sm-offset-6 new-card-container">
  604. <div class="form-group prepend-icon">
  605. <label for="inputCardStart" class="field-icon">
  606. <i class="far fa-calendar-check"></i>
  607. </label>
  608. <input type="tel" name="ccstartdate" id="inputCardStart" class="field form-control" placeholder="MM / YY ({$LANG.creditcardcardstart})" autocomplete="cc-exp">
  609. </div>
  610. </div>
  611. <div class="col-sm-3 new-card-container">
  612. <div class="form-group prepend-icon">
  613. <label for="inputCardIssue" class="field-icon">
  614. <i class="fas fa-asterisk"></i>
  615. </label>
  616. <input type="tel" name="ccissuenum" id="inputCardIssue" class="field form-control" placeholder="{$LANG.creditcardcardissuenum}">
  617. </div>
  618. </div>
  619. {/if}
  620. </div>
  621. <div id="newCardSaveSettings">
  622. <div class="row form-group new-card-container">
  623. <div id="inputDescriptionContainer" class="col-md-6">
  624. <div class="prepend-icon">
  625. <label for="inputDescription" class="field-icon">
  626. <i class="fas fa-pencil"></i>
  627. </label>
  628. <input type="text" class="field form-control" id="inputDescription" name="ccdescription" autocomplete="off" value="" placeholder="{$LANG.paymentMethods.descriptionInput} {$LANG.paymentMethodsManage.optional}" />
  629. </div>
  630. </div>
  631. {if $allowClientsToRemoveCards}
  632. <div id="inputNoStoreContainer" class="col-md-6" style="line-height: 32px;">
  633. <input type="hidden" name="nostore" value="1">
  634. <input type="checkbox" class="toggle-switch-success no-icheck" data-size="mini" checked="checked" name="nostore" id="inputNoStore" value="0" data-on-text="{lang key='yes'}" data-off-text="{lang key='no'}">
  635. <label for="inputNoStore" class="checkbox-inline no-padding">
  636. &nbsp;&nbsp;
  637. {$LANG.creditCardStore}
  638. </label>
  639. </div>
  640. {/if}
  641. </div>
  642. </div>
  643. </div>
  644. {else}
  645. {if $expressCheckoutOutput}
  646. {$expressCheckoutOutput}
  647. {else}
  648. <p align="center">
  649. {lang key='paymentPreApproved' gateway=$expressCheckoutGateway}
  650. </p>
  651. {/if}
  652. {/if}
  653. {if $shownotesfield}
  654. <h4>{$LANG.orderForm.additionalNotes}</h4>
  655. <div class="TM-card">
  656. <div class="row">
  657. <div class="col-sm-12">
  658. <div class="form-group">
  659. <textarea name="notes" class="field form-control" rows="4" placeholder="{$LANG.ordernotesdescription}">{$orderNotes}</textarea>
  660. </div>
  661. </div>
  662. </div>
  663. </div>
  664. {/if}
  665. {if $showMarketingEmailOptIn}
  666. <h4>{lang key='emailMarketing.joinOurMailingList'}</h4>
  667. <div class="TM-card">
  668. <p>{$marketingEmailOptInMessage}</p>
  669. <div class="panel panel-switch {if $marketingEmailOptIn} checked{/if}">
  670. <div class="panel-body">
  671. <span class="switch-label">{lang key='emailMarketing.joinOurMailingList'}:</span>
  672. <label class="switch switch--text">
  673. <input class="no-icheck switch__checkbox" type="checkbox" name="marketingoptin" value="1"{if $marketingEmailOptIn} checked{/if}>
  674. <span class="switch__container"><span class="switch__handle"></span></span>
  675. </label>
  676. </div>
  677. </div>
  678. </div>
  679. {/if}
  680. <div class="text-center">
  681. {if $accepttos}
  682. <p>
  683. <label class="checkbox-inline">
  684. <input type="checkbox" name="accepttos" id="accepttos" />
  685. &nbsp; {$LANG.ordertosagreement} <a href="{$tosurl}" target="_blank">{$LANG.ordertos}</a>
  686. </label>
  687. </p>
  688. {/if}
  689. {if $captcha}
  690. <div class="text-center margin-bottom">
  691. {include file="$template/includes/captcha.tpl"}
  692. </div>
  693. {/if}
  694. <button type="submit"
  695. id="btnCompleteOrder"
  696. class="margin-bottom btn btn-primary btn-lg disable-on-click spinner-on-click{if $captcha}{$captcha->getButtonClass($captchaForm)}{/if}"
  697. {if $cartitems==0}disabled="disabled"{/if}
  698. >
  699. {if $inExpressCheckout}{$LANG.confirmAndPay}{else}{$LANG.completeorder}{/if}
  700. &nbsp;<i class="fas fa-arrow-circle-right"></i>
  701. </button>
  702. </div>
  703. </form>
  704. </div>
  705. </div>
  706. <script type="text/javascript" src="{$BASE_PATH_JS}/jquery.payment.js"></script>
  707. <script>
  708. var hideCvcOnCheckoutForExistingCard = '{if $canUseCreditOnCheckout && $applyCredit && ($creditBalance->toNumeric() >= $total->toNumeric())}1{else}0{/if}';
  709. jQuery(document).ready(function() {
  710. jQuery('.existing-card').change('ifChecked', function (event) {
  711. $(this).closest(".card-item").toggleClass('selected', this.checked);
  712. });
  713. });
  714. </script>
  715. {include file="orderforms/$carttpl/recommendations-modal.tpl"}