├── README.md ├── adddomain.tpl ├── addons.tpl ├── base.js ├── checkout.tpl ├── common.tpl ├── complete.tpl ├── configuredomains.tpl ├── configureproduct.tpl ├── configureproductdomain.tpl ├── css ├── all.css ├── all.min.css ├── blue.png ├── blue@2x.png └── style.css ├── domain-renewals.tpl ├── domainoptions.tpl ├── domainregister.tpl ├── domainrenewals.tpl ├── domaintransfer.tpl ├── error.tpl ├── fraudcheck.tpl ├── img └── globe.png ├── includes ├── existing-paymethods.tpl └── product-recommendations.tpl ├── index.php ├── js ├── base.js ├── scripts.js └── scripts.min.js ├── linkedaccounts.tpl ├── marketconnect-promo.tpl ├── ordersummary.tpl ├── products.tpl ├── recommendations-modal.tpl ├── service-renewal-item.tpl ├── service-renewals.tpl ├── sidebar-categories-collapsed.tpl ├── sidebar-categories-selector.tpl ├── sidebar-categories.tpl ├── style.css ├── theme.yaml ├── thumbnail.gif └── viewcart.tpl /README.md: -------------------------------------------------------------------------------- 1 | # WHMCS Standard Cart Order Form Template 2 | 3 | Welcome to the WHMCS "Standard Cart" order form template repository! This repository is dedicated to providing version-by-version changes of the "Standard Cart" template as published in [WHMCS](https://downloads.whmcs.com/). Sharing these changes through GitHub as a read-only repository enables you to quickly inspect and import these changes for your custom theme. 4 | 5 | ## Compatibility 6 | 7 | This template is compatible with WHMCS 6.1 and later. 8 | 9 | ## Usage 10 | 11 | You can utilise this repository to see the individual changes to this template as distributed in WHMCS. 12 | 13 | You can also use it to build your template in a way that can be controlled using Version Control, with the ability to pull in and auto-merge future changes. 14 | 15 | You may fork this repository as described in the 16 | [GitHub Guide: Forking Projects](https://guides.github.com/activities/forking/) or 17 | [GitHub Bootcamp: Forking a Repo](https://help.github.com/articles/fork-a-repo/) articles. 18 | 19 | ### Command Line Usage 20 | 21 | The below is an example of how you might check this repository out locally into a custom folder and create a branch for building and tracking the changes for your custom theme: 22 | 23 | ```sh 24 | # Navigate to your WHMCS templates directory 25 | cd ~/whmcs/templates/orderforms/ 26 | 27 | # Clone the Six template theme repo into your new template directory 28 | git clone git@github.com:WHMCS/orderforms-standard_cart.git my-template-name 29 | 30 | # Change directory to the template directory 31 | cd my-template-name 32 | 33 | # Create a custom branch to make and commit your customisations into 34 | git checkout -b my-template-name 35 | ``` 36 | 37 | When an update of WHMCS is published, the template changes will be propagated to this repository. You can then pull those changes into your custom template branch as follows: 38 | 39 | ```sh 40 | # Navigate to the template directory 41 | cd ~/whmcs/templates/orderforms/my-template-name 42 | 43 | # Fetch the latest updates from the Six template theme repo 44 | git fetch origin 45 | 46 | # Ensure your custom template branch is checked out 47 | git checkout my-template-name 48 | 49 | # Merge changes from origin/master into your custom branch 50 | git merge origin/master 51 | ``` 52 | 53 | ## Viewing the Template Changes 54 | 55 | A distinct tag is created for each published version of WHMCS. You can easily view 56 | any span of changes you like using the [Github Comparison View](https://github.com/WHMCS/orderforms-standard_cart/compare). 57 | Simply, select a pair of version tags in that interface! 58 | 59 | ## Useful Links 60 | 61 | * [Documentation](http://docs.whmcs.com/Order_Form_Templates) 62 | * [Technical Support](http://www.whmcs.com/support) 63 | * [WHMCS Website](http://www.whmcs.com/) 64 | -------------------------------------------------------------------------------- /adddomain.tpl: -------------------------------------------------------------------------------- 1 | {include file="orderforms/standard_cart/common.tpl"} 2 | 3 |
4 | 5 |
6 | 7 |
8 | 9 |
10 |

11 | {if $domain eq "register"} 12 | {$LANG.registerdomain} 13 | {elseif $domain eq "transfer"} 14 | {$LANG.transferdomain} 15 | {/if} 16 |

17 |
18 | 19 |
20 | 21 | 26 | 27 |
28 | 29 | {include file="orderforms/standard_cart/sidebar-categories-collapsed.tpl"} 30 | 31 | {if $domain == 'register'} 32 |

{$LANG.orderForm.findNewDomain}

33 | {else} 34 |

{$LANG.orderForm.transferExistingDomain}

35 | {/if} 36 | 37 |
38 | 39 | 40 | 41 | 42 |
43 |
44 |
45 |
46 |
47 | {lang key='orderForm.www'} 48 | 49 |
50 |
51 |
52 | 67 |
68 |
69 |
70 |
71 | 78 |
79 |
80 | 81 |
82 | 83 |
84 | 85 |
86 | 87 |
88 |
89 |
90 | 91 |
92 |
93 |
94 | 95 | {* 96 | * If we have availability results, then the form was submitted w/a domain. 97 | * Thus we want to do a search and show the results. 98 | *} 99 | {if $availabilityresults} 100 | 105 | {/if} 106 | -------------------------------------------------------------------------------- /addons.tpl: -------------------------------------------------------------------------------- 1 | {include file="orderforms/standard_cart/common.tpl"} 2 | 3 |
4 | 5 |
6 |
7 | 8 | {include file="orderforms/standard_cart/sidebar-categories.tpl"} 9 | 10 |
11 |
12 | 13 |
14 |

{$LANG.cartproductaddons}

15 |
16 | {include file="orderforms/standard_cart/sidebar-categories-collapsed.tpl"} 17 | 18 | {if count($addons) == 0} 19 | 22 |

23 | 24 | 25 | {$LANG.orderForm.returnToClientArea} 26 | 27 |

28 | {/if} 29 | 30 |
31 |
32 | {foreach $addons as $num => $addon} 33 |
34 |
35 |
36 | 37 |
38 | {$addon.name} 39 |
40 |
41 |

{$addon.description|nl2br}

42 |
43 | 50 |
51 |
52 |
53 |
54 |
55 | {if $addon.free} 56 | {$LANG.orderfree} 57 | {else} 58 | {$addon.recurringamount} {$addon.billingcycle} 59 | {if $addon.setupfee}
+ {$addon.setupfee} {$LANG.ordersetupfee}{/if} 60 | {/if} 61 |
62 | 66 |
67 |
68 |
69 |
70 | {if $num % 2 != 0} 71 |
72 |
73 | {/if} 74 | {/foreach} 75 |
76 |
77 |
78 |
79 |
80 | -------------------------------------------------------------------------------- /common.tpl: -------------------------------------------------------------------------------- 1 | 2 | {assetExists file="custom.css"} 3 | 4 | {/assetExists} 5 | -------------------------------------------------------------------------------- /complete.tpl: -------------------------------------------------------------------------------- 1 | {include file="orderforms/standard_cart/common.tpl"} 2 | 3 |
4 | 5 |
6 |
7 | {include file="orderforms/standard_cart/sidebar-categories.tpl"} 8 |
9 |
10 |
11 |

{$LANG.orderconfirmation}

12 |
13 | {include file="orderforms/standard_cart/sidebar-categories-collapsed.tpl"} 14 | 15 |

{$LANG.orderreceived}

16 | 17 |
18 |
19 |
20 | {$LANG.ordernumberis} {$ordernumber} 21 |
22 |
23 |
24 | 25 |

{$LANG.orderfinalinstructions}

26 | 27 | {if $expressCheckoutInfo} 28 |
29 | {$expressCheckoutInfo} 30 |
31 | {elseif $expressCheckoutError} 32 |
33 | {$expressCheckoutError} 34 |
35 | {elseif $invoiceid && !$ispaid} 36 |
37 | {$LANG.ordercompletebutnotpaid} 38 |

39 | 40 | {$LANG.invoicenumber}{$invoiceid} 41 | 42 |
43 | {/if} 44 | 45 | {foreach $addons_html as $addon_html} 46 |
47 | {$addon_html} 48 |
49 | {/foreach} 50 | 51 | {if $ispaid} 52 | 53 | 54 | {/if} 55 | 56 | 62 | 63 | {if $hasRecommendations} 64 | {include file="orderforms/standard_cart/includes/product-recommendations.tpl"} 65 | {/if} 66 |
67 |
68 |
69 | -------------------------------------------------------------------------------- /configuredomains.tpl: -------------------------------------------------------------------------------- 1 | {include file="orderforms/standard_cart/common.tpl"} 2 | 3 | 9 | 10 |
11 | 12 |
13 |
14 | {include file="orderforms/standard_cart/sidebar-categories.tpl"} 15 |
16 |
17 |
18 |

{$LANG.cartdomainsconfig}

19 |
20 | {include file="orderforms/standard_cart/sidebar-categories-collapsed.tpl"} 21 | 22 |
23 | 24 | 25 |

{$LANG.orderForm.reviewDomainAndAddons}

26 | 27 | {if $errormessage} 28 | 34 | {/if} 35 | 36 | {foreach $domains as $num => $domain} 37 | 38 |
39 | {$domain.domain} 40 |
41 | 42 |
43 |
44 |
45 | 46 |
47 | {$domain.regperiod} {$LANG.orderyears} 48 |
49 |
50 |
51 |
52 | 53 |
54 | {if $domain.hosting}[{$LANG.cartdomainshashosting}]{else}[{$LANG.cartdomainsnohosting}]{/if} 55 |
56 |
57 | {if $domain.eppenabled} 58 |
59 |
60 | 61 | 64 | 65 | {$LANG.domaineppcodedesc} 66 | 67 |
68 |
69 | {/if} 70 |
71 | 72 | {if $domain.dnsmanagement || $domain.emailforwarding || $domain.idprotection} 73 |
74 | 75 | {if $domain.dnsmanagement} 76 |
77 |
78 |
79 |
83 | {$LANG.domainaddonsdnsmanagementinfo} 84 |
85 |
86 | {$domain.dnsmanagementprice} / {$domain.regperiod} {$LANG.orderyears} 87 |
88 |
89 | 90 | {$LANG.orderForm.addToCart} 91 |
92 |
93 |
94 | {/if} 95 | 96 | {if $domain.idprotection} 97 |
98 |
99 |
100 |
104 | {$LANG.domainaddonsidprotectioninfo} 105 |
106 |
107 | {$domain.idprotectionprice} / {$domain.regperiod} {$LANG.orderyears} 108 |
109 |
110 | 111 | {$LANG.orderForm.addToCart} 112 |
113 |
114 |
115 | {/if} 116 | 117 | {if $domain.emailforwarding} 118 |
119 |
120 |
121 |
125 | {$LANG.domainaddonsemailforwardinginfo} 126 |
127 |
128 | {$domain.emailforwardingprice} / {$domain.regperiod} {$LANG.orderyears} 129 |
130 |
131 | 132 | {$LANG.orderForm.addToCart} 133 |
134 |
135 |
136 | {/if} 137 | 138 |
139 | {/if} 140 | {foreach from=$domain.fields key=domainfieldname item=domainfield} 141 |
142 |
{$domainfieldname}:
143 |
{$domainfield}
144 |
145 | {/foreach} 146 | 147 | {/foreach} 148 | 149 | {if $atleastonenohosting} 150 | 151 |
152 | {$LANG.domainnameservers} 153 |
154 | 155 |

{$LANG.cartnameserversdesc}

