spc.tpl 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907
  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. <script type="text/javascript" src="{$WEB_ROOT}/templates/orderforms/{$carttpl}/js/intlTelInput.min.js"></script>
  8. <script type="text/javascript" src="{$WEB_ROOT}/templates/orderforms/{$carttpl}/js/scripts.min.js?v={$versionHash}"></script>
  9. <script type="text/javascript" src="{$BASE_PATH_JS}/StatesDropdown.js"></script>
  10. <script type="text/javascript" src="{$BASE_PATH_JS}/PasswordStrength.js"></script>
  11. <script>
  12. window.langPasswordStrength = "{$LANG.pwstrength}";
  13. window.langPasswordWeak = "{$LANG.pwstrengthweak}";
  14. window.langPasswordModerate = "{$LANG.pwstrengthmoderate}";
  15. window.langPasswordStrong = "{$LANG.pwstrengthstrong}";
  16. </script>
  17. {if $errormessage}
  18. <div class="alert alert-danger checkout-error-feedback" role="alert">
  19. <p>{$LANG.orderForm.correctErrors}:</p>
  20. <ul>
  21. {$errormessage}
  22. </ul>
  23. </div>
  24. <div class="clearfix"></div>
  25. {/if}
  26. <form method="post" name="orderfrm" id="frmCheckout">
  27. <input type="hidden" name="submit" value="true" />
  28. <input type="hidden" id="loggedin" value="{$loggedin}" />
  29. <input type="hidden" name="custtype" id="inputCustType" value="{$custtype}" />
  30. <div id="customer_error">
  31. <div class="customer_error" style="display: none;"></div>
  32. </div>
  33. <div class="TM-card blocks customerinfo">
  34. <div class="blocks_heading">
  35. <h2>{$LANG.billingdetails}</h2>
  36. </div>
  37. <div class="blocks_body" id="customer_info">
  38. {if $custtype neq "new" && $loggedin}
  39. <div class="sub-heading">
  40. <span>
  41. {lang key='switchAccount.title'}
  42. </span>
  43. </div>
  44. <div id="containerExistingAccountSelect" class="row account-select-container">
  45. {foreach $accounts as $account}
  46. <div class="col-sm-{if $accounts->count() == 1}12{else}6{/if}">
  47. <div class="account{if $selectedAccountId == $account->id} active{/if}">
  48. <label class="radio-inline" for="account{$account->id}">
  49. <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}>
  50. <span class="address">
  51. <strong>
  52. {if $account->companyname}{$account->companyname}{else}{$account->fullName}{/if}
  53. </strong>
  54. {if $account->isClosed || $account->noPermission}
  55. <span class="label label-default">
  56. {if $account->isClosed}
  57. {lang key='closed'}
  58. {else}
  59. {lang key='noPermission'}
  60. {/if}
  61. </span>
  62. {elseif $account->currencyCode}
  63. <span class="label label-info">
  64. {$account->currencyCode}
  65. </span>
  66. {/if}
  67. <br>
  68. <span class="small">
  69. {$account->address1}{if $account->address2}, {$account->address2}{/if}<br>
  70. {if $account->city}{$account->city},{/if}
  71. {if $account->state} {$account->state},{/if}
  72. {if $account->postcode} {$account->postcode},{/if}
  73. {$account->countryName}
  74. </span>
  75. </span>
  76. </label>
  77. </div>
  78. </div>
  79. {/foreach}
  80. <div class="col-sm-12">
  81. <div class="account border-bottom{if !$selectedAccountId || !is_numeric($selectedAccountId)} active{/if}">
  82. <label class="radio-inline">
  83. <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}>
  84. {lang key='orderForm.createAccount'}
  85. </label>
  86. </div>
  87. </div>
  88. </div>
  89. {/if}
  90. {if !$loggedin}
  91. <div class="user_option">
  92. <ul>
  93. <li>
  94. <label for="newcust">
  95. <input type="radio" class="no-icheck signups" value="new" name="custtype" {if !$loggedin && $custtype neq "existing"}checked="checked"{/if} id="newcust" onclick="togglesignupform(this);"/>
  96. <span class="sign-btn">{$LANG.orderForm.createAccount}</span>
  97. </label>
  98. </li>
  99. <li>
  100. <label for="existingcust">
  101. <input type="radio" class="no-icheck signups" value="existing" name="custtype" {if $custtype eq "existing" && !$loggedin || $loggedin}checked="checked"{/if} id="existingcust" onclick="togglesignupform(this);"/>
  102. <span class="sign-btn">{$LANG.orderForm.alreadyRegistered}</span>
  103. </label>
  104. </li>
  105. </ul>
  106. </div>
  107. {/if}
  108. <div class="signupfields signupfields-existing{if $custtype eq "existing" && !$loggedin}{else} w-hidden{/if}" id="loginfrm">
  109. <h5>{$LANG.orderForm.existingCustomerLogin}</h5>
  110. <div class="row">
  111. <div class="col-md-5">
  112. <div class="form-group prepend-icon">
  113. <label for="inputLoginEmail" class="field-icon">
  114. <i class="fas fa-envelope"></i>
  115. </label>
  116. <input type="text" name="loginemail" id="inputLoginEmail" class="field form-control" placeholder="{$LANG.orderForm.emailAddress}" value="{$loginemail}">
  117. </div>
  118. </div>
  119. <div class="col-md-5">
  120. <div class="form-group prepend-icon">
  121. <label for="inputLoginPassword" class="field-icon">
  122. <i class="fas fa-lock"></i>
  123. </label>
  124. <input type="password" name="loginpassword" id="inputLoginPassword" class="field form-control" placeholder="{$LANG.clientareapassword}">
  125. </div>
  126. </div>
  127. <div class="col-md-2">
  128. <button type="button" id="btnExistingLogin" class="btn btn-primary btn-md btn-block">
  129. <span id="existingLoginButton">{lang key='login'}</span>
  130. <span id="existingLoginPleaseWait" class="w-hidden"><i class="fad fa-circle-notch fa-spin"></i></span>
  131. </button>
  132. </div>
  133. </div>
  134. {include file="orderforms/{$carttpl}/linkedaccounts.tpl" linkContext="checkout-existing"}
  135. </div>
  136. {if $loggedin}
  137. <div id="containerNewUserSignup" class="signupfields{if $custtype === 'existing' || (is_numeric($selectedAccountId) && $selectedAccountId > 0) || ($loggedin && $accounts->count() > 0 && $selectedAccountId !== 'new')} w-hidden{/if}">
  138. {else}
  139. <div class="signupfields{if $custtype eq "existing" && !$loggedin} w-hidden{/if}" id="signupfrm">
  140. {/if}
  141. <div{if $loggedin} class="w-hidden"{/if}>
  142. {include file="orderforms/{$carttpl}/linkedaccounts.tpl" linkContext="checkout-new"}
  143. </div>
  144. <h5>{$LANG.orderForm.personalInformation}</h5>
  145. <div class="row">
  146. <div class="col-sm-6">
  147. <div class="form-group prepend-icon">
  148. <label for="inputFirstName" class="field-icon">
  149. <i class="fas fa-user"></i>
  150. </label>
  151. <input type="text" name="firstname" id="inputFirstName" class="field form-control" placeholder="{$LANG.orderForm.firstName}" value="{$clientsdetails.firstname}">
  152. </div>
  153. </div>
  154. <div class="col-sm-6">
  155. <div class="form-group prepend-icon">
  156. <label for="inputLastName" class="field-icon">
  157. <i class="fas fa-user"></i>
  158. </label>
  159. <input type="text" name="lastname" id="inputLastName" class="field form-control" placeholder="{$LANG.orderForm.lastName}" value="{$clientsdetails.lastname}">
  160. </div>
  161. </div>
  162. <div class="col-sm-6">
  163. <div class="form-group prepend-icon">
  164. <label for="inputEmail" class="field-icon">
  165. <i class="fas fa-envelope"></i>
  166. </label>
  167. <input type="email" name="email" id="inputEmail" class="field form-control" placeholder="{$LANG.orderForm.emailAddress}" value="{$clientsdetails.email}">
  168. </div>
  169. </div>
  170. <div class="col-sm-6">
  171. <div class="form-group prepend-icon">
  172. <label for="inputPhone" class="field-icon">
  173. <i class="fas fa-phone"></i>
  174. </label>
  175. <input type="tel" name="phonenumber" id="inputPhone" class="field form-control" placeholder="{$LANG.orderForm.phoneNumber}" value="{$clientsdetails.phonenumber}">
  176. </div>
  177. </div>
  178. </div>
  179. <h5>{$LANG.orderForm.billingAddress}</h5>
  180. <div class="row">
  181. <div class="col-sm-12">
  182. <div class="form-group prepend-icon">
  183. <label for="inputCompanyName" class="field-icon">
  184. <i class="fas fa-building"></i>
  185. </label>
  186. <input type="text" name="companyname" id="inputCompanyName" class="field form-control" placeholder="{$LANG.orderForm.companyName} ({$LANG.orderForm.optional})" value="{$clientsdetails.companyname}">
  187. </div>
  188. </div>
  189. <div class="col-sm-12">
  190. <div class="form-group prepend-icon">
  191. <label for="inputAddress1" class="field-icon">
  192. <i class="far fa-building"></i>
  193. </label>
  194. <input type="text" name="address1" id="inputAddress1" class="field form-control" placeholder="{$LANG.orderForm.streetAddress}" value="{$clientsdetails.address1}">
  195. </div>
  196. </div>
  197. <div class="col-sm-12">
  198. <div class="form-group prepend-icon">
  199. <label for="inputAddress2" class="field-icon">
  200. <i class="fas fa-map-marker-alt"></i>
  201. </label>
  202. <input type="text" name="address2" id="inputAddress2" class="field form-control" placeholder="{$LANG.orderForm.streetAddress2}" value="{$clientsdetails.address2}">
  203. </div>
  204. </div>
  205. <div class="col-sm-4">
  206. <div class="form-group prepend-icon">
  207. <label for="inputCity" class="field-icon">
  208. <i class="far fa-building"></i>
  209. </label>
  210. <input type="text" name="city" id="inputCity" class="field form-control" placeholder="{$LANG.orderForm.city}" value="{$clientsdetails.city}">
  211. </div>
  212. </div>
  213. <div class="col-sm-5">
  214. <div class="form-group prepend-icon">
  215. <label for="state" class="field-icon" id="inputStateIcon">
  216. <i class="fas fa-map-signs"></i>
  217. </label>
  218. <label for="stateinput" class="field-icon" id="inputStateIcon">
  219. <i class="fas fa-map-signs"></i>
  220. </label>
  221. <input type="text" name="state" id="inputState" class="field form-control" placeholder="{$LANG.orderForm.state}" value="{$clientsdetails.state}">
  222. </div>
  223. </div>
  224. <div class="col-sm-3">
  225. <div class="form-group prepend-icon">
  226. <label for="inputPostcode" class="field-icon">
  227. <i class="fas fa-certificate"></i>
  228. </label>
  229. <input type="text" name="postcode" id="inputPostcode" class="field form-control" placeholder="{$LANG.orderForm.postcode}" value="{$clientsdetails.postcode}">
  230. </div>
  231. </div>
  232. <div class="col-sm-12">
  233. <div class="form-group prepend-icon">
  234. <label for="inputCountry" class="field-icon" id="inputCountryIcon">
  235. <i class="fas fa-globe"></i>
  236. </label>
  237. <select name="country" id="inputCountry" class="field form-control">
  238. {foreach $countries as $countrycode => $countrylabel}
  239. <option value="{$countrycode}"{if (!$country && $countrycode == $defaultcountry) || $countrycode eq $country} selected{/if}>
  240. {$countrylabel}
  241. </option>
  242. {/foreach}
  243. </select>
  244. </div>
  245. </div>
  246. {if $showTaxIdField}
  247. <div class="col-12">
  248. <div class="form-group prepend-icon">
  249. <label for="inputTaxId" class="field-icon">
  250. <i class="fas fa-building"></i>
  251. </label>
  252. <input type="text" name="tax_id" id="inputTaxId" class="field form-control" placeholder="{$taxLabel} ({$LANG.orderForm.optional})" value="{$clientsdetails.tax_id}">
  253. </div>
  254. </div>
  255. {/if}
  256. </div>
  257. {if $customfields}
  258. <h5>{$LANG.orderadditionalrequiredinfo} <i><small class="text-muted">{lang key='orderForm.requiredField'}</small></i></h5>
  259. <div class="row">
  260. {foreach $customfields as $customfield}
  261. <div class="col-12">
  262. <div class="form-group">
  263. {if $customfield.type eq 'tickbox'}
  264. <label class=checkbox-inline" for="customfield{$customfield.id}">
  265. {$customfield.input}
  266. {$customfield.name} {$customfield.required}
  267. </lable>
  268. {if $customfield.description}<span class="field-help-text">{$customfield.description}</span>{/if}
  269. {else}
  270. <label for="customfield{$customfield.id}">{$customfield.name} {$customfield.required}</label>
  271. {if $customfield.type eq "link"}
  272. <div class="input-group-prepend">
  273. <span class="input-group-text" id="customfield{$customfield.id}"><i class="fas fa-link"></i></span>
  274. {$customfield.input}
  275. </div>
  276. {else}
  277. {$customfield.input}
  278. {/if}
  279. {if $customfield.description}<span class="field-help-text">{$customfield.description}</span>{/if}
  280. {/if}
  281. </div>
  282. </div>
  283. {/foreach}
  284. </div>
  285. {/if}
  286. </div>
  287. <div class="domain_config pl-3 pr-3 {if $domainsinorder}{else} w-hidden{/if}">
  288. <h5>{$LANG.domainregistrantinfo}</h5>
  289. <p class="small text-muted">{$LANG.orderForm.domainAlternativeContact}</p>
  290. <div class="row margin-bottom">
  291. <div class="col-sm-6">
  292. <div class="form-group prepend-icon">
  293. <label for="inputDCFirstName" class="field-icon">
  294. <i class="fas fa-user"></i>
  295. </label>
  296. <select name="contact" id="inputDomainContact" class="field form-control">
  297. <option value="">{$LANG.usedefaultcontact}</option>
  298. {foreach $domaincontacts as $domcontact}
  299. <option value="{$domcontact.id}"{if $contact == $domcontact.id} selected{/if}>
  300. {$domcontact.name}
  301. </option>
  302. {/foreach}
  303. <option value="addingnew"{if $contact == "addingnew"} selected{/if}>
  304. {$LANG.clientareanavaddcontact}...
  305. </option>
  306. </select>
  307. </div>
  308. </div>
  309. </div>
  310. <div class="row{if $contact neq "addingnew"} w-hidden{/if}" id="domainRegistrantInputFields">
  311. <div class="col-sm-6">
  312. <div class="form-group prepend-icon">
  313. <label for="inputDCFirstName" class="field-icon">
  314. <i class="fas fa-user"></i>
  315. </label>
  316. <input type="text" name="domaincontactfirstname" id="inputDCFirstName" class="field form-control" placeholder="{$LANG.orderForm.firstName}" value="{$domaincontact.firstname}">
  317. </div>
  318. </div>
  319. <div class="col-sm-6">
  320. <div class="form-group prepend-icon">
  321. <label for="inputDCLastName" class="field-icon">
  322. <i class="fas fa-user"></i>
  323. </label>
  324. <input type="text" name="domaincontactlastname" id="inputDCLastName" class="field form-control" placeholder="{$LANG.orderForm.lastName}" value="{$domaincontact.lastname}">
  325. </div>
  326. </div>
  327. <div class="col-sm-6">
  328. <div class="form-group prepend-icon">
  329. <label for="inputDCEmail" class="field-icon">
  330. <i class="fas fa-envelope"></i>
  331. </label>
  332. <input type="email" name="domaincontactemail" id="inputDCEmail" class="field form-control" placeholder="{$LANG.orderForm.emailAddress}" value="{$domaincontact.email}">
  333. </div>
  334. </div>
  335. <div class="col-sm-6">
  336. <div class="form-group prepend-icon">
  337. <label for="inputDCPhone" class="field-icon">
  338. <i class="fas fa-phone"></i>
  339. </label>
  340. <input type="tel" name="domaincontactphonenumber" id="inputDCPhone" class="field form-control" placeholder="{$LANG.orderForm.phoneNumber}" value="{$domaincontact.phonenumber}">
  341. </div>
  342. </div>
  343. <div class="col-sm-12">
  344. <div class="form-group prepend-icon">
  345. <label for="inputDCCompanyName" class="field-icon">
  346. <i class="fas fa-building"></i>
  347. </label>
  348. <input type="text" name="domaincontactcompanyname" id="inputDCCompanyName" class="field form-control" placeholder="{$LANG.orderForm.companyName} ({$LANG.orderForm.optional})" value="{$domaincontact.companyname}">
  349. </div>
  350. </div>
  351. <div class="col-sm-12">
  352. <div class="form-group prepend-icon">
  353. <label for="inputDCAddress1" class="field-icon">
  354. <i class="far fa-building"></i>
  355. </label>
  356. <input type="text" name="domaincontactaddress1" id="inputDCAddress1" class="field form-control" placeholder="{$LANG.orderForm.streetAddress}" value="{$domaincontact.address1}">
  357. </div>
  358. </div>
  359. <div class="col-sm-12">
  360. <div class="form-group prepend-icon">
  361. <label for="inputDCAddress2" class="field-icon">
  362. <i class="fas fa-map-marker-alt"></i>
  363. </label>
  364. <input type="text" name="domaincontactaddress2" id="inputDCAddress2" class="field form-control" placeholder="{$LANG.orderForm.streetAddress2}" value="{$domaincontact.address2}">
  365. </div>
  366. </div>
  367. <div class="col-sm-4">
  368. <div class="form-group prepend-icon">
  369. <label for="inputDCCity" class="field-icon">
  370. <i class="far fa-building"></i>
  371. </label>
  372. <input type="text" name="domaincontactcity" id="inputDCCity" class="field form-control" placeholder="{$LANG.orderForm.city}" value="{$domaincontact.city}">
  373. </div>
  374. </div>
  375. <div class="col-sm-5">
  376. <div class="form-group prepend-icon">
  377. <label for="inputDCState" class="field-icon">
  378. <i class="fas fa-map-signs"></i>
  379. </label>
  380. <input type="text" name="domaincontactstate" id="inputDCState" class="field form-control" placeholder="{$LANG.orderForm.state}" value="{$domaincontact.state}">
  381. </div>
  382. </div>
  383. <div class="col-sm-3">
  384. <div class="form-group prepend-icon">
  385. <label for="inputDCPostcode" class="field-icon">
  386. <i class="fas fa-certificate"></i>
  387. </label>
  388. <input type="text" name="domaincontactpostcode" id="inputDCPostcode" class="field form-control" placeholder="{$LANG.orderForm.postcode}" value="{$domaincontact.postcode}">
  389. </div>
  390. </div>
  391. <div class="col-sm-12">
  392. <div class="form-group prepend-icon">
  393. <label for="inputDCCountry" class="field-icon" id="inputCountryIcon">
  394. <i class="fas fa-globe"></i>
  395. </label>
  396. <select name="domaincontactcountry" id="inputDCCountry" class="field form-control">
  397. {foreach $countries as $countrycode => $countrylabel}
  398. <option value="{$countrycode}"{if (!$domaincontact.country && $countrycode == $defaultcountry) || $countrycode eq $domaincontact.country} selected{/if}>
  399. {$countrylabel}
  400. </option>
  401. {/foreach}
  402. </select>
  403. </div>
  404. </div>
  405. <div class="col-sm-12">
  406. <div class="form-group prepend-icon">
  407. <label for="inputDCTaxId" class="field-icon">
  408. <i class="fas fa-building"></i>
  409. </label>
  410. <input type="text" name="domaincontacttax_id" id="inputDCTaxId" class="field form-control" placeholder="{$taxLabel} ({$LANG.orderForm.optional})" value="{$domaincontact.tax_id}">
  411. </div>
  412. </div>
  413. </div>
  414. </div>
  415. </div>
  416. </div>
  417. {if !$loggedin}
  418. <div id="containerNewUserSecurity"{if (!$loggedin && $custtype eq "existing") || ($remote_auth_prelinked && !$securityquestions) } class="w-hidden"{/if}>
  419. <div class="TM-card blocks accountpw">
  420. <div class="blocks_heading">
  421. <h2>{$LANG.orderForm.accountSecurity}</h2>
  422. </div>
  423. <div class="blocks_body" id="account_pw">
  424. <div id="containerPassword" class="row{if $remote_auth_prelinked && $securityquestions} w-hidden{/if}">
  425. <div id="passwdFeedback" style="display: none;" class="alert alert-info text-center col-sm-12"></div>
  426. <div class="col-sm-6">
  427. <div class="form-group prepend-icon">
  428. <label for="inputNewPassword1" class="field-icon">
  429. <i class="fas fa-lock"></i>
  430. </label>
  431. <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}>
  432. </div>
  433. </div>
  434. <div class="col-sm-6">
  435. <div class="form-group prepend-icon">
  436. <label for="inputNewPassword2" class="field-icon">
  437. <i class="fas fa-lock"></i>
  438. </label>
  439. <input type="password" name="password2" id="inputNewPassword2" class="field form-control" placeholder="{$LANG.clientareaconfirmpassword}"{if $remote_auth_prelinked} value="{$password}"{/if}>
  440. </div>
  441. </div>
  442. <div class="col-sm-6">
  443. <button type="button" class="btn btn-default btn-sm generate-password" data-targetfields="inputNewPassword1,inputNewPassword2">
  444. {$LANG.generatePassword.btnLabel}
  445. </button>
  446. </div>
  447. <div class="col-sm-6">
  448. <div class="password-strength-meter">
  449. <div class="progress">
  450. <div class="progress-bar progress-bar-success progress-bar-striped" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" id="passwordStrengthMeterBar">
  451. </div>
  452. </div>
  453. <p class="text-center small text-muted" id="passwordStrengthTextLabel">{$LANG.pwstrength}: {$LANG.pwstrengthenter}</p>
  454. </div>
  455. </div>
  456. </div>
  457. </div>
  458. </div>
  459. {if $securityquestions}
  460. <div class="TM-card blocks securityques">
  461. <div class="blocks_body" id="securityQuestion">
  462. {if !$loggedin}
  463. <div class="row">
  464. <div class="col-sm-6">
  465. <div class="form-group">
  466. <select name="securityqid" id="inputSecurityQId" class="field form-control">
  467. <option value="">{$LANG.clientareasecurityquestion}</option>
  468. {foreach $securityquestions as $question}
  469. <option value="{$question.id}"{if $question.id eq $securityqid} selected{/if}>
  470. {$question.question}
  471. </option>
  472. {/foreach}
  473. </select>
  474. </div>
  475. </div>
  476. <div class="col-sm-6">
  477. <div class="form-group prepend-icon">
  478. <label for="inputSecurityQAns" class="field-icon">
  479. <i class="fas fa-lock"></i>
  480. </label>
  481. <input type="password" name="securityqans" id="inputSecurityQAns" class="field form-control" placeholder="{$LANG.clientareasecurityanswer}">
  482. </div>
  483. </div>
  484. </div>
  485. {/if}
  486. </div>
  487. </div>
  488. {/if}
  489. </div>
  490. {/if}
  491. <div class="blocks paymentinfo">
  492. {* <div class="blocks_heading">
  493. <h2>{$LANG.orderForm.paymentDetails}</h2>
  494. </div>
  495. *}
  496. <div class="blocks_body" id="payment_info">
  497. {if $canUseCreditOnCheckout}
  498. <div id="applyCreditContainer" class="apply-credit-container" data-apply-credit="{$applyCredit}">
  499. <div class="p-3 border rounded mb-3">
  500. <p class="fw-500 text-muted mb-1 small">{lang key='availcreditbal'}:</p>
  501. <span class="h2 fw-500 mt-0">{$creditBalance}</span>
  502. </div>
  503. {if $creditBalance->toNumeric() >= $total->toNumeric()}
  504. <label class="radio">
  505. <input id="useFullCreditOnCheckout" class="cccheckdb" type="radio" name="applycredit" value="1"{if $applyCredit} checked{/if}>
  506. {lang key='cart.applyCreditAmountNoFurtherPayment' amount=$total}
  507. </label>
  508. {else}
  509. <label class="radio">
  510. <input id="useCreditOnCheckout" class="cccheckdb" type="radio" name="applycredit" value="1"{if $applyCredit} checked{/if}>
  511. {lang key='cart.applyCreditAmount' amount=$creditBalance}
  512. </label>
  513. {/if}
  514. <label class="radio">
  515. <input id="skipCreditOnCheckout" class="cccheckdb" type="radio" name="applycredit" value="0"{if !$applyCredit} checked{/if}>
  516. {lang key='cart.applyCreditSkip' amount=$creditBalance}
  517. </label>
  518. </div>
  519. {/if}
  520. {if !$inExpressCheckout}
  521. <div id="paymentGatewaysContainer" class="form-group"{if $canUseCreditOnCheckout} style="display: none;"{/if}>
  522. <h4>{$LANG.orderpaymentmethod}</h4>
  523. <div class="TM-card" id="cros-payment-gateway">
  524. {foreach $gateways as $gateway}
  525. <label class="radio-inline{if $selectedgateway eq $gateway.sysname} is-selected{/if}" id="lbl-{$gateway.sysname}" onclick="getApply('{$gateway.sysname}')">
  526. <span>
  527. <input type="radio" onclick="getApply(this.value)"
  528. name="paymentmethod"
  529. value="{$gateway.sysname}"
  530. data-payment-type="{$gateway.payment_type}"
  531. data-show-local="{$gateway.show_local_cards}"
  532. data-remote-inputs="{$gateway.uses_remote_inputs}"
  533. class="payment-methods{if $gateway.type eq "CC"} is-credit-card{/if}"
  534. {if $selectedgateway eq $gateway.sysname} checked{/if}
  535. />
  536. <span class="check-label">{$gateway.name}</span>
  537. </span>
  538. {assign var=gatewayIcon value=$gateway.sysname|lower|replace:" ":"-"}
  539. {if file_exists("templates/orderforms/{$carttpl}/img/gateways/{$gatewayIcon}.png")}
  540. <span class="check-icon">
  541. {if file_exists("templates/orderforms/{$carttpl}/img/gateways/overrides/{$gatewayIcon}.png")}
  542. <img src="templates/orderforms/{$carttpl}/img/gateways/overrides/{$gatewayIcon}.png" alt="{$gateway.name}" />
  543. {else}
  544. <img src="templates/orderforms/{$carttpl}/img/gateways/{$gatewayIcon}.png" alt="{$gateway.name}" />
  545. {/if}
  546. </span>
  547. {/if}
  548. </label>
  549. {/foreach}
  550. {foreach from=$gatewaysoutput item=gatewayname key=wskey}
  551. {if $gatewayname|strstr:"paypalcheckout"}
  552. <label class="radio-inline">
  553. <input type="radio" name="paymentmethod" value="paypalexpress" data-payment-type="Invoices" data-show-local="" data-remote-inputs="" class="payment-methods">
  554. PayPal Express Checkout
  555. </label>
  556. {/if}
  557. {/foreach}
  558. </div>
  559. </div>
  560. <div class="alert alert-danger text-center gateway-errors w-hidden"></div>
  561. <div class="clearfix"></div>
  562. <div class="cc-input-container{if $selectedgatewaytype neq "CC"} w-hidden{/if}" id="creditCardInputFields">
  563. {if $client}
  564. <div id="existingCardsContainer" class="existing-cc-grid">
  565. {include file="orderforms/{$carttpl}/includes/existing-paymethods.tpl"}
  566. </div>
  567. {/if}
  568. <div class="row cvv-input" id="existingCardInfo">
  569. <div class="col-lg-3 col-sm-4">
  570. <div class="form-group prepend-icon">
  571. <label for="inputCardCVV2" class="field-icon">
  572. <i class="fas fa-barcode"></i>
  573. </label>
  574. <div class="input-group">
  575. <input type="tel" name="cccvv" id="inputCardCVV2" class="field form-control" placeholder="{$LANG.creditcardcvvnumbershort}" autocomplete="cc-cvc">
  576. <span class="input-group-btn input-group-append">
  577. <button type="button" class="btn btn-default" data-toggle="popover" data-placement="bottom" data-content="<img src='{$BASE_PATH_IMG}/ccv.gif' width='210' />">
  578. ?
  579. </button>
  580. </span>
  581. </div>
  582. <span class="field-error-msg">{lang key="paymentMethodsManage.cvcNumberNotValid"}</span>
  583. </div>
  584. </div>
  585. </div>
  586. <ul>
  587. <li>
  588. <label class="radio-inline py-2 px-3 border rounded w-100">
  589. <input type="radio" name="ccinfo" value="new" id="new" {if !$client || $client->payMethods->count() === 0} checked="checked"{/if} />
  590. &nbsp;{lang key='creditcardenternewcard'}
  591. </label>
  592. </li>
  593. </ul>
  594. <div class="row" id="newCardInfo">
  595. <div id="cardNumberContainer" class="col-sm-6 new-card-container">
  596. <div class="form-group prepend-icon">
  597. <label for="inputCardNumber" class="field-icon">
  598. <i class="fas fa-credit-card"></i>
  599. </label>
  600. <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}" />
  601. <span class="field-error-msg"></span>
  602. </div>
  603. </div>
  604. <div class="col-sm-3 new-card-container">
  605. <div class="form-group prepend-icon">
  606. <label for="inputCardExpiry" class="field-icon">
  607. <i class="fas fa-calendar-alt"></i>
  608. </label>
  609. <input type="tel" name="ccexpirydate" id="inputCardExpiry" class="field form-control" placeholder="MM / YY{if $showccissuestart} ({$LANG.creditcardcardexpires}){/if}" autocomplete="cc-exp">
  610. <span class="field-error-msg">{lang key="paymentMethodsManage.expiryDateNotValid"}</span>
  611. </div>
  612. </div>
  613. <div class="col-sm-3" id="cvv-field-container">
  614. <div class="form-group prepend-icon">
  615. <label for="inputCardCVV" class="field-icon">
  616. <i class="fas fa-barcode"></i>
  617. </label>
  618. <div class="input-group">
  619. <input type="tel" name="cccvv" id="inputCardCVV" class="field form-control" placeholder="{$LANG.creditcardcvvnumbershort}" autocomplete="cc-cvc">
  620. <span class="input-group-btn input-group-append">
  621. <button type="button" class="btn btn-default" data-toggle="popover" data-placement="bottom" data-content="<img src='{$BASE_PATH_IMG}/ccv.gif' width='210' />">
  622. ?
  623. </button>
  624. </span><br>
  625. </div>
  626. <span class="field-error-msg">{lang key="paymentMethodsManage.cvcNumberNotValid"}</span>
  627. </div>
  628. </div>
  629. {if $showccissuestart}
  630. <div class="col-sm-3 col-sm-offset-6 new-card-container">
  631. <div class="form-group prepend-icon">
  632. <label for="inputCardStart" class="field-icon">
  633. <i class="far fa-calendar-check"></i>
  634. </label>
  635. <input type="tel" name="ccstartdate" id="inputCardStart" class="field form-control" placeholder="MM / YY ({$LANG.creditcardcardstart})" autocomplete="cc-exp">
  636. </div>
  637. </div>
  638. <div class="col-sm-3 new-card-container">
  639. <div class="form-group prepend-icon">
  640. <label for="inputCardIssue" class="field-icon">
  641. <i class="fas fa-asterisk"></i>
  642. </label>
  643. <input type="tel" name="ccissuenum" id="inputCardIssue" class="field form-control" placeholder="{$LANG.creditcardcardissuenum}">
  644. </div>
  645. </div>
  646. {/if}
  647. </div>
  648. <div id="newCardSaveSettings">
  649. <div class="row form-group new-card-container">
  650. <div id="inputDescriptionContainer" class="col-md-6">
  651. <div class="prepend-icon">
  652. <label for="inputDescription" class="field-icon">
  653. <i class="fas fa-pencil"></i>
  654. </label>
  655. <input type="text" class="field form-control" id="inputDescription" name="ccdescription" autocomplete="off" value="" placeholder="{$LANG.paymentMethods.descriptionInput} {$LANG.paymentMethodsManage.optional}" />
  656. </div>
  657. </div>
  658. {if $allowClientsToRemoveCards}
  659. <div id="inputNoStoreContainer" class="col-md-6" style="line-height: 32px;">
  660. <input type="hidden" name="nostore" value="1">
  661. <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'}">
  662. <label for="inputNoStore" class="checkbox-inline no-padding">
  663. &nbsp;&nbsp;
  664. {$LANG.creditCardStore}
  665. </label>
  666. </div>
  667. {/if}
  668. </div>
  669. </div>
  670. </div>
  671. {else}
  672. {if $expressCheckoutOutput}
  673. {$expressCheckoutOutput}
  674. {else}
  675. <p align="center">
  676. {lang key='paymentPreApproved' gateway=$expressCheckoutGateway}
  677. </p>
  678. {/if}
  679. {/if}
  680. </div>
  681. </div>
  682. </div>
  683. {if $shownotesfield}
  684. <div class="TM-card blocks additionalinfo">
  685. <div class="blocks_heading">
  686. <h2>{$LANG.orderForm.additionalNotes}</h2>
  687. </div>
  688. <div class="blocks_body" id="notesfield">
  689. <div class="row">
  690. <div class="col-md-12">
  691. <div class="form-group">
  692. <textarea name="notes" class="field form-control" rows="4" placeholder="{$LANG.ordernotesdescription}">{$orderNotes}</textarea>
  693. </div>
  694. </div>
  695. </div>
  696. </div>
  697. </div>
  698. {/if}
  699. {if $showMarketingEmailOptIn}
  700. <div class="TM-card blocks additionalinfo">
  701. <div class="blocks_body" id="MarketingEmailOptIn">
  702. <p>{$marketingEmailOptInMessage}</p>
  703. <div class="panel panel-switch {if $marketingEmailOptIn} checked{/if}">
  704. <div class="panel-body">
  705. <span class="switch-label">{lang key='emailMarketing.joinOurMailingList'}: </span>
  706. <label class="switch switch--text">
  707. <input class="no-icheck switch__checkbox" type="checkbox" name="marketingoptin" value="1"{if $marketingEmailOptIn} checked{/if}>
  708. <span class="switch__container"><span class="switch__handle"></span></span>
  709. </label>
  710. </div>
  711. </div>
  712. </div>
  713. </div>
  714. {/if}
  715. {if $accepttos}
  716. <div class="text-center">
  717. <label class="checkbox-inline">
  718. <input type="checkbox" name="accepttos" id="accepttos" />
  719. {$LANG.ordertosagreement}
  720. <a href="{$tosurl}" target="_blank">{$LANG.ordertos}</a>
  721. </label>
  722. </div>
  723. <br />
  724. {/if}
  725. {*
  726. {if $captcha}
  727. <div class="margin-bottom">
  728. {include file="$template/includes/captcha_spc.tpl"}
  729. </div>
  730. {/if}
  731. <div class="orderform_footer">
  732. <div class="order_form_tos">
  733. {if $accepttos}
  734. <div class="text-center">
  735. <label class="checkbox-inline">
  736. <input type="checkbox" name="accepttos" id="accepttos" />
  737. {$LANG.ordertosagreement}
  738. <a href="{$tosurl}" target="_blank">{$LANG.ordertos}</a>
  739. </label>
  740. </div>
  741. <br />
  742. {/if}
  743. </div>
  744. <div class="order_form_submit">
  745. <button type="submit" id="order_submit" class="btn btn-primary btn-lg spinner-on-click{if $captcha}{$captcha->getButtonClass($captchaForm)}{/if}">{if $inExpressCheckout}{$LANG.confirmAndPay}{else}{$LANG.completeorder}{/if}&nbsp;<i class="fas fa-arrow-circle-right"></i></button>
  746. </div>
  747. </div>
  748. *}
  749. </form>
  750. {if $servedOverSsl}
  751. <div class="alert alert-warning small mb-5">
  752. <i class="fad fa-lock-alt"></i>&nbsp;{$LANG.ordersecure} (<strong>{$ipaddress}</strong>) {$LANG.ordersecure2}
  753. </div>
  754. {/if}
  755. <script>
  756. jQuery(document).ready(function () {
  757. var panelSwitch = $('.panel-switch');
  758. panelSwitch.on('click', function (e) {
  759. if (!$(this).is('a')) {
  760. var currCheck = $(this).find('input[type="checkbox"]');
  761. if (currCheck.is(':checked')) {
  762. panelSwitch.removeClass('checked');
  763. currCheck.prop('checked', false);
  764. } else {
  765. panelSwitch.addClass('checked');
  766. currCheck.prop('checked', true);
  767. }
  768. var that = $(this);
  769. setTimeout(function () {
  770. that.find('.loader').addClass('loading');
  771. }, 300);
  772. }
  773. });
  774. jQuery('.existing-card').change('ifChecked', function (event) {
  775. $(this).closest(".card-item").toggleClass('selected', this.checked);
  776. });
  777. });
  778. // Enable Switches for Checkboxes
  779. if (jQuery.prototype.bootstrapSwitch) {
  780. jQuery(".toggle-switch-success").bootstrapSwitch({
  781. onColor: 'success'
  782. });
  783. }
  784. jQuery('#inputNoStore').on('switchChange.bootstrapSwitch', function(event, state) {
  785. var descContainer = jQuery('#inputDescription');
  786. if (!state) {
  787. descContainer.prop('disabled', true).addClass('disabled');
  788. }
  789. if (state) {
  790. descContainer.removeClass('disabled').prop('disabled', false);
  791. }
  792. });
  793. jQuery("#inputDomainContact").on('change', function() {
  794. if (this.value == "addingnew") {
  795. jQuery("#domainRegistrantInputFields").hide().removeClass('w-hidden').slideDown();
  796. } else {
  797. jQuery(".domain_config").show().removeClass('w-hidden').slideDown();
  798. jQuery("#domainRegistrantInputFields").slideUp();
  799. }
  800. });
  801. //Gateway checkbox
  802. function getApply(obj){
  803. var vDiv=document.getElementById("cros-payment-gateway").children.length;
  804. for(var i=0;i<vDiv;i++){
  805. var vObje = document.getElementById("cros-payment-gateway").children[i].id;
  806. if("lbl-"+obj==vObje){
  807. document.getElementById("lbl-"+obj).classList.add("is-selected");
  808. }
  809. else{
  810. document.getElementById(vObje).className ="radio-inline";
  811. }
  812. }
  813. }
  814. // Activate copy to clipboard functionality
  815. jQuery('.copy-to-clipboard').click(WHMCS.ui.clipboard.copy);
  816. // Password Generator
  817. jQuery('.generate-password').click(function(e) {
  818. jQuery('#frmGeneratePassword').submit();
  819. jQuery('#modalGeneratePassword')
  820. .data('targetfields', jQuery(this).data('targetfields'))
  821. .modal('show');
  822. });
  823. jQuery('#frmGeneratePassword').submit(function(e) {
  824. e.preventDefault();
  825. var length = parseInt(jQuery('#inputGeneratePasswordLength').val(), 10);
  826. // Check length
  827. if (length < 8 || length > 64) {
  828. jQuery('#generatePwLengthError').removeClass('w-hidden').show();
  829. return;
  830. }
  831. jQuery('#inputGeneratePasswordOutput').val(WHMCS.utils.generatePassword(length));
  832. });
  833. {if !$loggedin}
  834. if(jQuery("#inputCountry").length)
  835. {
  836. jQuery("#inputCountry").change(function(){
  837. setTimeout(function(){ recalcheckout(); }, 2500);
  838. });
  839. }
  840. {/if}
  841. // Default catch for all other popovers
  842. jQuery('[data-toggle="popover"]').popover({
  843. html: true
  844. });
  845. </script>
  846. <script>
  847. $('script[src*="stripe.min.js"]').slice(1).remove();
  848. $('iframe[name*="privateStripe"]').remove();
  849. </script>
  850. {$credit_card_input}