156 | 157 |
158 |
159 |
160 | 161 | 162 |
163 |
164 |
165 |
166 | 167 | 168 |
169 |
170 |
171 |
172 | 173 | 174 |
175 |
176 |
177 |
178 | 179 | 180 |
181 |
182 |
183 |
184 | 185 | 186 |
187 |
188 |
189 | 190 | {/if} 191 | 192 |
193 | 197 |
198 | 199 |
200 |
201 |
202 |
203 | 204 | {include file="orderforms/standard_cart/recommendations-modal.tpl"} 205 | -------------------------------------------------------------------------------- /configureproduct.tpl: -------------------------------------------------------------------------------- 1 | {include file="orderforms/standard_cart/common.tpl"} 2 | 3 | 9 | 10 |
11 | 12 |
13 |
14 | {include file="orderforms/standard_cart/sidebar-categories.tpl"} 15 |
16 |
17 | 18 |
19 |

{$LANG.orderconfigure}

20 |
21 | 22 | {include file="orderforms/standard_cart/sidebar-categories-collapsed.tpl"} 23 | 24 |
25 | 26 | 27 | 28 |
29 |
30 | 31 |

{$LANG.orderForm.configureDesiredOptions}

32 | 33 |
34 |

{$productinfo.name}

35 |

{$productinfo.description}

36 |
37 | 38 | 42 | 43 | {if $pricing.type eq "recurring"} 44 |
45 |
46 | 47 |
48 | 80 |
81 |
82 | {/if} 83 | 84 | {if count($metrics) > 0} 85 |
86 | {$LANG.metrics.title} 87 |
88 | 89 |

{$LANG.metrics.explanation}

90 | 91 |
    92 | {foreach $metrics as $metric} 93 |
  • 94 | {$metric.displayName} 95 | - 96 | {if count($metric.pricing) > 1} 97 | {$LANG.metrics.startingFrom} {$metric.lowestPrice} / {if $metric.unitName}{$metric.unitName}{else}{$LANG.metrics.unit}{/if} 98 | 101 | {elseif count($metric.pricing) == 1} 102 | {$metric.lowestPrice} / {if $metric.unitName}{$metric.unitName}{else}{$LANG.metrics.unit}{/if} 103 | {if $metric.includedQuantity > 0} ({$metric.includedQuantity} {$LANG.metrics.includedNotCounted}){/if} 104 | {/if} 105 | {include file="$template/usagebillingpricing.tpl"} 106 |
  • 107 | {/foreach} 108 |
109 | 110 |
111 | {/if} 112 | 113 | {if $productinfo.type eq "server"} 114 |
115 | {$LANG.cartconfigserver} 116 |
117 | 118 |
119 | 120 |
121 |
122 |
123 | 124 | 125 |
126 |
127 |
128 |
129 | 130 | 131 |
132 |
133 |
134 | 135 |
136 |
137 |
138 | 139 | 140 |
141 |
142 |
143 |
144 | 145 | 146 |
147 |
148 |
149 | 150 |
151 | {/if} 152 | 153 | {if $configurableoptions} 154 |
155 | {$LANG.orderconfigpackage} 156 |
157 |
158 |
159 | {foreach $configurableoptions as $num => $configoption} 160 | {if $configoption.optiontype eq 1} 161 |
162 |
163 | 164 | 171 |
172 |
173 | {elseif $configoption.optiontype eq 2} 174 |
175 |
176 | 177 | {foreach key=num2 item=options from=$configoption.options} 178 |
179 | 187 | {/foreach} 188 |
189 |
190 | {elseif $configoption.optiontype eq 3} 191 |
192 |
193 | 194 |
195 | 203 |
204 |
205 | {elseif $configoption.optiontype eq 4} 206 |
207 |
208 | 209 | {if $configoption.qtymaximum} 210 | {if !$rangesliderincluded} 211 | 212 | 213 | 214 | {assign var='rangesliderincluded' value=true} 215 | {/if} 216 | 217 | 242 | {else} 243 |
244 | 245 | 246 | x {$configoption.options.0.name} 247 | 248 |
249 | {/if} 250 |
251 |
252 | {/if} 253 | {if $num % 2 != 0} 254 |
255 |
256 | {/if} 257 | {/foreach} 258 |
259 |
260 | 261 | {/if} 262 | 263 | {if $customfields} 264 | 265 |
266 | {$LANG.orderadditionalrequiredinfo}
{lang key='orderForm.requiredField'}
267 |
268 | 269 |
270 | {foreach $customfields as $customfield} 271 |
272 | 273 | {$customfield.input} 274 | {if $customfield.description} 275 | 276 | {$customfield.description} 277 | 278 | {/if} 279 |
280 | {/foreach} 281 |
282 | 283 | {/if} 284 | 285 | {if $addons || count($addonsPromoOutput) > 0} 286 | 287 |
288 |
289 | {$LANG.cartavailableaddons} 290 |
291 | 292 | {foreach $addonsPromoOutput as $output} 293 |
294 | {$output} 295 |
296 | {/foreach} 297 | 298 |
299 | {foreach $addons as $addon} 300 |
301 |
302 |
303 |
307 | {$addon.description} 308 |
309 |
310 | {$addon.pricing} 311 |
312 |
313 | 314 | {$LANG.addtocart} 315 |
316 |
317 |
318 | {/foreach} 319 |
320 |
321 | {/if} 322 | 323 |
324 | 325 | {$LANG.orderForm.haveQuestionsContact} {$LANG.orderForm.haveQuestionsClickHere} 326 |
327 | 328 |
329 |
330 | 331 |
332 |
333 |
334 | 335 |
336 |

{$LANG.ordersummary}

337 |
338 |
339 |
340 | 344 |
345 |
346 | 347 |
348 | 349 |
350 | 351 |
352 |
353 |
354 |
355 | 356 | 357 | 358 | {include file="orderforms/standard_cart/recommendations-modal.tpl"} 359 | -------------------------------------------------------------------------------- /configureproductdomain.tpl: -------------------------------------------------------------------------------- 1 | {include file="orderforms/standard_cart/common.tpl"} 2 | 3 |
4 | 5 |
6 |
7 | {include file="orderforms/standard_cart/sidebar-categories.tpl"} 8 |
9 | 10 |
11 |
12 |

{$LANG.domaincheckerchoosedomain}

13 |
14 | {include file="orderforms/standard_cart/sidebar-categories-collapsed.tpl"} 15 |
16 | 17 |
18 | {if $incartdomains} 19 |
20 | 23 |
24 |
25 |
26 |
27 | 32 |
33 |
34 |
35 | 38 |
39 |
40 |
41 |
42 | {/if} 43 | {if $registerdomainenabled} 44 |
45 | 48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 | {$LANG.orderForm.www} 56 |
57 | 58 |
59 |
60 |
61 | 66 |
67 |
68 |
69 |
70 | 73 |
74 |
75 |
76 |
77 | {/if} 78 | {if $transferdomainenabled} 79 |
80 | 83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 | {$LANG.orderForm.www} 91 |
92 | 93 |
94 |
95 |
96 | 101 |
102 |
103 |
104 |
105 | 108 |
109 |
110 |
111 |
112 | {/if} 113 | {if $owndomainenabled} 114 |
115 | 118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 | {lang key='orderForm.www'} 126 |
127 | 128 |
129 |
130 |
131 | 132 |
133 |
134 |
135 |
136 | 139 |
140 |
141 |
142 |
143 | {/if} 144 | {if $subdomains} 145 |
146 | 149 |
150 |
151 |
152 |
153 |
154 |

http://

155 |
156 |
157 | 158 |
159 |
160 | 165 |
166 |
167 |
168 |
169 | 172 |
173 |
174 |
175 |
176 | {/if} 177 |
178 | 179 | {if $freedomaintlds} 180 |

* {$LANG.orderfreedomainregistration} {$LANG.orderfreedomainappliesto}: {$freedomaintlds}

181 | {/if} 182 | 183 |
184 | 185 |
186 |
187 | 188 |
189 | 190 |
191 |

192 | 193 | {lang key='orderForm.checkingAvailability'}... 194 | {lang key='orderForm.verifyingTransferEligibility'}... 195 | {lang key='orderForm.verifyingDomain'}... 196 |

197 |
198 |
{lang key='orderForm.domainIsUnavailable'}
199 |
{$LANG.domainavailablemessage}
200 |
{$LANG.domainContactUs}
201 |
202 |

{lang key='orderForm.transferEligible'}

203 |

{lang key='orderForm.transferUnlockBeforeContinuing'}

204 |
205 |
206 |

{lang key='orderForm.transferNotEligible'}

207 |

{lang key='orderForm.transferNotRegistered'}

208 |

{lang key='orderForm.trasnferRecentlyRegistered'}

209 |

{lang key='orderForm.transferAlternativelyRegister'}

210 |
211 |
212 |

{lang key='orderForm.domainInvalid'}

213 |

214 | {lang key='orderForm.domainLetterOrNumber'}{lang key='orderForm.domainLengthRequirements'}
215 | {lang key='orderForm.domainInvalidCheckEntry'} 216 |

217 |
218 |
219 |
220 |
221 |
222 | {lang key='cart.idnLanguageDescription'} 223 |
224 |
225 |
226 |
227 |
228 |
229 | 235 |
236 | {lang key='cart.selectIdnLanguageForRegister'} 237 |
238 |
239 |
240 |
241 |
242 |
243 | {lang key='orderForm.domainPriceRegisterLabel'} 244 | {lang key='orderForm.domainPriceTransferLabel'} 245 | 246 |
247 |

248 | 249 | 250 | 251 |
252 |
253 | 254 | {if $registerdomainenabled} 255 | {if $spotlightTlds} 256 |
257 |
258 | {foreach $spotlightTlds as $key => $data} 259 |
260 |
261 | {if $data.group} 262 |
{$data.groupDisplayName}
263 | {/if} 264 | {$data.tld} 265 | 266 | 267 | 268 |
269 | 272 | 275 | {$data.register} 276 | 284 | 287 |
288 |
289 |
290 | {/foreach} 291 |
292 |
293 | {/if} 294 | 295 |
296 |
297 | {lang key='orderForm.suggestedDomains'} 298 |
299 |
300 | {lang key='orderForm.generatingSuggestions'} 301 |
302 |
303 |
304 | 305 |
306 | 314 | 315 | 316 | 317 |
318 |
319 |
320 | 324 |
325 |

{lang key='domainssuggestionswarnings'}

326 |
327 |
328 | {/if} 329 |
330 | 331 |
332 | 336 |
337 |
338 |
339 |
340 |
341 | 342 | {include file="orderforms/standard_cart/recommendations-modal.tpl"} 343 | -------------------------------------------------------------------------------- /css/blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WHMCS/orderforms-standard_cart/9678759afc84818afcb2fc1c32813b3a79a4a0b1/css/blue.png -------------------------------------------------------------------------------- /css/blue@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WHMCS/orderforms-standard_cart/9678759afc84818afcb2fc1c32813b3a79a4a0b1/css/blue@2x.png -------------------------------------------------------------------------------- /domain-renewals.tpl: -------------------------------------------------------------------------------- 1 | {include file="orderforms/standard_cart/common.tpl"} 2 | 3 |
4 |
5 |
6 | {include file="orderforms/standard_cart/sidebar-categories.tpl"} 7 |
8 |
9 |
10 |

11 | {if $totalResults > 1}{lang key='navrenewdomains'}{else}{lang key='domainrenew'}{/if} 12 | {if $totalResults > 5} 13 |
14 | 15 |
16 | {/if} 17 |

18 |
19 | {include file="orderforms/standard_cart/sidebar-categories-collapsed.tpl"} 20 | 21 | {if $totalDomainCount == 0} 22 | 25 |

26 | 27 | 28 | {$LANG.orderForm.returnToClientArea} 29 | 30 |

31 | {else} 32 |
33 | 34 |
35 | {if $totalResults < $totalDomainCount} 36 |
37 | {lang key='domainRenewal.showingDomains' showing=$totalResults totalCount=$totalDomainCount} 38 | {lang key='domainRenewal.showAll'} 39 |
40 | {/if} 41 | 42 |
43 | {foreach $renewalsData as $renewalData} 44 |
45 |
46 | {if !$renewalData.eligibleForRenewal} 47 | 48 | {if $renewalData.freeDomainRenewal} 49 | {lang key='domainRenewal.freeWithService'} 50 | {else} 51 | {lang key='domainRenewal.unavailable'} 52 | {/if} 53 | 54 | {elseif ($renewalData.pastGracePeriod && $renewalData.pastRedemptionGracePeriod)} 55 | 56 | {lang key='domainrenewalspastgraceperiod'} 57 | 58 | {elseif !$renewalData.beforeRenewLimit && $renewalData.daysUntilExpiry > 0} 59 | 60 | {lang key='domainRenewal.expiringIn' days=$renewalData.daysUntilExpiry} 61 | 62 | {elseif $renewalData.daysUntilExpiry === 0} 63 | 64 | {lang key='expiresToday'} 65 | 66 | {elseif $renewalData.beforeRenewLimit} 67 | 68 | {lang key='domainRenewal.maximumAdvanceRenewal' days=$renewalData.beforeRenewLimitDays} 69 | 70 | {else} 71 | 72 | {lang key='domainRenewal.expiredDaysAgo' days=$renewalData.daysUntilExpiry*-1} 73 | 74 | {/if} 75 |
76 | 77 |

{$renewalData.domain}

78 | 79 |

{lang key='clientareadomainexpirydate'}: {$renewalData.expiryDate->format('j M Y')} ({$renewalData.expiryDate->diffForHumans()})

80 | {if $renewalData.freeDomainRenewal} 81 |

{lang key='domainRenewal.freeWithServiceDesc'}

82 | {/if} 83 | 84 | {if ($renewalData.pastGracePeriod && $renewalData.pastRedemptionGracePeriod) || !count($renewalData.renewalOptions)} 85 | {else} 86 |
87 |
88 | 94 |
95 | 108 |
109 |
110 |
111 | {/if} 112 | 113 |
114 | {if !$renewalData.eligibleForRenewal || $renewalData.beforeRenewLimit || ($renewalData.pastGracePeriod && $renewalData.pastRedemptionGracePeriod)} 115 | {else} 116 | 123 | {/if} 124 |
125 |
126 | {/foreach} 127 |
128 | 129 |
130 | 131 | {if $hasDomainsInGracePeriod} 132 | * {lang key='domainRenewal.graceRenewalPeriodDescription'} 133 | {/if} 134 | 135 |
136 |
137 | 138 |
139 | 140 |
141 |
142 |
143 | 144 |
145 |

{lang key='ordersummary'}

146 |
147 |
148 | 154 |
155 | 156 |
157 |
158 | {/if} 159 |
160 |
161 |
162 | 163 | 164 | 165 | 187 |
188 |
189 | 190 | 191 | -------------------------------------------------------------------------------- /domainoptions.tpl: -------------------------------------------------------------------------------- 1 | {if $invalid} 2 |
3 | {if $reason} 4 | {$reason} 5 | {else} 6 | {$LANG.cartdomaininvalid} 7 | {/if} 8 |
9 | {elseif $alreadyindb} 10 |
11 | {$LANG.cartdomainexists} 12 |
13 | {else} 14 | 15 | {if $checktype=="register" && $regenabled} 16 | 17 | 18 | 19 | {if $status eq "available" || $status eq "error"} 20 | 21 |
22 | {$LANG.cartcongratsdomainavailable|sprintf2:$domain} 23 |
24 | 25 | 26 | 27 | 28 |
29 | {if count($searchResults.pricing) == 1} 30 |

{$LANG.orderForm.domainAddedToCart}

31 | 35 | {else} 36 |

{$LANG.orderForm.registerLongerAndSave}

37 |
38 | 44 | 50 | 60 |
61 | {/if} 62 |
63 | 64 | 65 | {assign var='continueok' value=true} 66 | 67 | {elseif $status eq "unavailable"} 68 | 69 |
70 | {$LANG.cartdomaintaken|sprintf2:$domain} 71 |
72 | 73 | {/if} 74 | 75 | {elseif $checktype=="transfer" && $transferenabled} 76 | 77 | 78 | 79 | {if $status eq "available"} 80 | 81 |
82 | {$LANG.carttransfernotregistered|sprintf2:$domain} 83 |
84 |

{$LANG.orderForm.tryRegisteringInstead}

85 | 86 | {elseif $status eq "unavailable" || $status eq "error"} 87 | 88 |
89 | {$LANG.carttransferpossible|sprintf2:$domain:$transferprice} 90 |
91 | 92 | 93 | 94 | 95 | {assign var='continueok' value=true} 96 | 97 | {/if} 98 | 99 | {elseif $checktype=="owndomain" || $checktype=="subdomain"} 100 | 101 | 102 | 103 | 104 | 107 | 108 | {/if} 109 | 110 | {if $searchResults.suggestions} 111 | 112 |
113 | {$LANG.cartotherdomainsuggestions} 114 |
115 | 116 |
117 | {foreach $searchResults.suggestions as $num => $result} 118 |
119 | 120 | 124 |
125 | {if count($result.pricing) > 1} 126 |
127 | {/if} 128 | 134 | {if count($result.pricing) > 1} 135 | 141 | 151 |
152 | {/if} 153 |
154 |
155 | {/foreach} 156 |
157 | 158 | {assign var='continueok' value=true} 159 | 160 | {/if} 161 | 162 | {if $continueok} 163 |
164 | 165 | {$LANG.orderForm.domainAvailabilityCached} 166 |
167 | 168 |
169 | 173 |
174 | {/if} 175 | 176 | {/if} 177 | 178 | 185 | -------------------------------------------------------------------------------- /domainregister.tpl: -------------------------------------------------------------------------------- 1 | {include file="orderforms/standard_cart/common.tpl"} 2 | 3 |
4 | 5 |
6 |
7 | {include file="orderforms/standard_cart/sidebar-categories.tpl"} 8 |
9 |
10 |
11 |

12 | {$LANG.registerdomain} 13 |

14 |
15 | {include file="orderforms/standard_cart/sidebar-categories-collapsed.tpl"} 16 | 17 |

{$LANG.orderForm.findNewDomain}

18 | 19 |
20 |
21 |
22 | 23 |
24 |
25 |
26 | 27 | 28 | 29 | 30 |
31 |
32 | 33 | {if $captcha->isEnabled() && $captcha->isEnabledForForm($captchaForm) && !$captcha->recaptcha->isInvisible()} 34 |
35 |
36 | {if $captcha->recaptcha->isEnabled()} 37 |
38 |
39 |
40 |
41 | {else} 42 |
43 |

{lang key="cartSimpleCaptcha"}

44 |
45 | 46 | 47 |
48 |
49 | {/if} 50 |
51 |
52 | {/if} 53 |
54 |
55 |
56 |
57 | 58 |
59 |
60 |

{lang key='orderForm.searching'}...

61 |
62 |

{lang key='orderForm.domainLetterOrNumber'}{lang key='orderForm.domainLengthRequirements'}

63 |

{lang key='orderForm.domainIsUnavailable'}

64 |

{lang key='orderForm.domainHasUnavailableTld'}

65 |

{$LANG.domainavailablemessage}

66 | {$LANG.domainContactUs} 67 |
68 |
69 |
70 |
71 | {lang key='cart.idnLanguageDescription'} 72 |
73 |
74 |
75 |
76 |
77 | 83 |
84 | {lang key='cart.selectIdnLanguageForRegister'} 85 |
86 |
87 |
88 |
89 |

90 | 91 | 99 |

100 |

101 |
102 |
103 | 104 | {if $spotlightTlds} 105 |
106 |
107 | {foreach $spotlightTlds as $key => $data} 108 |
109 |
110 | {if $data.group} 111 |
{$data.groupDisplayName}
112 | {/if} 113 | {$data.tld} 114 | 115 | 116 | 117 |
118 | 121 | 124 | {$data.register} 125 | 133 | 136 |
137 |
138 |
139 | {/foreach} 140 |
141 |
142 | {/if} 143 | 144 |
145 |
146 | {lang key='orderForm.suggestedDomains'} 147 |
148 |
149 | {lang key='orderForm.generatingSuggestions'} 150 |
151 |
152 |
153 | 154 | 155 | {lang key='domainCheckerSalesGroup.hot'} 156 | {lang key='domainCheckerSalesGroup.new'} 157 | {lang key='domainCheckerSalesGroup.sale'} 158 | 159 |
160 | 161 | 169 | 172 |
173 |
174 |
175 | 179 |
180 |

{lang key='domainssuggestionswarnings'}

181 |
182 |
183 | 184 |
185 | 186 |
187 | 188 | {if $featuredTlds} 189 | 216 | {/if} 217 | 218 |

{lang key='pricing.browseExtByCategory'}

219 | 220 |
221 | {foreach $categoriesWithCounts as $category => $count} 222 | {lang key="domainTldCategory.$category" defaultValue=$category} ({$count}) 223 | {/foreach} 224 |
225 | 226 |
227 |
228 |
{lang key='orderdomain'}
229 |
230 |
231 |
{lang key='pricing.register'}
232 |
{lang key='pricing.transfer'}
233 |
{lang key='pricing.renewal'}
234 |
235 |
236 |
237 | {foreach $pricing['pricing'] as $tld => $price} 238 |
239 |
240 | .{$tld} 241 | {if $price.group} 242 | 243 | {lang key='domainCheckerSalesGroup.'|cat:$price.group} 244 | 245 | {/if} 246 |
247 |
248 |
249 |
250 | {if isset($price.register) && current($price.register) > 0} 251 | {current($price.register)}
252 | {key($price.register)} {if key($price.register) > 1}{lang key="orderForm.years"}{else}{lang key="orderForm.year"}{/if} 253 | {elseif isset($price.register) && current($price.register) == 0} 254 | {lang key='orderfree'} 255 | {else} 256 | {lang key='na'} 257 | {/if} 258 |
259 |
260 | {if isset($price.transfer) && current($price.transfer) > 0} 261 | {current($price.transfer)}
262 | {key($price.transfer)} {if key($price.register) > 1}{lang key="orderForm.years"}{else}{lang key="orderForm.year"}{/if} 263 | {elseif isset($price.transfer) && current($price.transfer) == 0} 264 | {lang key='orderfree'} 265 | {else} 266 | {lang key='na'} 267 | {/if} 268 |
269 |
270 | {if isset($price.renew) && current($price.renew) > 0} 271 | {current($price.renew)}
272 | {key($price.renew)} {if key($price.register) > 1}{lang key="orderForm.years"}{else}{lang key="orderForm.year"}{/if} 273 | {elseif isset($price.renew) && current($price.renew) == 0} 274 | {lang key='orderfree'} 275 | {else} 276 | {lang key='na'} 277 | {/if} 278 |
279 |
280 |
281 |
282 | {/foreach} 283 |
284 |
285 |
286 | {lang key='pricing.selectExtCategory'} 287 |

288 |
289 |
290 |
291 | 292 |
293 | 294 |
295 |
296 |
297 | 298 |
299 | 300 |

{lang key='orderForm.addHosting'}

301 |

{lang key='orderForm.chooseFromRange'}

302 |
303 | 304 |

{lang key='orderForm.packagesForBudget'}

305 | 306 | 307 | {lang key='orderForm.exploreNow'} 308 | 309 |
310 |
311 | {if $domainTransferEnabled} 312 |
313 |
314 | 315 |
316 | 317 |

{lang key='orderForm.transferToUs'}

318 |

{lang key='orderForm.transferExtend'}*

319 |
320 | 321 | 322 | {lang key='orderForm.transferDomain'} 323 | 324 | 325 |

* {lang key='orderForm.extendExclusions'}

326 |
327 |
328 | {/if} 329 |
330 |
331 |
332 |
333 | 334 | 349 | -------------------------------------------------------------------------------- /domainrenewals.tpl: -------------------------------------------------------------------------------- 1 | {include file="orderforms/standard_cart/common.tpl"} 2 | 3 |
4 | 5 |
6 | 7 |
8 | 9 |
10 |

{$LANG.domainrenewals}

11 |
12 | 13 |
14 | 15 | 20 | 21 |
22 | 23 | {include file="orderforms/standard_cart/sidebar-categories-collapsed.tpl"} 24 | 25 |

{$LANG.domainrenewdesc}

26 | 27 |
28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | {foreach from=$renewals item=renewal} 41 | 42 | 47 | 50 | 53 | 82 | 101 | 102 | {foreachelse} 103 | 104 | 105 | 106 | {/foreach} 107 | 108 |
{$LANG.orderdomain}{$LANG.domainstatus}{$LANG.domaindaysuntilexpiry}
43 | {if !$renewal.beforeRenewLimit && !($renewal.pastGracePeriod && $renewal.pastRedemptionGracePeriod)} 44 | 45 | {/if} 46 | 48 | {$renewal.domain} 49 | 51 | {$renewal.status} 52 | 54 | {if $renewal.daysuntilexpiry > 30} 55 | 56 | {$renewal.daysuntilexpiry} {$LANG.domainrenewalsdays} 57 | 58 | {elseif $renewal.daysuntilexpiry > 0} 59 | 60 | {$renewal.daysuntilexpiry} {$LANG.domainrenewalsdays} 61 | 62 | {elseif $renewal.daysuntilexpiry === 0} 63 | 64 | {lang key="expiresToday"} 65 | 66 | {else} 67 | 68 | {$renewal.daysuntilexpiry*-1} {$LANG.domainrenewalsdaysago} 69 | 70 | {/if} 71 | {if $renewal.ingraceperiod || $renewal.inRedemptionGracePeriod} 72 |
73 | 74 | {if $renewal.inGracePeriod} 75 | {lang key='domainrenewalsingraceperiod'} 76 | {else} 77 | {lang key='domainRenewalsInRedemptionGracePeriod'} 78 | {/if} 79 | 80 | {/if} 81 |
83 | {if $renewal.beforerenewlimit} 84 | 85 | {$LANG.domainrenewalsbeforerenewlimit|sprintf2:$renewal.beforerenewlimitdays} 86 | 87 | {elseif $renewal.pastgraceperiod && $renewal.pastRedemptionGracePeriod} 88 | 89 | {$LANG.domainrenewalspastgraceperiod} 90 | 91 | {else} 92 | 99 | {/if} 100 |
{$LANG.domainrenewalsnoneavailable}
109 | 110 |

111 | 115 |

116 | 117 |
118 | 119 |
120 |
121 |
122 | -------------------------------------------------------------------------------- /domaintransfer.tpl: -------------------------------------------------------------------------------- 1 | {include file="orderforms/standard_cart/common.tpl"} 2 | 3 |
4 | 5 |
6 |
7 | {include file="orderforms/standard_cart/sidebar-categories.tpl"} 8 |
9 |
10 |
11 |

12 | {$LANG.transferdomain} 13 |

14 |
15 | {include file="orderforms/standard_cart/sidebar-categories-collapsed.tpl"} 16 | 17 |
18 |

{lang key='orderForm.transferToUs'}

19 |

{lang key='orderForm.transferExtend'}*

20 |
21 |
22 | 23 |
24 | 25 | 26 |
27 |
28 |
29 |
30 |

{lang key='orderForm.singleTransfer'}

31 |
32 |
33 |
34 | 35 | 36 |
37 |
38 | 42 | 43 |
44 |
45 | {if $captcha->isEnabled() && !$captcha->recaptcha->isEnabled()} 46 |
47 |
48 |

{lang key="cartSimpleCaptcha"}

49 |
50 | 51 | 52 |
53 |
54 |
55 | {elseif $captcha->isEnabled() && $captcha->recaptcha->isEnabled() && !$captcha->recaptcha->isInvisible()} 56 |
57 |
58 |
59 | {/if} 60 |
61 | 62 | 70 |
71 |
72 |
73 | 74 |
75 | 76 |

* {lang key='orderForm.extendExclusions'}

77 |
78 |
79 |
80 | -------------------------------------------------------------------------------- /error.tpl: -------------------------------------------------------------------------------- 1 | {include file="orderforms/standard_cart/common.tpl"} 2 | 3 |
4 | 5 |
6 |
7 | {include file="orderforms/standard_cart/sidebar-categories.tpl"} 8 |
9 |
10 |
11 |

12 | {$LANG.thereisaproblem} 13 |

14 |
15 | {include file="orderforms/standard_cart/sidebar-categories-collapsed.tpl"} 16 | 17 |
18 | 19 | {$errortitle} 20 |
21 | 22 |
23 |
24 | 25 |

{$errormsg}

26 | 27 | 33 | 34 |
35 |
36 |
37 |
38 |
39 | -------------------------------------------------------------------------------- /fraudcheck.tpl: -------------------------------------------------------------------------------- 1 | {include file="orderforms/standard_cart/common.tpl"} 2 | 3 |
4 | 5 |
6 |

7 | {$LANG.cartfraudcheck} 8 |

9 |
10 | 11 |
12 | 13 |
14 | 15 | {include file="orderforms/standard_cart/sidebar-categories-collapsed.tpl"} 16 | 17 |
18 | 19 | {$errortitle} 20 |
21 | 22 |
23 |
24 | {if $userValidation && !$userValidation.submittedAt && $userValidation.token eq true} 25 |

{lang key='fraud.furtherVal'}

26 |

27 | 28 | {lang key='fraud.submitDocs'} 29 |   30 | 31 |

32 | 44 | {else} 45 |

{$error}

46 | 47 |

48 | 49 | {$LANG.orderForm.submitTicket} 50 |   51 | 52 |

53 | {/if} 54 | 55 |
56 |
57 | 58 |
59 |
60 |
61 | -------------------------------------------------------------------------------- /img/globe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WHMCS/orderforms-standard_cart/9678759afc84818afcb2fc1c32813b3a79a4a0b1/img/globe.png -------------------------------------------------------------------------------- /includes/existing-paymethods.tpl: -------------------------------------------------------------------------------- 1 | {if $selectedAccountId === $client->id} 2 | {foreach $client->payMethods->validateGateways()->sortByExpiryDate() as $payMethod} 3 | {assign "payMethodExpired" 0} 4 | {assign "expiryDate" ""} 5 | {if $payMethod->isCreditCard()} 6 | {if ($payMethod->payment->isExpired())} 7 | {assign "payMethodExpired" 1} 8 | {/if} 9 | 10 | {if $payMethod->payment->getExpiryDate()} 11 | {assign "expiryDate" $payMethod->payment->getExpiryDate()->format('m/Y')} 12 | {/if} 13 | {/if} 14 | 15 |
16 | 24 |
25 | 26 |
27 | 28 |
29 |
30 | {if $payMethod->isCreditCard() || $payMethod->isRemoteBankAccount()} 31 | {$payMethod->payment->getDisplayName()} 32 | {else} 33 | 34 | {$payMethod->payment->getAccountType()} 35 | 36 | {substr($payMethod->payment->getAccountNumber(), -4)} 37 | {/if} 38 |
39 |
40 | {$payMethod->getDescription()} 41 |
42 |
43 | {$expiryDate}{if $payMethodExpired}
{$LANG.clientareaexpired}{/if} 44 |
45 | {/foreach} 46 | {/if} 47 | -------------------------------------------------------------------------------- /includes/product-recommendations.tpl: -------------------------------------------------------------------------------- 1 | {if !empty($lastProduct)} 2 |
3 |
4 | 5 |  {lang key="recommendations.productAdded"} 6 | 7 |
8 |  {$lastProduct.product.name} 9 |  {$lastProduct.product.productGroup.name} 10 |
11 |
12 | 13 | {if !$lastProduct.pricing->isFree()} 14 |  {$lastProduct.pricing->price()->toFull()} 15 | {if $lastProduct.pricing->setup() && $lastProduct.pricing->setup()->toNumeric() > 0} 16 | + {$lastProduct.pricing->setup()->toFull()} {lang key="ordersetupfee"} 17 | {/if} 18 | {/if} 19 | 20 |  {lang key='orderpaymentterm'|cat:$lastProduct.pricing->cycle()} 21 |
22 |
23 |
24 | {/if} 25 |
26 |
27 | {if !in_array($templatefile, ['viewcart', 'checkout', 'complete'])} 28 |

{lang key="recommendations.explain.product"}

29 | {elseif !$recommendStyle && $templatefile != 'complete'} 30 |

{lang key="recommendations.explain.generic"}

31 | {elseif $templatefile == 'complete'} 32 |
33 |

{lang key="recommendations.title.generic"}

34 |

35 | 36 | {if !empty($productRecommendations.order)} 37 | {lang key="recommendations.title.yourOrder"} 38 | {else} 39 | {lang key="recommendations.title.yourProducts"} 40 | {/if} 41 | 42 |

43 |
44 |
45 | {/if} 46 | {if $productRecommendations} 47 | {foreach $productRecommendations as $categoryKey => $categoryRecommendations} 48 | {if $templatefile == 'complete' && $categoryKey == 'own' && !empty($productRecommendations.own) && !empty($productRecommendations.order)} 49 |

50 | {lang key="recommendations.title.yourProducts"} 51 |

52 |
53 | {/if} 54 | {foreach $categoryRecommendations as $categoryRecommendation} 55 | {if $recommendStyle && $templatefile != 'complete'} 56 |

{lang key="recommendations.explain.ordered" productName=$categoryRecommendation.name}

57 | {/if} 58 | {foreach $categoryRecommendation.recommendations as $recommendation} 59 | {assign var="price" value=$recommendation->pricing()->first()} 60 |
61 |
62 |
63 |
64 | isFree()}class="w-hidden hidden"{/if}>{lang key="orderfree"} 65 | {if !$recommendation->isFree() && $price} 66 | 67 | {if $price->isOneTime()} 68 | {$price->price()->toFull()} 69 | {elseif $price->isRecurring()} 70 | {$price->breakdownPrice()} 71 | {/if} 72 | 73 | {/if} 74 | {if !$recommendation->isFree() && !is_null($price->setup()) && $price->setup()->toNumeric() > 0} 75 | {$price->setup()->toFull()} {lang key="ordersetupfee"} 76 | {/if} 77 |
78 | 79 | 80 | {lang key="addtocart"} 81 | 82 | 83 | 84 | 85 | 86 |
87 |
88 | {if $recommendation.shortDescription} 89 | 90 | {else} 91 | 92 | {/if} 93 |
94 |
95 |
{$recommendation.productGroup.name} - {$recommendation.name}
96 |
97 | {if empty($recommendation.tagline)} 98 | {lang key="recommendations.taglinePlaceholder"} 99 | {else} 100 | {$recommendation.tagline} 101 | {/if} 102 |
103 |
104 |
105 |
106 |

{$recommendation.shortDescription}

107 |
108 |
109 | {/foreach} 110 | {/foreach} 111 | {/foreach} 112 | {/if} 113 |
114 |
115 | -------------------------------------------------------------------------------- /index.php: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | {lang key='remoteAuthn.provider'} 10 | {lang key='remoteAuthn.name'} 11 | {lang key='remoteAuthn.emailAddress'} 12 | {lang key='remoteAuthn.actions'} 13 | 14 | 15 | 16 | 17 | {lang key='remoteAuthn.noLinkedAccounts'} 18 | 19 | 20 | 21 | {elseif $linkableProviders} 22 | 23 |
24 | 27 | 30 | 33 | 36 | 39 | 42 | 45 | 48 | 51 | 54 | 57 |
58 | 59 | {if $linkContext == 'registration'} 60 |
61 | {lang key='remoteAuthn.titleSignUpVerb'} 62 |
63 | {elseif $linkContext == 'checkout-existing'} 64 |
65 | {lang key='remoteAuthn.titleOr'} 66 |
67 |

{lang key='remoteAuthn.saveTimeByLinking'}

68 | {elseif $linkContext == 'checkout-new'} 69 |
70 | {lang key='remoteAuthn.titleSignUpVerb'} 71 |
72 |

{lang key='remoteAuthn.saveTimeByLinking'}

73 | {elseif $linkContext == 'clientsecurity'} 74 |

{lang key='remoteAuthn.mayHaveMultipleLinks'}

75 | {/if} 76 | 77 |
80 |
81 | {foreach $linkableProviders as $provider } 82 | {if in_array($linkContext, ['checkout-existing'])} 83 | {$provider.login_button} 84 | {else} 85 | {$provider.code} 86 | {/if} 87 | {/foreach} 88 |
89 |
90 | 91 | {if !isset($customFeedback) || !$customFeedback} 92 |
93 | {/if} 94 | 95 | {/if} 96 | -------------------------------------------------------------------------------- /marketconnect-promo.tpl: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 | {if $product->isFree()} 6 | {lang key="orderfree"} 7 | {elseif $product->pricing()->first()} 8 | {$product->pricing()->setQuantity($cartItem.qty)->first()->breakdownPrice()} 9 | {/if} 10 |
11 | 19 |
20 |
21 | 22 |
23 |
24 | 25 |
26 |
27 |
{$promotion->getHeadline()}
28 |
{$promotion->getTagline()}
29 |
30 |
31 |
32 | {if $promotion->hasFeatures()} 33 | 41 | {/if} 42 |
43 |
44 | -------------------------------------------------------------------------------- /ordersummary.tpl: -------------------------------------------------------------------------------- 1 | {if $producttotals} 2 | {if $producttotals.allowqty && $producttotals.qty > 1}{$producttotals.qty} x {/if}{$producttotals.productinfo.name} 3 | {$producttotals.productinfo.groupname} 4 | 5 |
6 | {$producttotals.productinfo.name} 7 | {$producttotals.pricing.baseprice} 8 |
9 | 10 | {foreach $producttotals.configoptions as $configoption} 11 | {if $configoption} 12 |
13 |  » {$configoption.name}: {$configoption.optionname} 14 | {$configoption.recurring}{if $configoption.setup} + {$configoption.setup} {$LANG.ordersetupfee}{/if} 15 |
16 | {/if} 17 | {/foreach} 18 | 19 | {foreach $producttotals.addons as $addon} 20 |
21 | + {$addon.name} 22 | {$addon.recurring} 23 |
24 | {/foreach} 25 | 26 | {if $producttotals.pricing.setup || $producttotals.pricing.recurring || $producttotals.pricing.addons} 27 |
28 | {if $producttotals.pricing.setup} 29 |
30 | {$LANG.cartsetupfees}: 31 | {$producttotals.pricing.setup} 32 |
33 | {/if} 34 | {foreach from=$producttotals.pricing.recurringexcltax key=cycle item=recurring} 35 |
36 | {$cycle}: 37 | {$recurring} 38 |
39 | {/foreach} 40 | {if $producttotals.pricing.tax1} 41 |
42 | {$carttotals.taxname} @ {$carttotals.taxrate}%: 43 | {$producttotals.pricing.tax1} 44 |
45 | {/if} 46 | {if $producttotals.pricing.tax2} 47 |
48 | {$carttotals.taxname2} @ {$carttotals.taxrate2}%: 49 | {$producttotals.pricing.tax2} 50 |
51 | {/if} 52 |
53 | {/if} 54 | 55 |
56 | {$producttotals.pricing.totaltoday} 57 | {$LANG.ordertotalduetoday} 58 |
59 | {elseif !empty($renewals) || !empty($serviceRenewals)} 60 | {if !empty($serviceRenewals)} 61 | {if !empty($carttotals.renewalsByType.services)} 62 | {lang key='renewService.titleAltPlural'} 63 | {foreach $carttotals.renewalsByType.services as $serviceId => $serviceRenewal} 64 |
65 |
66 |
67 | {$serviceRenewal.name} 68 |
69 |
70 | {$serviceRenewal.domainName} 71 |
72 |
73 |
74 |
75 | {$serviceRenewal.billingCycle} 76 |
77 |
78 | {$serviceRenewal.recurringBeforeTax} 79 | 80 | 81 | 82 |
83 |
84 |
85 | {/foreach} 86 | {/if} 87 | {if !empty($carttotals.renewalsByType.addons)} 88 | {lang key='renewServiceAddon.titleAltPlural'} 89 | {foreach $carttotals.renewalsByType.addons as $serviceAddonId => $serviceAddonRenewal} 90 |
91 |
92 |
93 | {$serviceAddonRenewal.name} 94 |
95 |
96 | {$serviceAddonRenewal.domainName} 97 |
98 |
99 |
100 |
101 | {$serviceAddonRenewal.billingCycle} 102 |
103 |
104 | {$serviceAddonRenewal.recurringBeforeTax} 105 | 106 | 107 | 108 |
109 |
110 |
111 | {/foreach} 112 | {/if} 113 | {elseif !empty($renewals) && !empty($carttotals.renewalsByType.domains)} 114 | {lang key='domainrenewals'} 115 | {foreach $carttotals.renewalsByType.domains as $domainId => $renewal} 116 |
117 | 118 | {$renewal.domain} - {$renewal.regperiod} {if $renewal.regperiod == 1}{lang key='orderForm.year'}{else}{lang key='orderForm.years'}{/if} 119 | 120 | 121 | {$renewal.priceBeforeTax} 122 | 123 | 124 | 125 | 126 |
127 | {if $renewal.dnsmanagement} 128 |
129 | + {lang key='domaindnsmanagement'} 130 |
131 | {/if} 132 | {if $renewal.emailforwarding} 133 |
134 | + {lang key='domainemailforwarding'} 135 |
136 | {/if} 137 | {if $renewal.idprotection} 138 |
139 | + {lang key='domainidprotection'} 140 |
141 | {/if} 142 | {if $renewal.hasGracePeriodFee} 143 |
144 | + {lang key='domainRenewal.graceFee'} 145 |
146 | {/if} 147 | {if $renewal.hasRedemptionGracePeriodFee} 148 |
149 | + {lang key='domainRenewal.redemptionFee'} 150 |
151 | {/if} 152 | 153 | {/foreach} 154 | {/if} 155 |
156 |
157 | {lang key='ordersubtotal'}: 158 | {$carttotals.subtotal} 159 |
160 | {if ($carttotals.taxrate && $carttotals.taxtotal) || ($carttotals.taxrate2 && $carttotals.taxtotal2)} 161 | {if $carttotals.taxrate} 162 |
163 | {$carttotals.taxname} @ {$carttotals.taxrate}%: 164 | {$carttotals.taxtotal} 165 |
166 | {/if} 167 | {if $carttotals.taxrate2} 168 |
169 | {$carttotals.taxname2} @ {$carttotals.taxrate2}%: 170 | {$carttotals.taxtotal2} 171 |
172 | {/if} 173 | {/if} 174 |
175 |
176 | {$carttotals.total} 177 | {lang key='ordertotalduetoday'} 178 |
179 | {/if} 180 | -------------------------------------------------------------------------------- /products.tpl: -------------------------------------------------------------------------------- 1 | {include file="orderforms/standard_cart/common.tpl"} 2 | 3 |
4 |
5 | 8 |
9 | 10 |
11 |

12 | {if $productGroup.headline} 13 | {$productGroup.headline} 14 | {else} 15 | {$productGroup.name} 16 | {/if} 17 |

18 | {if $productGroup.tagline} 19 |

{$productGroup.tagline}

20 | {/if} 21 |
22 | {if $errormessage} 23 |
24 | {$errormessage} 25 |
26 | {elseif !$productGroup} 27 |
28 | {lang key='orderForm.selectCategory'} 29 |
30 | {/if} 31 | 32 | {include file="orderforms/standard_cart/sidebar-categories-collapsed.tpl"} 33 | 34 |
35 |
36 | {foreach $products as $key => $product} 37 | {$idPrefix = ($product.bid) ? ("bundle"|cat:$product.bid) : ("product"|cat:$product.pid)} 38 |
39 |
40 |
41 | {$product.name} 42 | {if $product.stockControlEnabled} 43 | 44 | {$product.qty} {$LANG.orderavailable} 45 | 46 | {/if} 47 |
48 |
49 | {if $product.featuresdesc} 50 |

51 | {$product.featuresdesc} 52 |

53 | {/if} 54 |
    55 | {foreach $product.features as $feature => $value} 56 |
  • 57 | {$value} 58 | {$feature} 59 |
  • 60 | {/foreach} 61 |
62 |
63 |
64 |
65 | {if $product.bid} 66 | {$LANG.bundledeal}
67 | {if $product.displayprice} 68 | {$product.displayprice} 69 | {/if} 70 | {else} 71 | {if $product.pricing.hasconfigoptions} 72 | {$LANG.startingfrom} 73 |
74 | {/if} 75 | {$product.pricing.minprice.price} 76 |
77 | {if $product.pricing.minprice.cycle eq "monthly"} 78 | {$LANG.orderpaymenttermmonthly} 79 | {elseif $product.pricing.minprice.cycle eq "quarterly"} 80 | {$LANG.orderpaymenttermquarterly} 81 | {elseif $product.pricing.minprice.cycle eq "semiannually"} 82 | {$LANG.orderpaymenttermsemiannually} 83 | {elseif $product.pricing.minprice.cycle eq "annually"} 84 | {$LANG.orderpaymenttermannually} 85 | {elseif $product.pricing.minprice.cycle eq "biennially"} 86 | {$LANG.orderpaymenttermbiennially} 87 | {elseif $product.pricing.minprice.cycle eq "triennially"} 88 | {$LANG.orderpaymenttermtriennially} 89 | {/if} 90 |
91 | {if $product.pricing.minprice.setupFee} 92 | {$product.pricing.minprice.setupFee->toPrefixed()} {$LANG.ordersetupfee} 93 | {/if} 94 | {/if} 95 |
96 | 97 | 98 | {$LANG.ordernowbutton} 99 | 100 |
101 |
102 |
103 | {if $product@iteration % 2 == 0} 104 |
105 |
106 | {/if} 107 | {/foreach} 108 |
109 |
110 |
111 |
112 |
113 | 114 | {include file="orderforms/standard_cart/recommendations-modal.tpl"} 115 | -------------------------------------------------------------------------------- /recommendations-modal.tpl: -------------------------------------------------------------------------------- 1 | {if in_array($templatefile, ['configureproductdomain', 'configureproduct'])} 2 | 3 | {/if} 4 | 54 | -------------------------------------------------------------------------------- /service-renewal-item.tpl: -------------------------------------------------------------------------------- 1 | {foreach $renewableItems as $renewableItem} 2 |
8 |
9 | {if $renewableItem.renewable === false} 10 | 11 | {lang key='renewService.renewalUnavailable'} 12 | 13 | {else} 14 | 15 | {lang key='renewService.renewingIn' days=$renewableItem.nextDueDate->diffInDays()} 16 | 17 | {/if} 18 |
19 |

20 | {$renewableItem.product->name} 21 |

22 |

23 | {$renewableItem.domain} 24 |

25 |

26 | {if is_null($renewableItem.nextDueDate)} 27 | {lang key='renewService.serviceNextDueDateBasic' nextDueDate={lang key='na'}} 28 | {else} 29 | {lang key='renewService.serviceNextDueDateExtended' nextDueDate=$renewableItem.nextDueDate->toClientDateFormat() nextDueDateFormatted=$renewableItem.nextDueDate->diffForHumans()} 30 | {/if} 31 |

32 |
33 |
34 | {if $renewableItem.renewable === false} 35 |
36 | {$renewableItem.reason} 37 |
38 | {else} 39 |
40 | {lang key='renewService.renewalPeriodLabel'} 41 |
42 |
43 | {lang key='renewService.renewalPeriod' nextDueDate=$renewableItem.nextDueDate->toClientDateFormat() nextPayUntilDate=$renewableItem.nextPayUntilDate->toClientDateFormat() renewalPrice=$renewableItem.price} 44 |
45 | {/if} 46 |
47 | {if $renewableItem.renewable === true} 48 | 57 | {/if} 58 |
59 | {if !empty($renewableItem.addons)} 60 |
63 |

Addons

64 |
65 | {include file="orderforms/standard_cart/service-renewal-item.tpl" renewableItems=$renewableItem.addons prefix='a-'} 66 |
67 |
68 | {/if} 69 |
70 | {/foreach} -------------------------------------------------------------------------------- /service-renewals.tpl: -------------------------------------------------------------------------------- 1 | {include file="orderforms/standard_cart/common.tpl"} 2 |
3 |
4 |
5 | {include file="orderforms/standard_cart/sidebar-categories.tpl"} 6 |
7 |
8 |
9 |
10 |

11 | {if $totalResults > 1} 12 | {lang key='renewService.titlePlural'} 13 | {else} 14 | {lang key='renewService.titleSingular'} 15 | {/if} 16 |

17 |
18 |
19 | 27 | {if $totalResults > 5} 28 | 29 | {/if} 30 |
31 |
32 | {include file="orderforms/standard_cart/sidebar-categories-collapsed.tpl"} 33 | {if $totalServiceCount == 0} 34 | 37 |

38 | 39 | 40 | {lang key='orderForm.returnToClientArea'} 41 | 42 |

43 | {else} 44 |
45 |
46 | {if $totalResults < $totalServiceCount} 47 |
48 | {lang key='renewService.showingServices' showing=$totalResults totalCount=$totalServiceCount} 49 | 50 | {lang key='domainRenewal.showAll'} 51 | 52 |
53 | {/if} 54 |
55 | {include file="orderforms/standard_cart/service-renewal-item.tpl" renewableItems=$renewableServices prefix=''} 56 |
57 |
58 |
59 |
60 |
61 |
62 | 63 |
64 |

65 | {lang key='ordersummary'} 66 |

67 |
68 |
69 | 75 |
76 |
77 |
78 | {/if} 79 |
80 |
81 |
82 | 83 | 84 | 85 | 86 | 108 |
109 |
110 | 111 | -------------------------------------------------------------------------------- /sidebar-categories-collapsed.tpl: -------------------------------------------------------------------------------- 1 | 23 | -------------------------------------------------------------------------------- /sidebar-categories-selector.tpl: -------------------------------------------------------------------------------- 1 | {if $panel} 2 |
3 |

4 | {if $panel->hasIcon()} 5 |   6 | {/if} 7 | 8 | {$panel->getLabel()} 9 | 10 | {if $panel->hasBadge()} 11 |  {$panel->getBadge()} 12 | {/if} 13 |

14 |
15 | 16 |
17 |
18 | 36 |
37 |
38 | 39 | {if $panel->hasFooterHtml()} 40 | 43 | {/if} 44 | {/if} 45 | -------------------------------------------------------------------------------- /sidebar-categories.tpl: -------------------------------------------------------------------------------- 1 | {foreach $secondarySidebar as $panel} 2 | 63 | 64 | {if $panel->getExtra('mobileSelect') and $panel->hasChildren()} 65 | {* Mobile Select only supports dropdown menus *} 66 | 69 | {/if} 70 | {/foreach} 71 | -------------------------------------------------------------------------------- /style.css: -------------------------------------------------------------------------------- 1 | /** 2 | * WHMCS Base Order Form Stylesheet 3 | * 4 | * This stylesheet defines the css rules used by the base order form. 5 | * 6 | * @project WHMCS 7 | * @cssdoc version 1.0-pre 8 | * @package WHMCS 9 | * @author WHMCS Limited 10 | * @copyright Copyright (c) WHMCS Limited 2005-2015 11 | * @license http://www.whmcs.com/license/ 12 | * @link http://www.whmcs.com/ 13 | */ 14 | 15 | #order-standard_cart { 16 | margin: 0; 17 | padding: 0 0 40px 0; 18 | } 19 | 20 | #order-standard_cart .field-container { 21 | margin: 0 0 30px 0; 22 | } 23 | 24 | #order-standard_cart label { 25 | font-weight: 300; 26 | color: #666; 27 | font-size: 13px; 28 | } 29 | 30 | #order-standard_cart .info-text-sm { 31 | font-size: 0.85em; 32 | text-align: center; 33 | } 34 | 35 | /** 36 | * Responsive Categories 37 | */ 38 | 39 | #order-standard_cart .categories-collapsed { 40 | margin-top: 20px; 41 | margin-bottom: 20px; 42 | padding: 4px; 43 | background-color: #f8f8f8; 44 | border-radius: 4px; 45 | } 46 | #order-standard_cart .categories-collapsed select { 47 | border: 0; 48 | color: #222; 49 | } 50 | 51 | /* 52 | * Section Dividers 53 | */ 54 | 55 | #order-standard_cart .sub-heading { 56 | height: 0; 57 | border-top: 1px solid #DDD; 58 | text-align: center; 59 | margin-top: 20px; 60 | margin-bottom: 30px; 61 | } 62 | #order-standard_cart .sub-heading span { 63 | display: inline-block; 64 | position: relative; 65 | padding: 0 17px; 66 | top: -11px; 67 | font-size: 16px; 68 | color: #058; 69 | background-color: #fff; 70 | } 71 | 72 | /** 73 | * Products 74 | */ 75 | 76 | #order-standard_cart .products { 77 | margin: 10px 0; 78 | } 79 | 80 | #order-standard_cart .products .product { 81 | padding: 1px 0 10px 0; 82 | margin: 0 0 20px 0; 83 | background: #fff; 84 | border-radius: 3px; 85 | border: 1px solid #ddd; 86 | } 87 | 88 | #order-standard_cart .products .product header { 89 | position: relative; 90 | padding: 10px 20px; 91 | margin: 0 1px; 92 | background: #f8f8f8; 93 | border-radius: 3px 3px 0 0; 94 | } 95 | 96 | #order-standard_cart .products .product header span { 97 | margin: 0; 98 | color: #333; 99 | font-size: 1.2em; 100 | } 101 | 102 | #order-standard_cart .products .product header .qty { 103 | float: right; 104 | font-size: 0.8em; 105 | font-style: italic; 106 | color: #888; 107 | } 108 | 109 | #order-standard_cart .products .product div.product-desc { 110 | float: left; 111 | width: 60%; 112 | padding: 8px 14px; 113 | font-size: 0.8em; 114 | } 115 | 116 | #order-standard_cart .products .product span.feature-value { 117 | font-weight: bold; 118 | } 119 | 120 | #order-standard_cart .products .product div.product-pricing { 121 | margin-bottom: 10px; 122 | } 123 | #order-standard_cart .products .product div.product-pricing span.price { 124 | font-size: 1.4em; 125 | } 126 | 127 | #order-standard_cart .products .product footer { 128 | float: right; 129 | margin: 20px 0; 130 | width: 40%; 131 | font-size: 0.8em; 132 | text-align: center; 133 | } 134 | 135 | /* 136 | * Addon Panels 137 | */ 138 | 139 | #order-standard_cart .panel-addon { 140 | font-size: 0.8em; 141 | text-align: center; 142 | } 143 | #order-standard_cart .panel-addon:hover { 144 | cursor: pointer; 145 | } 146 | #order-standard_cart .panel-addon .panel-body { 147 | border-radius: 4px; 148 | } 149 | #order-standard_cart .panel-addon .panel-body label { 150 | font-size: 1em; 151 | font-weight: bold; 152 | color: #333; 153 | } 154 | #order-standard_cart .panel-addon .panel-price { 155 | padding: 4px; 156 | background-color: #e8e8e8; 157 | } 158 | #order-standard_cart .panel-addon .panel-add { 159 | display: block; 160 | padding: 4px; 161 | background-color: #5cb85c; 162 | color: #fff; 163 | border-radius: 0 0 4px 4px; 164 | } 165 | #order-standard_cart .panel-addon-selected { 166 | border-color: #5cb85c; 167 | } 168 | #order-standard_cart .panel-addon-selected .panel-price { 169 | background-color: #5cb85c; 170 | color: #fff; 171 | } 172 | #order-standard_cart .panel-addon-selected .panel-add { 173 | background-color: #ebccd1; 174 | color: #a94442; 175 | } 176 | 177 | /** 178 | * Domain registration 179 | */ 180 | 181 | #order-standard_cart .domain-selection-options { 182 | margin: 15px 0; 183 | } 184 | #order-standard_cart .domains-row { 185 | margin-right: -2px; 186 | margin-left: -2px; 187 | } 188 | @media (max-width: 767px) { 189 | #order-standard_cart .domains-row { 190 | padding-bottom: 5px; 191 | } 192 | } 193 | #order-standard_cart .domains-row .col-sm-3, 194 | #order-standard_cart .domains-row .col-sm-9, 195 | #order-standard_cart .domains-row .col-xs-2, 196 | #order-standard_cart .domains-row .col-xs-3, 197 | #order-standard_cart .domains-row .col-xs-5, 198 | #order-standard_cart .domains-row .col-xs-7, 199 | #order-standard_cart .domains-row .col-xs-9 { 200 | padding-right: 2px; 201 | padding-left: 2px; 202 | } 203 | 204 | #order-standard_cart .domain-selection-options .option { 205 | margin-bottom: 2px; 206 | padding: 6px 20px; 207 | border-radius: 6px; 208 | background-color: #f8f8f8; 209 | } 210 | #order-standard_cart .domain-selection-options .option:hover { 211 | cursor: pointer; 212 | } 213 | #order-standard_cart .domain-selection-options .option .iradio_square-blue { 214 | margin-right: 10px; 215 | } 216 | #order-standard_cart .domain-suggestions .icheckbox_square-green { 217 | margin-right: 10px; 218 | } 219 | #order-standard_cart .domain-selection-options .option-selected label { 220 | font-weight: bold; 221 | } 222 | #order-standard_cart .domain-selection-options .option-selected { 223 | background-color: #efefef; 224 | } 225 | #order-standard_cart .domain-input-group { 226 | display: none; 227 | margin: 10px 0; 228 | } 229 | #order-standard_cart .domain-loading-spinner { 230 | display: none; 231 | padding: 30px; 232 | text-align: center; 233 | } 234 | 235 | #order-standard_cart .domain-lookup-primary-loader, 236 | #order-standard_cart .domain-lookup-primary-results { 237 | margin: 20px 0; 238 | text-align: center; 239 | } 240 | #order-standard_cart .domain-checker-result-headline, 241 | #order-standard_cart .domain-lookup-primary-results .headline { 242 | font-size: 1.6em; 243 | } 244 | #order-standard_cart .domain-checker-available { 245 | color: #5cb85c; 246 | } 247 | #order-standard_cart .domain-checker-unavailable, 248 | #order-standard_cart .domain-checker-invalid { 249 | color: #d9534f; 250 | } 251 | #order-standard_cart .transfer-eligible, 252 | #order-standard_cart .transfer-not-eligible { 253 | margin: 30px 0 15px; 254 | padding: 20px; 255 | } 256 | #order-standard_cart .transfer-eligible { 257 | color: #3c763d; 258 | background-color: #dff0d8; 259 | border-color: #d6e9c6; 260 | } 261 | #order-standard_cart .transfer-not-eligible { 262 | color: #666; 263 | background-color: #f6f6f6; 264 | } 265 | 266 | #order-standard_cart .domain-suggestions { 267 | margin-bottom: 20px; 268 | font-size: 0.8em; 269 | } 270 | 271 | #order-standard_cart .domain-add-domain { 272 | margin: 25px 0; 273 | } 274 | 275 | /** 276 | * Product Configuration 277 | */ 278 | 279 | #order-standard_cart .product-info { 280 | margin: 0 0 20px 0; 281 | padding: 6px 15px; 282 | font-size: 0.85em; 283 | background-color: #f8f8f8; 284 | border-top: 1px solid #efefef; 285 | border-bottom: 1px solid #efefef; 286 | } 287 | #order-standard_cart .product-info .product-title { 288 | margin: 0; 289 | font-size: 1.6em; 290 | } 291 | 292 | #order-standard_cart .order-summary { 293 | margin: 0 0 20px 0; 294 | padding: 0; 295 | background-color: #666; 296 | border-bottom: 3px solid #666; 297 | border-radius: 4px; 298 | } 299 | 300 | #order-standard_cart .order-summary h2 { 301 | margin: 0; 302 | padding: 10px; 303 | color: #fff; 304 | text-align: center; 305 | font-size: 1.4em; 306 | font-weight: normal; 307 | } 308 | 309 | #order-standard_cart .summary-container { 310 | margin: 0; 311 | padding: 10px; 312 | min-height: 100px; 313 | border-radius: 3px; 314 | background-color: #f8f8f8; 315 | font-size: 0.8em; 316 | } 317 | 318 | #order-standard_cart .order-summary .product-name { 319 | display: block; 320 | font-weight: bold; 321 | font-size: 1.2em; 322 | } 323 | #order-standard_cart .order-summary .product-group { 324 | margin: 0 0 5px 0; 325 | display: block; 326 | font-style: italic; 327 | } 328 | #order-standard_cart .order-summary .summary-totals { 329 | margin: 5px 0; 330 | padding: 5px 0; 331 | border-top: 1px solid #ccc; 332 | border-bottom: 1px solid #ccc; 333 | } 334 | #order-standard_cart .order-summary .total-due-today span { 335 | display: block; 336 | text-align: right; 337 | } 338 | #order-standard_cart .order-summary .total-due-today .amt { 339 | font-size: 2.3em; 340 | } 341 | 342 | #order-standard_cart .order-summary .loader { 343 | position: relative; 344 | top: 10px; 345 | height: 0; 346 | padding-right: 10px; 347 | text-align: right; 348 | color: #efefef; 349 | } 350 | 351 | /** 352 | * View Cart 353 | */ 354 | 355 | #order-standard_cart .panel-taxes { 356 | font-size: 0.8em; 357 | } 358 | 359 | /** 360 | * Checkout 361 | */ 362 | 363 | #order-standard_cart #btnAlreadyRegistered, 364 | #order-standard_cart #btnNewUserSignup { 365 | margin: 0 0 0 10px; 366 | } 367 | 368 | #order-standard_cart .checkout-error-feedback { 369 | margin: 15px 0; 370 | } 371 | 372 | #order-standard_cart .checkout-security-msg { 373 | margin: 20px 0; 374 | padding-left: 75px; 375 | font-size: 0.8em; 376 | } 377 | #order-standard_cart .checkout-security-msg i { 378 | float: left; 379 | margin-left: -48px; 380 | font-size: 2.8em; 381 | } 382 | 383 | /** 384 | * Form fields 385 | */ 386 | 387 | #order-standard_cart .prepend-icon { 388 | top: 0; 389 | left: 0; 390 | display: inline-block; 391 | vertical-align: top; 392 | position: relative; 393 | width: 100%; 394 | font-weight: normal; 395 | } 396 | #order-standard_cart .field, 397 | #order-standard_cart .form-control { 398 | position: relative; 399 | vertical-align: top; 400 | border: 1px solid #DDD; 401 | display: -moz-inline-stack; 402 | display: inline-block; 403 | color: #626262; 404 | outline: none; 405 | background: #fff; 406 | height: 36px; 407 | width: 100%; 408 | border-radius: 3px; 409 | font-size: 13px; 410 | } 411 | #order-standard_cart .input-group-lg > .form-control { 412 | height: 46px; 413 | padding: 10px 16px; 414 | font-size: 18px; 415 | line-height: 1.3333333; 416 | border-radius: 6px 0 0 6px; 417 | } 418 | #order-standard_cart .form-control-qty { 419 | width: 70px; 420 | text-align: center; 421 | } 422 | #order-standard_cart .form-control-static-inline { 423 | display: inline-block; 424 | } 425 | #order-standard_cart .form-control:focus { 426 | border-color: #ddd; 427 | outline: 0; 428 | -webkit-box-shadow: none; 429 | box-shadow: none; 430 | } 431 | #order-standard_cart textarea.field { 432 | height: auto; 433 | } 434 | #order-standard_cart .prepend-icon .field { 435 | padding-left: 36px; 436 | } 437 | #order-standard_cart .prepend-icon .field-icon i { 438 | position: relative; 439 | font-size: 14px; 440 | } 441 | #order-standard_cart .prepend-icon .field-icon { 442 | top: 0; 443 | z-index: 4; 444 | width: 42px; 445 | height: 36px; 446 | color: inherit; 447 | line-height: 36px; 448 | position: absolute; 449 | text-align: center; 450 | -webkit-transition: all 0.5s ease-out; 451 | -moz-transition: all 0.5s ease-out; 452 | -ms-transition: all 0.5s ease-out; 453 | -o-transition: all 0.5s ease-out; 454 | transition: all 0.5s ease-out; 455 | pointer-events: none; 456 | } 457 | #order-standard_cart .field-icon i { 458 | color: #bbb; 459 | } 460 | #order-standard_cart .field[disabled], 461 | #order-standard_cart .field[readonly] { 462 | background-color: #f8f8f8; 463 | opacity: 1; 464 | } 465 | 466 | #order-standard_cart .field-help-text { 467 | display: block; 468 | margin-top: 5px; 469 | margin-bottom: 10px; 470 | color: #888; 471 | font-size: 12px; 472 | } 473 | 474 | /** 475 | * View Cart 476 | */ 477 | 478 | #order-standard_cart .view-cart-items-header { 479 | margin: 0; 480 | padding: 8px 15px; 481 | background-color: #058; 482 | color: #fff; 483 | font-size: 0.9em; 484 | border-radius: 4px 4px 0 0; 485 | } 486 | #order-standard_cart .view-cart-items { 487 | margin: 0 0 20px 0; 488 | border-bottom: 2px solid #058; 489 | } 490 | #order-standard_cart .view-cart-items .item { 491 | margin: 0; 492 | padding: 10px; 493 | background-color: #fff; 494 | border-left: 0; 495 | border-right: 0; 496 | font-size: 0.8em; 497 | } 498 | #order-standard_cart .view-cart-items .item:nth-child(even) { 499 | background-color: #f2f2f2; 500 | } 501 | #order-standard_cart .view-cart-items .item span:not(.caret) { 502 | display: block; 503 | } 504 | #order-standard_cart .view-cart-items .item-title { 505 | font-size: 1.6em; 506 | } 507 | #order-standard_cart .view-cart-items .item-group { 508 | font-size: 1.2em; 509 | } 510 | #order-standard_cart .view-cart-items .item-domain { 511 | color: #056; 512 | } 513 | #order-standard_cart .view-cart-items .item-price { 514 | text-align: right; 515 | } 516 | #order-standard_cart .view-cart-items .item-price span { 517 | font-size: 1.6em; 518 | } 519 | #order-standard_cart .view-cart-items .item-price .cycle { 520 | font-size: 0.9em; 521 | } 522 | #order-standard_cart .view-cart-items .item-qty { 523 | text-align: center; 524 | } 525 | #order-standard_cart .view-cart-items .item-qty input { 526 | margin-bottom: 5px; 527 | padding: 4px; 528 | height: auto; 529 | } 530 | #order-standard_cart .view-cart-items .item-qty button { 531 | font-size: 0.8em; 532 | } 533 | 534 | #order-standard_cart .btn-remove-from-cart { 535 | color: #444; 536 | } 537 | #order-standard_cart .btn-remove-from-cart:hover { 538 | color: #cc0000; 539 | text-decoration: none; 540 | } 541 | 542 | #order-standard_cart .empty-cart { 543 | text-align: right; 544 | margin: -20px 20px 0 0; 545 | line-height: 1em; 546 | } 547 | #order-standard_cart .empty-cart .btn { 548 | margin: 0; 549 | padding: 4px 10px; 550 | background-color: #058; 551 | border: 0; 552 | color: #fff; 553 | border-radius: 0 0 4px 4px; 554 | } 555 | 556 | #order-standard_cart .btn-checkout { 557 | padding: 15px 34px; 558 | } 559 | 560 | #order-standard_cart .order-summary .subtotal { 561 | margin: 0; 562 | padding: 0 0 5px 0; 563 | font-size: 1.2em; 564 | border-bottom: 1px solid #ddd; 565 | } 566 | #order-standard_cart .order-summary .bordered-totals { 567 | margin: 0 0 5px 0; 568 | padding: 5px 0; 569 | border-bottom: 1px solid #ddd; 570 | } 571 | #order-standard_cart .order-summary .recurring-totals { 572 | margin: 5px 0 0 0; 573 | padding: 0; 574 | } 575 | #order-standard_cart .order-summary .total-due-today-padded { 576 | margin: 20px 0; 577 | } 578 | 579 | #order-standard_cart .order-summary .recurring-charges { 580 | font-size: 0.9em; 581 | color: #777; 582 | font-style: italic; 583 | text-align: right; 584 | } 585 | 586 | #order-standard_cart .order-summary .btn-continue-shopping { 587 | color: #222; 588 | font-size: 0.9em; 589 | } 590 | 591 | #order-standard_cart .view-cart-tabs .promo .form-group { 592 | margin-bottom: 5px; 593 | } 594 | 595 | #order-standard_cart .view-cart-tabs { 596 | margin: 0 0 20px 0; 597 | } 598 | #order-standard_cart .view-cart-tabs .nav-tabs { 599 | padding-left: 20px; 600 | font-size: 0.8em; 601 | } 602 | #order-standard_cart .view-cart-tabs .nav-tabs > li.active > a { 603 | background-color: #f8f8f8; 604 | } 605 | #order-standard_cart .view-cart-tabs .tab-content { 606 | background-color: #f8f8f8; 607 | padding: 15px; 608 | } 609 | 610 | #order-standard_cart .view-cart-promotion-code { 611 | margin: 0 0 5px 0; 612 | padding: 10px 20px; 613 | background-color: #fff; 614 | border: 1px dashed #ccc; 615 | text-align: center; 616 | } 617 | 618 | #order-standard_cart .view-cart-gateway-checkout { 619 | margin: 0 0 20px 0; 620 | padding: 15px; 621 | background-color: #e8e8e8; 622 | border-radius: 4px; 623 | text-align: center; 624 | } 625 | 626 | #order-standard_cart .view-cart-empty { 627 | padding: 30px 15px; 628 | text-align: center; 629 | } 630 | 631 | /** 632 | * Completion Page 633 | */ 634 | 635 | #order-standard_cart .order-confirmation { 636 | text-align: center; 637 | } 638 | #order-standard_cart .order-confirmation span { 639 | font-size: 1.4em; 640 | } 641 | #order-standard_cart .order-confirmation-addon-output { 642 | margin: 15px 0; 643 | text-align: center; 644 | } 645 | 646 | /** 647 | * Error Page 648 | */ 649 | 650 | .error-heading { 651 | margin: 30px 0; 652 | font-size: 1.4em; 653 | text-align: center; 654 | } 655 | 656 | /** 657 | * Remove Item Modal 658 | */ 659 | 660 | #order-standard_cart .modal-title i { 661 | display: block; 662 | padding-top: 25px; 663 | } 664 | #order-standard_cart .modal-header, 665 | #order-standard_cart .modal-body, 666 | #order-standard_cart .modal-footer { 667 | text-align: center !important; 668 | border: 0; 669 | } 670 | #order-standard_cart .modal-footer { 671 | padding-bottom: 45px; 672 | } 673 | 674 | /** 675 | * Domain Lookup 676 | */ 677 | 678 | .domain-checker-bg { 679 | padding: 42px 0; 680 | } 681 | 682 | .domain-searching { 683 | color: #ccc; 684 | } 685 | 686 | .domain-lookup-result .btn { 687 | width: 100px; 688 | } 689 | 690 | .spotlight-tlds { 691 | margin: 15px 0; 692 | padding: 7px 14px; 693 | background-color: #f8f8f8; 694 | } 695 | .spotlight-tlds-container { 696 | margin-left: -7px; 697 | margin-right: -7px; 698 | } 699 | .spotlight-tld-container { 700 | float: left; 701 | padding: 7px 7px; 702 | } 703 | .spotlight-tld-container-1 { 704 | width: 100%; 705 | } 706 | .spotlight-tld-container-2 { 707 | width: 50%; 708 | } 709 | .spotlight-tld-container-3 { 710 | width: 33.3%; 711 | } 712 | .spotlight-tld-container-4 { 713 | width: 25%; 714 | } 715 | .spotlight-tld-container-5 { 716 | width: 20%; 717 | } 718 | .spotlight-tld-container-6 { 719 | width: 16.6%; 720 | } 721 | .spotlight-tld-container-7 { 722 | width: 14.28%; 723 | } 724 | .spotlight-tld-container-8 { 725 | width: 12.5%; 726 | } 727 | 728 | @media screen and (max-width: 991px) { 729 | .spotlight-tld-container-5, 730 | .spotlight-tld-container-6 { 731 | width: 33.3%; 732 | } 733 | .spotlight-tld-container-7, 734 | .spotlight-tld-container-8 { 735 | width: 25%; 736 | } 737 | } 738 | @media screen and (max-width: 580px) { 739 | .spotlight-tld-container-3, 740 | .spotlight-tld-container-4, 741 | .spotlight-tld-container-5, 742 | .spotlight-tld-container-6, 743 | .spotlight-tld-container-7, 744 | .spotlight-tld-container-8 { 745 | width: 50%; 746 | } 747 | } 748 | 749 | .spotlight-tld { 750 | position: relative; 751 | overflow: hidden; 752 | margin: 0; 753 | padding: 15px 0; 754 | height: 112px; 755 | background-color: #fff; 756 | border: 1px solid #ddd; 757 | border-radius: 5px; 758 | text-align: center; 759 | font-weight: bold; 760 | color: #555; 761 | } 762 | .spotlight-tld span { 763 | display: block; 764 | padding: 5px 0; 765 | font-weight: normal; 766 | } 767 | .spotlight-tld .btn { 768 | padding: 2px 10px; 769 | font-size: 12px; 770 | line-height: 1.5; 771 | border-radius: 3px; 772 | background-color: #555; 773 | border-color: #333; 774 | color: #fff; 775 | width: 88px; 776 | } 777 | .spotlight-tld .btn span { 778 | padding: 0; 779 | } 780 | .spotlight-tld .unavailable, 781 | .spotlight-tld .invalid { 782 | margin: 19px 0; 783 | background-color: #eee; 784 | border-color: #ddd; 785 | color: #bbb; 786 | } 787 | .spotlight-tld .domain-lookup-spotlight-loader { 788 | line-height: 47px; 789 | font-size: 1.4em; 790 | } 791 | .spotlight-tld .results { 792 | display: none; 793 | } 794 | .spotlight-tld-new:before { 795 | content: 'NEW'; 796 | width: 60px; 797 | position: absolute; 798 | letter-spacing: 1px; 799 | padding: 3px; 800 | font-size: x-small; 801 | font-weight: bold; 802 | color: #fff; 803 | top: 3px; 804 | right: -18px; 805 | background-color: #2ad588; 806 | transform: rotate(45deg); 807 | -webkit-transform: rotate(45deg); 808 | } 809 | .spotlight-tld-sale:before { 810 | content: 'SALE'; 811 | width: 60px; 812 | position: absolute; 813 | letter-spacing: 0; 814 | padding: 3px; 815 | font-size: x-small; 816 | font-weight: bold; 817 | color: #fff; 818 | top: 3px; 819 | right: -18px; 820 | background-color: #f7d458; 821 | transform: rotate(45deg); 822 | -webkit-transform: rotate(45deg); 823 | } 824 | .spotlight-tld-hot:before { 825 | content: 'HOT'; 826 | width: 60px; 827 | position: absolute; 828 | letter-spacing: 0; 829 | padding: 3px; 830 | font-size: x-small; 831 | font-weight: bold; 832 | color: #fff; 833 | top: 3px; 834 | right: -18px; 835 | background-color: #f9615a; 836 | transform: rotate(45deg); 837 | -webkit-transform: rotate(45deg); 838 | } 839 | 840 | .suggested-domains .panel-heading { 841 | border-bottom: 2px solid #62cb31; 842 | } 843 | .suggested-domains .domain-lookup-suggestions-loader { 844 | padding: 30px 20px; 845 | background-color: #f8f8f8; 846 | font-size: 0.9em; 847 | text-align: center; 848 | opacity: 0.7; 849 | } 850 | .suggested-domains .list-group-item { 851 | border-left: 0; 852 | border-right: 0; 853 | } 854 | .suggested-domains .extension { 855 | font-weight: bold; 856 | } 857 | .suggested-domains .promo.hot { 858 | padding: 2px 8px; 859 | background-color: #f9615a; 860 | color: #fff; 861 | } 862 | .suggested-domains .promo.sale { 863 | padding: 2px 8px; 864 | background-color: #f7d458; 865 | color: #fff; 866 | } 867 | .suggested-domains .promo.new { 868 | padding: 2px 8px; 869 | background-color: #2ad588; 870 | color: #fff; 871 | } 872 | .suggested-domains .price { 873 | float: right; 874 | padding: 0 20px; 875 | font-size: 1.2em; 876 | } 877 | .suggested-domains .btn { 878 | float: right; 879 | padding: 2px 10px; 880 | font-size: 11px; 881 | line-height: 1.4; 882 | border-radius: 3px; 883 | background-color: #555; 884 | border-color: #333; 885 | color: #fff; 886 | width: 85px; 887 | } 888 | 889 | .domain-promo-box { 890 | margin-top: 20px; 891 | margin-bottom: 20px; 892 | padding: 20px; 893 | background-color: #f9f9f9; 894 | border: 1px solid #ddd; 895 | color: #333; 896 | border-radius: 4px; 897 | } 898 | .domain-promo-box h3 { 899 | margin: 0; 900 | font-weight: 400; 901 | } 902 | .domain-promo-box i { 903 | float: right; 904 | } 905 | .domain-promo-box p { 906 | margin: 0 0 10px 0; 907 | font-size: 0.85em; 908 | } 909 | .domain-promo-box .small { 910 | margin: 10px 0 0 0; 911 | color: #999; 912 | } 913 | 914 | .btn-transfer { 915 | min-width: 100px; 916 | } 917 | 918 | .slim-alert { 919 | margin: 0 0 5px 0; 920 | padding: 5px; 921 | text-align: center; 922 | } 923 | 924 | .domain-suggestions-warning { 925 | padding: 10px 0; 926 | font-size: 0.7em; 927 | } 928 | 929 | /** 930 | * ------------------------- 931 | * Domain Checker Captchas 932 | * ------------------------- 933 | */ 934 | 935 | #order-standard_cart .default-captcha { 936 | margin: 0 auto 6px auto; 937 | padding: 10px; 938 | max-width: 340px; 939 | background-color: #F9F9F9; 940 | border: 1px solid #d3d3d3; 941 | color: #888; 942 | border-radius: 3px; 943 | box-shadow: 0px 0px 4px 1px rgba(0,0,0,0.08); 944 | -webkit-box-shadow: 0px 0px 4px 1px rgba(0,0,0,0.08); 945 | -moz-box-shadow: 0px 0px 4px 1px rgba(0,0,0,0.08); 946 | text-align: center; 947 | font-size: 0.9em; 948 | } 949 | #order-standard_cart .default-captcha-register-margin { 950 | margin: 18px auto -25px auto; 951 | } 952 | 953 | #order-standard_cart .captcha-container p { 954 | margin-bottom: 5px; 955 | } 956 | #order-standard_cart .captcha-container img { 957 | margin-top: 3px; 958 | } 959 | #order-standard_cart .captcha-container .form-control { 960 | height: inherit; 961 | max-width: 90px; 962 | text-align: center; 963 | } 964 | 965 | #order-standard_cart .captcha-container #google-recaptcha { 966 | width: 304px; 967 | height: 100px; 968 | margin-top: 15px; 969 | margin-bottom: -50px; 970 | } 971 | #order-standard_cart .captcha-container #google-recaptcha.recaptcha-transfer { 972 | margin-bottom: -20px; 973 | } 974 | 975 | @media (max-width: 991px) { 976 | #order-standard_cart .captcha-container #google-recaptcha { 977 | padding-left: 2.5%; 978 | margin-bottom: -25px; 979 | } 980 | } 981 | @media (max-width: 736px) { 982 | #order-standard_cart .captcha-container #google-recaptcha { 983 | margin-bottom: -35px; 984 | transform: scale(0.935); 985 | transform-origin: 0 0; 986 | -webkit-transform: scale(0.935); 987 | -webkit-transform-origin: 0 0; 988 | } 989 | } 990 | @media (max-width: 384px) { 991 | #order-standard_cart .captcha-container #google-recaptcha { 992 | margin-bottom: -30px; 993 | transform: scale(0.96); 994 | transform-origin: 0 0; 995 | } 996 | } 997 | @media (max-width: 360px) { 998 | #order-standard_cart .captcha-container #google-recaptcha { 999 | margin-bottom: -35px; 1000 | transform: scale(0.89); 1001 | transform-origin: 0 0; 1002 | } 1003 | } 1004 | @media (max-width: 320px) { 1005 | #order-standard_cart .captcha-container #google-recaptcha { 1006 | padding-left: 13.5%; 1007 | margin-bottom: -45px; 1008 | transform: scale(0.83); 1009 | transform-origin: 0 0; 1010 | -webkit-transform: scale(0.785); 1011 | -webkit-transform-origin: 0 0; 1012 | } 1013 | } 1014 | -------------------------------------------------------------------------------- /theme.yaml: -------------------------------------------------------------------------------- 1 | dependencies: 2 | bootstrap: 3||4 3 | jquery: 1.12 4 | fontawesome: 5 5 | -------------------------------------------------------------------------------- /thumbnail.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WHMCS/orderforms-standard_cart/9678759afc84818afcb2fc1c32813b3a79a4a0b1/thumbnail.gif --------------------------------------------------------------------------------