Merge branch 'master' into task/3848/ungleich_page_optimize
This commit is contained in:
		
				commit
				
					
						801c840a4d
					
				
			
		
					 58 changed files with 1667 additions and 616 deletions
				
			
		
							
								
								
									
										11
									
								
								Changelog
									
										
									
									
									
								
							
							
						
						
									
										11
									
								
								Changelog
									
										
									
									
									
								
							|  | @ -1,7 +1,16 @@ | ||||||
| Next release: | 1.2.8: 2017-10-21 | ||||||
|  |     * Remove ALLOWED_HOST alplora.ch | ||||||
|  |     * Add ALLOWED_HOST hack4glarus.ch | ||||||
|  |     * Fetch page_title and meta_description dynamically in glasfaser CMS template | ||||||
|  | 1.2.7: 2017-10-20 | ||||||
|     * Bugfix: [dcl, hosting] Fix Stripe js error in confirm payment page |     * Bugfix: [dcl, hosting] Fix Stripe js error in confirm payment page | ||||||
|     * #3847: [ungleich] change text 'hosting products' -> 'our products' |     * #3847: [ungleich] change text 'hosting products' -> 'our products' | ||||||
|     * #3829: [dcl] Handle landing login fail in payment page itself |     * #3829: [dcl] Handle landing login fail in payment page itself | ||||||
|  |     * #3794: [dcl, hosting] Update email styles | ||||||
|  |     * #3828: [dcl, hosting] invoice period set to show monthly subscription | ||||||
|  |     * #3838: [hosting] restyle signup/login/password reset/password pages | ||||||
|  |     * Bugfix: [dg] Remove validate email link in the registration email | ||||||
|  |     * Feature: [ungleich_page] Add new glasfaser CMS template | ||||||
| 1.2.6: 2017-10-10 | 1.2.6: 2017-10-10 | ||||||
|     * Bugfix: [dcl] Refactor and optimize images, links in glasfaser page |     * Bugfix: [dcl] Refactor and optimize images, links in glasfaser page | ||||||
|     * Bugfix: [dcl] Fix email not being sent issue |     * Bugfix: [dcl] Fix email not being sent issue | ||||||
|  |  | ||||||
|  | @ -8,7 +8,7 @@ msgid "" | ||||||
| msgstr "" | msgstr "" | ||||||
| "Project-Id-Version: PACKAGE VERSION\n" | "Project-Id-Version: PACKAGE VERSION\n" | ||||||
| "Report-Msgid-Bugs-To: \n" | "Report-Msgid-Bugs-To: \n" | ||||||
| "POT-Creation-Date: 2017-10-10 21:35+0530\n" | "POT-Creation-Date: 2017-10-16 00:57+0530\n" | ||||||
| "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | ||||||
| "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | ||||||
| "Language-Team: LANGUAGE <LL@li.org>\n" | "Language-Team: LANGUAGE <LL@li.org>\n" | ||||||
|  | @ -126,56 +126,57 @@ msgstr "" | ||||||
| msgid "Thank you!" | msgid "Thank you!" | ||||||
| msgstr "Vielen Dank!" | msgstr "Vielen Dank!" | ||||||
| 
 | 
 | ||||||
| msgid "Account Activation" | msgid "Data Center Light Account Activation" | ||||||
| msgstr "Account Aktivierung" | msgstr "Data Center Light Account Aktivierung" | ||||||
| 
 | 
 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "" | msgid "" | ||||||
| "\n" | "You can activate your Data Center Light account by clicking <a href=" | ||||||
| "You can activate your Data Center Light account by <a href=\"%(base_url)s" | "\"%(base_url)s%(activation_link)s\" style=\"text-decoration: none; color: " | ||||||
| "%(activation_link)s\">clicking here</a>.<br/>\n" | "#4382c8; font-weight: 400;\">here</a>." | ||||||
|  | msgstr "" | ||||||
|  | "Klicke <a href=\"%(base_url)s%(activation_link)s\"style=\"text-decoration: " | ||||||
|  | "none; color: #4382c8; font-weight: 400;\">here</a> um deinen Data Center " | ||||||
|  | "Light Account zu aktivieren." | ||||||
|  | 
 | ||||||
|  | msgid "" | ||||||
| "You can also copy and paste the following link into the address bar of your " | "You can also copy and paste the following link into the address bar of your " | ||||||
| "browser<br/>\n" | "browser to activate your Data Center Light account." | ||||||
| "to activate your Data Center Light account.<br/>\n" | msgstr "Kopiere den folgenden Link in die Adressleiste deines Browsers." | ||||||
| "%(base_url)s%(activation_link)s\n" |  | ||||||
| msgstr "" |  | ||||||
| "\n" |  | ||||||
| "<a href=\"%(base_url)s%(activation_link)s\">Klicke hier</a> um deinen Data " |  | ||||||
| "Center Light Account zu aktivieren oder kopiere den folgenden Link in die " |  | ||||||
| "Adressleiste deines Browsers.<br/>\n" |  | ||||||
| "%(base_url)s%(activation_link)s\n" |  | ||||||
| 
 | 
 | ||||||
| #, python-format | msgid "Your account details are as follows" | ||||||
| msgid "" | msgstr "Deine Account Details sind unten aufgelistet" | ||||||
| "Your account details are as follows:<br/><br/>\n" |  | ||||||
| "Username : Your email address<br/>\n" |  | ||||||
| "Password : %(account_details)s<br/><br/>\n" |  | ||||||
| "You can reset your password here:\n" |  | ||||||
| "%(base_url)s%(reset_password_url)s\n" |  | ||||||
| msgstr "" |  | ||||||
| 
 | 
 | ||||||
| #, python-format | msgid "Username" | ||||||
| msgid "" | msgstr "Username" | ||||||
| "You can activate your Data Center Light account by clicking here.\n" | 
 | ||||||
| "You can also copy and paste the following link into the address bar of your " | msgid "Your email address" | ||||||
| "browser\n" | msgstr "Deine E-Mail-Adresse" | ||||||
| "to activate your Data Center Light account.\n" | 
 | ||||||
| "%(base_url)s%(activation_link)s\n" | msgid "Password" | ||||||
| msgstr "" | msgstr "Passwort" | ||||||
| "Klicke hier, um deinen Data Center Light Account zu aktivieren oder kopiere " | 
 | ||||||
| "den folgenden Link in die Adressleiste deines Browsers.\n" | msgid "You can reset your password here" | ||||||
| "%(base_url)s%(activation_link)s\n" | msgstr "Du kannst dein Passwort hier zurück setzen" | ||||||
| 
 | 
 | ||||||
| #, python-format |  | ||||||
| msgid "" | msgid "" | ||||||
| "Your account details are as follows:\n" | "You can copy and paste the following link into the address bar of your " | ||||||
| "\n" | "browser to activate your Data Center Light account." | ||||||
| "Username : Your email address\n" | msgstr "Kopiere den folgenden Link in die Adressleiste deines Browsers." | ||||||
| "Password : %(account_details)s\n" | 
 | ||||||
| "\n" | msgid "Welcome to Data Center Light!" | ||||||
| "You can reset your password here:\n" | msgstr "Willkommen beim Data Center Light!" | ||||||
| "%(base_url)s%(reset_password_url)s\n" | 
 | ||||||
| msgstr "" | msgid "" | ||||||
|  | "Thanks for joining us! We provide the most affordable virtual machines from " | ||||||
|  | "the heart of Switzerland." | ||||||
|  | msgstr "Bei uns findest Du die günstiges VMs aus der Schweiz." | ||||||
|  | 
 | ||||||
|  | msgid "Try now, order a VM. VM price starts from only 15CHF per month." | ||||||
|  | msgstr "Unser Angebot beginnt bei 15 CHF pro Monat. Probier's jetzt aus!" | ||||||
|  | 
 | ||||||
|  | msgid "ORDER VM" | ||||||
|  | msgstr "VM BESTELLEN" | ||||||
| 
 | 
 | ||||||
| msgid "Home" | msgid "Home" | ||||||
| msgstr "Home" | msgstr "Home" | ||||||
|  | @ -512,6 +513,15 @@ msgstr "" | ||||||
| "Deine VM ist gleich bereit. Wir senden Dir eine Bestätigungsemail, sobald Du " | "Deine VM ist gleich bereit. Wir senden Dir eine Bestätigungsemail, sobald Du " | ||||||
| "auf sie zugreifen kannst." | "auf sie zugreifen kannst." | ||||||
| 
 | 
 | ||||||
|  | #~ msgid "Processing..." | ||||||
|  | #~ msgstr "Abarbeitung..." | ||||||
|  | 
 | ||||||
|  | #~ msgid "Hold tight, we are processing your request" | ||||||
|  | #~ msgstr "Bitte warten - wir verbeiten Deine Anfrage gerade" | ||||||
|  | 
 | ||||||
|  | #~ msgid "Some problem encountered. Please try again later." | ||||||
|  | #~ msgstr "Ein Problem ist aufgetreten. Bitte versuche es später noch einmal." | ||||||
|  | 
 | ||||||
| #~ msgid "Submit" | #~ msgid "Submit" | ||||||
| #~ msgstr "Absenden" | #~ msgstr "Absenden" | ||||||
| 
 | 
 | ||||||
|  | @ -530,15 +540,6 @@ msgstr "" | ||||||
| #~ msgid "Order summary" | #~ msgid "Order summary" | ||||||
| #~ msgstr "Bestellungsübersicht" | #~ msgstr "Bestellungsübersicht" | ||||||
| 
 | 
 | ||||||
| #~ msgid "Processing..." |  | ||||||
| #~ msgstr "Abarbeitung..." |  | ||||||
| 
 |  | ||||||
| #~ msgid "Hold tight, we are processing your request" |  | ||||||
| #~ msgstr "Bitte warten - wir verbeiten Deine Anfrage gerade" |  | ||||||
| 
 |  | ||||||
| #~ msgid "Some problem encountered. Please try again later." |  | ||||||
| #~ msgstr "Ein Problem ist aufgetreten. Bitte versuche es später noch einmal." |  | ||||||
| 
 |  | ||||||
| #~ msgid "We are cutting down the costs significantly!" | #~ msgid "We are cutting down the costs significantly!" | ||||||
| #~ msgstr "Wir sorgen dafür, dass die Kosten für Dich signifikant abnehmen" | #~ msgstr "Wir sorgen dafür, dass die Kosten für Dich signifikant abnehmen" | ||||||
| 
 | 
 | ||||||
|  | @ -560,9 +561,6 @@ msgstr "" | ||||||
| #~ "kontaktiere uns unter support@datacenterlight.ch. Unser Team wird sich " | #~ "kontaktiere uns unter support@datacenterlight.ch. Unser Team wird sich " | ||||||
| #~ "umgehend um dein Anliegen kümmern!" | #~ "umgehend um dein Anliegen kümmern!" | ||||||
| 
 | 
 | ||||||
| #~ msgid "Email Address" |  | ||||||
| #~ msgstr "E-Mail-Adresse" |  | ||||||
| 
 |  | ||||||
| #~ msgid "is not a proper name" | #~ msgid "is not a proper name" | ||||||
| #~ msgstr "ist kein gültiger Name" | #~ msgstr "ist kein gültiger Name" | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -182,7 +182,11 @@ button, input, optgroup, select, textarea { | ||||||
| 
 | 
 | ||||||
| .navbar-brand { | .navbar-brand { | ||||||
|     padding: 10px 15px; |     padding: 10px 15px; | ||||||
|     cursor: pointer; | } | ||||||
|  | @media (max-width: 767px) { | ||||||
|  |     .navbar-brand { | ||||||
|  |         padding: 10px 10px; | ||||||
|  |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .navbar-right { | .navbar-right { | ||||||
|  | @ -1544,7 +1548,7 @@ tech-sub-sec h2 { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| footer { | footer { | ||||||
|     padding: 50px 0; |     padding: 50px 20px; | ||||||
|     background-color: #f8f8f8; |     background-color: #f8f8f8; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										
											BIN
										
									
								
								datacenterlight/static/datacenterlight/img/logo_black.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								datacenterlight/static/datacenterlight/img/logo_black.png
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 7.3 KiB | 
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 181 KiB After Width: | Height: | Size: 58 KiB | 
|  | @ -5,6 +5,7 @@ from celery.utils.log import get_task_logger | ||||||
| from celery import current_task | from celery import current_task | ||||||
| from django.conf import settings | from django.conf import settings | ||||||
| from django.core.mail import EmailMessage | from django.core.mail import EmailMessage | ||||||
|  | from django.core.urlresolvers import reverse | ||||||
| from django.utils import translation | from django.utils import translation | ||||||
| from django.utils.translation import ugettext_lazy as _ | from django.utils.translation import ugettext_lazy as _ | ||||||
| 
 | 
 | ||||||
|  | @ -131,9 +132,9 @@ def create_vm_task(self, vm_template_id, user, specs, template, | ||||||
|             'storage': specs.get('disk_size'), |             'storage': specs.get('disk_size'), | ||||||
|             'price': specs.get('price'), |             'price': specs.get('price'), | ||||||
|             'template': template.get('name'), |             'template': template.get('name'), | ||||||
|             'vm.name': vm['name'], |             'vm_name': vm.get('name'), | ||||||
|             'vm.id': vm['vm_id'], |             'vm_id': vm['vm_id'], | ||||||
|             'order.id': order.id |             'order_id': order.id | ||||||
|         } |         } | ||||||
|         email_data = { |         email_data = { | ||||||
|             'subject': settings.DCL_TEXT + " Order from %s" % context['email'], |             'subject': settings.DCL_TEXT + " Order from %s" % context['email'], | ||||||
|  | @ -155,13 +156,14 @@ def create_vm_task(self, vm_template_id, user, specs, template, | ||||||
|             translation.activate(lang) |             translation.activate(lang) | ||||||
|             # Send notification to the user as soon as VM has been booked |             # Send notification to the user as soon as VM has been booked | ||||||
|             context = { |             context = { | ||||||
|                 'vm': vm, |  | ||||||
|                 'order': order, |  | ||||||
|                 'base_url': "{0}://{1}".format(user.get('request_scheme'), |                 'base_url': "{0}://{1}".format(user.get('request_scheme'), | ||||||
|                                                user.get('request_host')), |                                                user.get('request_host')), | ||||||
|  |                 'order_url': reverse('hosting:orders', | ||||||
|  |                                      kwargs={'pk': order.id}), | ||||||
|                 'page_header': _( |                 'page_header': _( | ||||||
|                     'Your New VM %(vm_name)s at Data Center Light') % { |                     'Your New VM %(vm_name)s at Data Center Light') % { | ||||||
|                                    'vm_name': vm.get('name')} |                     'vm_name': vm.get('name')}, | ||||||
|  |                 'vm_name': vm.get('name') | ||||||
|             } |             } | ||||||
|             email_data = { |             email_data = { | ||||||
|                 'subject': context.get('page_header'), |                 'subject': context.get('page_header'), | ||||||
|  |  | ||||||
|  | @ -1,24 +1,58 @@ | ||||||
| {% extends "datacenterlight/emails/base_email_datacenterlight.html" %} | {% load static i18n %} | ||||||
| {% load static from staticfiles %} | <!DOCTYPE html> | ||||||
| {% load i18n %} | <html> | ||||||
| {% block email_head %} | 
 | ||||||
| {{dcl_text}} {% trans 'Account Activation' %} | <head> | ||||||
| {% endblock %} |     <meta charset="UTF-8"> | ||||||
| {% block email_body %} |     <meta name="viewport" content="width=device-width, initial-scale=1"> | ||||||
| {% blocktrans %} |     <title>{% trans "Data Center Light Account Activation" %}</title> | ||||||
| You can activate your Data Center Light account by <a href="{{base_url}}{{activation_link}}">clicking here</a>.<br/> |     <link rel="shortcut icon" href="{{ base_url }}{% static 'datacenterlight/img/favicon.ico' %}" type="image/x-icon"> | ||||||
| You can also copy and paste the following link into the address bar of your browser<br/> |     <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:300,400"> | ||||||
| to activate your Data Center Light account.<br/> | </head> | ||||||
| {{base_url}}{{activation_link}} | 
 | ||||||
| {% endblocktrans %} | <body style="margin: 0; padding: 20px 0;"> | ||||||
| {% if account_details %} |     <table style="width: 100%; border-spacing: 0; border-collapse: collapse; max-width: 560px;"> | ||||||
| {% url 'hosting:reset_password' as reset_password_url %} |         <tr> | ||||||
| <br/><br/> |             <td> | ||||||
| {% blocktrans %}Your account details are as follows:<br/><br/> |                 <img src="{{ base_url }}{% static 'datacenterlight/img/logo_black.png' %}" style="width: 200px; height: 50px;"> | ||||||
| Username : Your email address<br/> |             </td> | ||||||
| Password : {{account_details}}<br/><br/> |         </tr> | ||||||
| You can reset your password here: |         <tr> | ||||||
| {{base_url}}{{reset_password_url}} |             <td style="padding-top: 15px;"> | ||||||
| {% endblocktrans %} |                 <h1 style="font-family: Lato, Arial, sans-serif; font-size: 25px; font-weight: 400; margin: 0;">{% trans "Data Center Light Account Activation" %}</h1> | ||||||
| {% endif %} |             </td> | ||||||
| {% endblock %} |         </tr> | ||||||
|  |         <tr> | ||||||
|  |             <td style="padding-top: 25px; font-size: 16px;"> | ||||||
|  |                 <p style="line-height: 1.75; font-family: Lato, Arial, sans-serif; font-weight: 300; margin-bottom: 10px; margin-top: 0;"> | ||||||
|  |                     {% blocktrans %}You can activate your Data Center Light account by clicking <a href="{{base_url}}{{activation_link}}" style="text-decoration: none; color: #4382c8; font-weight: 400;">here</a>.{% endblocktrans %} | ||||||
|  |                 </p> | ||||||
|  |                 <p style="line-height: 1.75; font-family: Lato, Arial, sans-serif; font-weight: 300; margin-bottom: 10px; margin-top: 0;"> | ||||||
|  |                     {% blocktrans %}You can also copy and paste the following link into the address bar of your browser to activate your Data Center Light account.{% endblocktrans %} | ||||||
|  |                 </p> | ||||||
|  |                 <p style="color: #4382c8; line-height: 1.4; font-family: Lato, Arial, sans-serif; font-weight: 300; margin: 0;"> | ||||||
|  |                     {{base_url}}{{activation_link}} | ||||||
|  |                 </p> | ||||||
|  |                 <p> | ||||||
|  |                     {% if account_details %} | ||||||
|  |                         {% url 'hosting:reset_password' as reset_password_url %} | ||||||
|  |                         {% trans "Your account details are as follows" %}: | ||||||
|  | 
 | ||||||
|  |                         {% trans "Username" %} : {% trans "Your email address" %} | ||||||
|  |                         {% trans "Password" %} : {{account_details}} | ||||||
|  | 
 | ||||||
|  |                         {% trans "You can reset your password here" %}: | ||||||
|  |                         {{base_url}}{{reset_password_url}} | ||||||
|  |                     {% endif %} | ||||||
|  |                 </p> | ||||||
|  |             </td> | ||||||
|  |         </tr> | ||||||
|  |         <tr> | ||||||
|  |             <td style="padding-top: 40px; padding-bottom: 25px;"> | ||||||
|  |                 <h3 style="font-family: Lato, Arial, sans-serif; margin: 0; font-weight: 400; font-size: 15px;">{% trans "Your Data Center Light Team" %}</h3> | ||||||
|  |             </td> | ||||||
|  |         </tr> | ||||||
|  |     </table> | ||||||
|  | </body> | ||||||
|  | 
 | ||||||
|  | </html> | ||||||
|  |  | ||||||
|  | @ -1,21 +1,20 @@ | ||||||
| {% extends "datacenterlight/emails/base_email_datacenterlight.txt" %} |  | ||||||
| {% load i18n %} | {% load i18n %} | ||||||
| {% block email_head %}{{dcl_text}} {% trans 'Account Activation' %}{% endblock %} | 
 | ||||||
| {% block email_body %} | {% trans "Data Center Light Account Activation" %} | ||||||
| {% blocktrans %}You can activate your Data Center Light account by clicking here. | 
 | ||||||
| You can also copy and paste the following link into the address bar of your browser | {% blocktrans %}You can copy and paste the following link into the address bar of your browser to activate your Data Center Light account.{% endblocktrans %} | ||||||
| to activate your Data Center Light account. | 
 | ||||||
| {{base_url}}{{activation_link}} | {{base_url}}{{activation_link}} | ||||||
| {% endblocktrans %} | 
 | ||||||
| {% if account_details %} | {% if account_details %} | ||||||
| {% url 'hosting:reset_password' as reset_password_url %} |     {% url 'hosting:reset_password' as reset_password_url %} | ||||||
| {% blocktrans %}Your account details are as follows: |     {% trans "Your account details are as follows" %}: | ||||||
| 
 | 
 | ||||||
| Username : Your email address |     {% trans "Username" %} : {% trans "Your email address" %} | ||||||
| Password : {{account_details}} |     {% trans "Password" %} : {{account_details}} | ||||||
| 
 | 
 | ||||||
| You can reset your password here: |     {% trans "You can reset your password here" %}: | ||||||
| {{base_url}}{{reset_password_url}} |     {{base_url}}{{reset_password_url}} | ||||||
| {% endblocktrans %} |  | ||||||
| {% endif %} | {% endif %} | ||||||
| {% endblock %} | 
 | ||||||
|  | {% trans "Your Data Center Light Team" %} | ||||||
|  | @ -0,0 +1,48 @@ | ||||||
|  | {% load static i18n %} | ||||||
|  | <!DOCTYPE html> | ||||||
|  | <html> | ||||||
|  | 
 | ||||||
|  | <head> | ||||||
|  |     <meta charset="UTF-8"> | ||||||
|  |     <meta name="viewport" content="width=device-width, initial-scale=1"> | ||||||
|  |     <title>{% trans "Welcome to Data Center Light!" %}</title> | ||||||
|  |     <link rel="shortcut icon" href="{{ base_url }}{% static 'datacenterlight/img/favicon.ico' %}" type="image/x-icon"> | ||||||
|  |     <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:300,400"> | ||||||
|  | </head> | ||||||
|  | 
 | ||||||
|  | <body style="margin: 0; padding: 20px 0;"> | ||||||
|  |     <table style="width: 100%; border-spacing: 0; border-collapse: collapse; max-width: 560px;"> | ||||||
|  |         <tr> | ||||||
|  |             <td> | ||||||
|  |                 <img src="{{ base_url }}{% static 'datacenterlight/img/logo_black.png' %}" style="width: 200px; height: 50px;"> | ||||||
|  |             </td> | ||||||
|  |         </tr> | ||||||
|  |         <tr> | ||||||
|  |             <td style="padding-top: 15px;"> | ||||||
|  |                 <h1 style="font-family: Lato, Arial, sans-serif; font-size: 25px; font-weight: 400; margin: 0;">{% trans "Welcome to Data Center Light!" %}</h1> | ||||||
|  |             </td> | ||||||
|  |         </tr> | ||||||
|  |         <tr> | ||||||
|  |             <td style="padding-top: 25px; font-size: 16px;"> | ||||||
|  |                 <p style="line-height: 1.75; font-family: Lato, Arial, sans-serif; font-weight: 300; margin: 0;"> | ||||||
|  |                     {% blocktrans %}Thanks for joining us! We provide the most affordable virtual machines from the heart of Switzerland.{% endblocktrans %} | ||||||
|  |                 </p> | ||||||
|  |                 <p style="line-height: 1.75; font-family: Lato, Arial, sans-serif; font-weight: 300; margin: 0;"> | ||||||
|  |                     {% blocktrans %}Try now, order a VM. VM price starts from only 15CHF per month.{% endblocktrans %} | ||||||
|  |                 </p> | ||||||
|  |             </td> | ||||||
|  |         </tr> | ||||||
|  |         <tr> | ||||||
|  |             <td style="padding-top: 30px;"> | ||||||
|  |                 <a class="btn" href="{{ base_url }}{% url 'hosting:create_virtual_machine' %}" style="font-family: Lato, Arial, sans-serif; text-decoration: none; background-color: #1596da; color: #fff; padding-top: 10px; padding-bottom: 10px; padding-left: 30px; padding-right: 30px; letter-spacing: 0.5px; border-radius: 3px; display: inline-block;">{% trans "ORDER VM" %}</a> | ||||||
|  |             </td> | ||||||
|  |         </tr> | ||||||
|  |         <tr> | ||||||
|  |             <td style="padding-top: 40px; padding-bottom: 25px;"> | ||||||
|  |                 <h3 style="font-family: Lato, Arial, sans-serif; margin: 0; font-weight: 400; font-size: 15px;">{% trans "Your Data Center Light Team" %}</h3> | ||||||
|  |             </td> | ||||||
|  |         </tr> | ||||||
|  |     </table> | ||||||
|  | </body> | ||||||
|  | 
 | ||||||
|  | </html> | ||||||
|  | @ -0,0 +1,10 @@ | ||||||
|  | {% load i18n %} | ||||||
|  | 
 | ||||||
|  | {% trans "Welcome to Data Center Light!" %} | ||||||
|  | 
 | ||||||
|  | {% blocktrans %}Thanks for joining us! We provide the most affordable virtual machines from the heart of Switzerland.{% endblocktrans %} | ||||||
|  | {% blocktrans %}Try now, order a VM. VM price starts from only 15CHF per month.{% endblocktrans %} | ||||||
|  | 
 | ||||||
|  | {{ base_url }}{% url 'hosting:create_virtual_machine' %} | ||||||
|  | 
 | ||||||
|  | {% trans "Your Data Center Light Team" %} | ||||||
|  | @ -1,38 +1,39 @@ | ||||||
|     {% load staticfiles i18n%} | {% load staticfiles i18n%} | ||||||
| {% get_current_language as LANGUAGE_CODE %} | {% get_current_language as LANGUAGE_CODE %} | ||||||
|     <footer> |  | ||||||
|         <div class="container"> |  | ||||||
|             <ul class="list-inline"> |  | ||||||
|                 {% if request.resolver_match.url_name != "index" %} |  | ||||||
|                     <li> |  | ||||||
|                        <a href="{% url 'datacenterlight:index' %}">{% trans "Home" %}</a> |  | ||||||
|                     </li> |  | ||||||
|                     <li class="footer-menu-divider">⋅</li> |  | ||||||
|                 {% endif %} |  | ||||||
|                 <li> |  | ||||||
|                     <a class="url-init" href="{% url 'datacenterlight:index' %}#how">{% trans "Highlights" %}</a> |  | ||||||
|                 </li> |  | ||||||
|                 <li> |  | ||||||
|                     <a class="url-init" href="{% url 'datacenterlight:index' %}#your">{% trans "Scale out" %}</a> |  | ||||||
|                 </li> |  | ||||||
|                <li> |  | ||||||
|                     <a class="url-init" href="{% url 'datacenterlight:index' %}#our">{% trans "Reliable and light" %}</a> |  | ||||||
|                 </li> |  | ||||||
|                 {% if request.resolver_match.url_name != "index" %} |  | ||||||
|                     <li> |  | ||||||
|                         <a class="url-init" href="{% url 'datacenterlight:index' %}#price">{% trans "Pricing" %}</a> |  | ||||||
|                     </li> |  | ||||||
|                     <li class="footer-menu-divider">⋅</li> |  | ||||||
|                 {% else %} |  | ||||||
|                     <li> |  | ||||||
|                         <a class="url-init" href="{% url 'datacenterlight:index' %}#price">{% trans "Order VM" %}</a> |  | ||||||
|                     </li> |  | ||||||
|                 {% endif %} |  | ||||||
|                 <li> |  | ||||||
|                     <a class="url-init" href="{% url 'datacenterlight:index' %}#contact">{% trans "Contact" %}</a> |  | ||||||
|                 </li> |  | ||||||
|             </ul> |  | ||||||
| 
 | 
 | ||||||
|             <p class="copyright text-muted small">Copyright © ungleich GmbH {% now "Y" %}. {% trans "All Rights Reserved" %}</p> | <footer> | ||||||
|         </div> |     <div class="container"> | ||||||
|     </footer> |         <ul class="list-inline"> | ||||||
|  |             {% if request.resolver_match.url_name != "index" %} | ||||||
|  |                 <li> | ||||||
|  |                    <a href="{% url 'datacenterlight:index' %}">{% trans "Home" %}</a> | ||||||
|  |                 </li> | ||||||
|  |                 <li class="footer-menu-divider">⋅</li> | ||||||
|  |             {% endif %} | ||||||
|  |             <li> | ||||||
|  |                 <a class="url-init" href="{% url 'datacenterlight:index' %}#how">{% trans "Highlights" %}</a> | ||||||
|  |             </li> | ||||||
|  |             <li> | ||||||
|  |                 <a class="url-init" href="{% url 'datacenterlight:index' %}#your">{% trans "Scale out" %}</a> | ||||||
|  |             </li> | ||||||
|  |            <li> | ||||||
|  |                 <a class="url-init" href="{% url 'datacenterlight:index' %}#our">{% trans "Reliable and light" %}</a> | ||||||
|  |             </li> | ||||||
|  |             {% if request.resolver_match.url_name != "index" %} | ||||||
|  |                 <li> | ||||||
|  |                     <a class="url-init" href="{% url 'datacenterlight:index' %}#price">{% trans "Pricing" %}</a> | ||||||
|  |                 </li> | ||||||
|  |                 <li class="footer-menu-divider">⋅</li> | ||||||
|  |             {% else %} | ||||||
|  |                 <li> | ||||||
|  |                     <a class="url-init" href="{% url 'datacenterlight:index' %}#price">{% trans "Order VM" %}</a> | ||||||
|  |                 </li> | ||||||
|  |             {% endif %} | ||||||
|  |             <li> | ||||||
|  |                 <a class="url-init" href="{% url 'datacenterlight:index' %}#contact">{% trans "Contact" %}</a> | ||||||
|  |             </li> | ||||||
|  |         </ul> | ||||||
|  | 
 | ||||||
|  |         <p class="copyright text-muted small">Copyright © ungleich GmbH {% now "Y" %}. {% trans "All Rights Reserved" %}</p> | ||||||
|  |     </div> | ||||||
|  | </footer> | ||||||
|  |  | ||||||
|  | @ -218,6 +218,7 @@ CMS_TEMPLATES = ( | ||||||
|     ('page.html', gettext('Page')), |     ('page.html', gettext('Page')), | ||||||
|     # dcl |     # dcl | ||||||
|     ('datacenterlight/cms_page.html', gettext('Data Center Light')), |     ('datacenterlight/cms_page.html', gettext('Data Center Light')), | ||||||
|  |     ('ungleich_page/glasfaser_cms_page.html', gettext('Glasfaser')), | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| DATABASES = { | DATABASES = { | ||||||
|  | @ -347,8 +348,6 @@ MEDIA_ROOT = os.path.join(PROJECT_DIR, 'media') | ||||||
| MEDIA_URL = APP_ROOT_ENDPOINT + 'media/' | MEDIA_URL = APP_ROOT_ENDPOINT + 'media/' | ||||||
| FILE_UPLOAD_PERMISSIONS = 0o644 | FILE_UPLOAD_PERMISSIONS = 0o644 | ||||||
| 
 | 
 | ||||||
| META_SITE_PROTOCOL = 'http' |  | ||||||
| META_USE_SITES = True |  | ||||||
| MIGRATION_MODULES = { | MIGRATION_MODULES = { | ||||||
|     'cms': 'cms.migrations', |     'cms': 'cms.migrations', | ||||||
|     # 'filer': 'filer.migrations_django', |     # 'filer': 'filer.migrations_django', | ||||||
|  | @ -359,9 +358,6 @@ MIGRATION_MODULES = { | ||||||
|     'djangocms_link': 'djangocms_link.migrations_django', |     'djangocms_link': 'djangocms_link.migrations_django', | ||||||
|     'djangocms_teaser': 'djangocms_teaser.migrations_django', |     'djangocms_teaser': 'djangocms_teaser.migrations_django', | ||||||
|     'djangocms_column': 'djangocms_column.migrations_django', |     'djangocms_column': 'djangocms_column.migrations_django', | ||||||
|     'djangocms_flash': 'djangocms_flash.migrations_django', |  | ||||||
|     'djangocms_googlemap': 'djangocms_googlemap.migrations_django', |  | ||||||
|     'djangocms_inherit': 'djangocms_inherit.migrations_django', |  | ||||||
|     'djangocms_style': 'djangocms_style.migrations_django', |     'djangocms_style': 'djangocms_style.migrations_django', | ||||||
|     'cmsplugin_filer_image': 'cmsplugin_filer_image.migrations_django', |     'cmsplugin_filer_image': 'cmsplugin_filer_image.migrations_django', | ||||||
|     'cmsplugin_filer_file': 'cmsplugin_filer_file.migrations_django', |     'cmsplugin_filer_file': 'cmsplugin_filer_file.migrations_django', | ||||||
|  | @ -495,11 +491,10 @@ AUTH_USER_MODEL = 'membership.CustomUser' | ||||||
| STRIPE_DESCRIPTION_ON_PAYMENT = "Payment for ungleich GmbH services" | STRIPE_DESCRIPTION_ON_PAYMENT = "Payment for ungleich GmbH services" | ||||||
| 
 | 
 | ||||||
| # EMAIL MESSAGES | # EMAIL MESSAGES | ||||||
| REGISTRATION_MESSAGE = {'subject': "Validation mail", | REGISTRATION_MESSAGE = { | ||||||
|                         'message': 'Thank You for registering for account on Digital Glarus.\n' |     'subject': "Digital Glarus registration", | ||||||
|                                    'Please verify Your account under following link ' |     'message': 'Thank You for registering for account on Digital Glarus.' | ||||||
|                                    'http://{host}/en-us/digitalglarus/login/validate/{slug}', | } | ||||||
|                         } |  | ||||||
| STRIPE_API_PRIVATE_KEY = env('STRIPE_API_PRIVATE_KEY') | STRIPE_API_PRIVATE_KEY = env('STRIPE_API_PRIVATE_KEY') | ||||||
| STRIPE_API_PUBLIC_KEY = env('STRIPE_API_PUBLIC_KEY') | STRIPE_API_PUBLIC_KEY = env('STRIPE_API_PUBLIC_KEY') | ||||||
| STRIPE_API_PRIVATE_KEY_TEST = env('STRIPE_API_PRIVATE_KEY_TEST') | STRIPE_API_PRIVATE_KEY_TEST = env('STRIPE_API_PRIVATE_KEY_TEST') | ||||||
|  |  | ||||||
|  | @ -31,5 +31,5 @@ ALLOWED_HOSTS = [ | ||||||
|     ".ipv6onlyhosting.com", |     ".ipv6onlyhosting.com", | ||||||
|     ".ipv6onlyhosting.net", |     ".ipv6onlyhosting.net", | ||||||
|     ".digitalglarus.ch", |     ".digitalglarus.ch", | ||||||
|     ".alplora.ch" |     ".hack4glarus.ch" | ||||||
| ] | ] | ||||||
|  |  | ||||||
|  | @ -8,7 +8,7 @@ msgid "" | ||||||
| msgstr "" | msgstr "" | ||||||
| "Project-Id-Version: PACKAGE VERSION\n" | "Project-Id-Version: PACKAGE VERSION\n" | ||||||
| "Report-Msgid-Bugs-To: \n" | "Report-Msgid-Bugs-To: \n" | ||||||
| "POT-Creation-Date: 2017-10-10 21:35+0530\n" | "POT-Creation-Date: 2017-10-16 01:06+0530\n" | ||||||
| "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | ||||||
| "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | ||||||
| "Language-Team: LANGUAGE <LL@li.org>\n" | "Language-Team: LANGUAGE <LL@li.org>\n" | ||||||
|  | @ -155,9 +155,6 @@ msgstr "Ich möchte einen existierenden SSH-Key nutzen" | ||||||
| msgid "Upload" | msgid "Upload" | ||||||
| msgstr "Hochladen" | msgstr "Hochladen" | ||||||
| 
 | 
 | ||||||
| msgid "Your VM hosted in Switzerland" |  | ||||||
| msgstr "Deine VM in der Schweiz" |  | ||||||
| 
 |  | ||||||
| msgid "Set your new password" | msgid "Set your new password" | ||||||
| msgstr "Setze Dein neues Passwort" | msgstr "Setze Dein neues Passwort" | ||||||
| 
 | 
 | ||||||
|  | @ -195,101 +192,78 @@ msgid "Support / Contact" | ||||||
| msgstr "Support / Kontakt" | msgstr "Support / Kontakt" | ||||||
| 
 | 
 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "" | msgid "Your New VM %(vm_name)s" | ||||||
| "You have ordered a new virtual machine!\n" | msgstr "Deine Neue VM %(vm_name)s" | ||||||
| "<br/>\n" |  | ||||||
| "Your order of [%(vm_name)s] has been charged.<br/><br/>\n" |  | ||||||
| "You can view your invoice by clicking the button below.<br/><br/>\n" |  | ||||||
| msgstr "" |  | ||||||
| "Du hast eine neue virtuelle Maschine bestellt!<br/>\n" |  | ||||||
| "Deine Bestellung von [%(vm_name)s] wurde erhoben.<br/><br/>\n" |  | ||||||
| "Um die Rechnung zu sehen, klicke auf den Button unten.<br/><br/>\n" |  | ||||||
| 
 | 
 | ||||||
| msgid "View Invoice" | msgid "You have ordered a new virtual machine!" | ||||||
| msgstr "Zur Rechnung" | msgstr "Du hast eine neue virtuelle Maschine bestellt!" | ||||||
| 
 | 
 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "" | msgid "Your order of <strong>%(vm_name)s</strong> has been charged." | ||||||
| "You have ordered a new virtual machine!\n" | msgstr "Deine Bestellung von <strong>%(vm_name)s</strong> wurde erhoben." | ||||||
| "Your order of [%(vm_name)s] has been charged.\n" | 
 | ||||||
| "You can view your invoice here.\n" | msgid "You can view your VM detail by clicking the button below." | ||||||
| msgstr "" | msgstr "Um die Rechnung zu sehen, klicke auf den Button unten." | ||||||
| "Du hast eine neue virtuelle Maschine bestellt!\n" | 
 | ||||||
| "Deine Bestellung von [%(vm_name)s] wurde erhoben.\n" | msgid "View Detail" | ||||||
| "Um die Rechnung zu sehen, klicke hier.\n" | msgstr "Details anzeigen" | ||||||
|  | 
 | ||||||
|  | msgid "Your Data Center Light Team" | ||||||
|  | msgstr "Dein Data Center Light Team" | ||||||
|  | 
 | ||||||
|  | #, python-format | ||||||
|  | msgid "Your order of %(vm_name)s has been charged." | ||||||
|  | msgstr "Deine Bestellung von %(vm_name)s wurde erhoben." | ||||||
|  | 
 | ||||||
|  | msgid "You can view your VM detail by following the link below." | ||||||
|  | msgstr "Um die Rechnung zu sehen, klicke auf den Link unten." | ||||||
| 
 | 
 | ||||||
| msgid "Password Reset" | msgid "Password Reset" | ||||||
| msgstr "Passwort zurücksetzen" | msgstr "Passwort zurücksetzen" | ||||||
| 
 | 
 | ||||||
| #, python-format | msgid "We received a request to reset your password." | ||||||
| msgid "" | msgstr "Wir haben eine Anfrage erhalten, um Dein Passwort zurückzusetzen." | ||||||
| "\n" | 
 | ||||||
| "You're receiving this email because you requested a password reset for your " | msgid "If you didn't make this request you can safely ignore this email." | ||||||
| "user account at %(site_name)s.<br/>\n" |  | ||||||
| "Please go to the following page and choose a new password: %(base_url)s" |  | ||||||
| "%(password_reset_url)s<br/>\n" |  | ||||||
| "If you didn't request a new password, ignore this e-mail.<br/>\n" |  | ||||||
| "Thank you!\n" |  | ||||||
| msgstr "" | msgstr "" | ||||||
| "\n" | "Falls Du kein neues Passwort angefragt hast, kannst Du diese E-mail " | ||||||
| "Du erhälst diese E-Mail da Du Dein Passwort für Deinen Account bei " | "ignorieren." | ||||||
| "%(site_name)s zurücksetzen möchtest.<br/>\n" | 
 | ||||||
| "Bitte folge diesem Link und wähle ein neues Passwort: %(base_url)s" | msgid "Otherwise, click here to reset your password." | ||||||
| "%(password_reset_url)s Solltest Du kein neues Passwort angefordert haben, " | msgstr "Andernfalls klicke hier, um Dein Passwort zurückzusetzen." | ||||||
| "dann ignoriere diese E-Mail.<br/>\n" | 
 | ||||||
| "Dankeschön!\n" | msgid "Thank you!" | ||||||
|  | msgstr "Dankeschön!" | ||||||
|  | 
 | ||||||
|  | msgid "Virtual Machine Cancellation" | ||||||
|  | msgstr "VM Kündigung" | ||||||
| 
 | 
 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "" | msgid "" | ||||||
| "You're receiving this email because you requested a password reset for your " | "You are receiving this email because your virutal machine <strong>" | ||||||
| "user account at %(site_name)s.\n" | "%(vm_name)s</strong> has been cancelled." | ||||||
| "Please go to the following page and choose a new password: %(base_url)s" |  | ||||||
| "%(password_reset_url)s\n" |  | ||||||
| "If you didn't request a new password, ignore this e-mail.\n" |  | ||||||
| "Thank you!\n" |  | ||||||
| msgstr "" | msgstr "" | ||||||
| "Du erhälst diese E-Mail da Du Dein Passwort für Deinen Account bei " | "Du erhälst diese E-Mail, da deine virtuelle Maschine <strong>%(vm_name)s</" | ||||||
| "%(site_name)s zurücksetzen möchtest.\n" | "strong> gekündigt wurde." | ||||||
| "Bitte folge diesem Link und wähle ein neues Passwort: %(base_url)s" | 
 | ||||||
| "%(password_reset_url)s Solltest Du kein neues Passwort angefordert haben, " | msgid "You can always order a new VM by clicking the button below." | ||||||
| "dann ignoriere diese E-Mail.\n" | msgstr "" | ||||||
| "Dankeschön!\n" | "Du kannst einfach eine neue VM bestellen, indem Du den Knopf weiter unten " | ||||||
|  | "drückst." | ||||||
|  | 
 | ||||||
|  | msgid "CREATE VM" | ||||||
|  | msgstr "NEUE VM" | ||||||
| 
 | 
 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "" | msgid "" | ||||||
| "You're receiving this mail because your virtual machine [%(vm_name)s] has " | "You are receiving this email because your virutal machine %(vm_name)s has " | ||||||
| "been cancelled.<br/>\n" | "been cancelled." | ||||||
| "You can see your order status by clicking [my VM page] below.<br/>\n" |  | ||||||
| "If you want to order a new virtual machine, you can do it by clicking <a " |  | ||||||
| "href=\"%(base_url)s%(my_virtual_machines_url)s\">this link</a>.<br/>\n" |  | ||||||
| msgstr "" | msgstr "" | ||||||
| "Du erhälst diese E-Mail, Da Deine virtuelle Maschine [%(vm_name)s] gekündigt " | "Du erhälst diese E-Mail, da deine virtuelle Maschine %(vm_name)s gekündigt " | ||||||
| "wurde.<br/>\n" | "wurde." | ||||||
| "Um Deinen Auftragsstatus zu sehen, klicke auf die [my VM page] unten.<br/>\n" |  | ||||||
| "Falls Du eine neue virtuelle Maschine bestellen möchtest, kannst Du dies " |  | ||||||
| "tun, indem Du <a href=\"%(base_url)s%(my_virtual_machines_url)s\">diesen " |  | ||||||
| "Link klickst</a>.<br/>\n" |  | ||||||
| 
 | 
 | ||||||
| msgid "My VM page" | msgid "You can always order a new VM by following the link below." | ||||||
| msgstr "Meine VM page" |  | ||||||
| 
 |  | ||||||
| #, python-format |  | ||||||
| msgid "" |  | ||||||
| "You're receiving this mail because your virtual machine [%(vm_name)s] has " |  | ||||||
| "been cancelled.\n" |  | ||||||
| "You can see your order status by clicking here\n" |  | ||||||
| "%(base_url)s%(vm_order_url)s\n" |  | ||||||
| "If you want to order a new virtual machine, you can do it by clicking this " |  | ||||||
| "link.\n" |  | ||||||
| "%(base_url)s%(my_virtual_machines_url)s\n" |  | ||||||
| msgstr "" | msgstr "" | ||||||
| "Du erhälst diese E-Mail, da Deine virtuelle Maschine [%(vm_name)s] gekündigt " |  | ||||||
| "wurde.\n" |  | ||||||
| "Um Deinen Auftragsstatus zu sehen, klicke hier.\n" |  | ||||||
| "%(base_url)s%(vm_order_url)s\n" |  | ||||||
| "Falls Du eine neue virtuelle Maschine bestellen möchtest, kannst Du dies " |  | ||||||
| "tun, indem Du diesen Link klickst.\n" |  | ||||||
| "%(base_url)s%(my_virtual_machines_url)s\n" |  | ||||||
| 
 | 
 | ||||||
| msgid "Toggle navigation" | msgid "Toggle navigation" | ||||||
| msgstr "Umschalten" | msgstr "Umschalten" | ||||||
|  | @ -300,13 +274,16 @@ msgstr "Dashboard" | ||||||
| msgid "Logout" | msgid "Logout" | ||||||
| msgstr "Abmelden" | msgstr "Abmelden" | ||||||
| 
 | 
 | ||||||
| msgid "Don't have an account yet ? " | msgid "Log in" | ||||||
|  | msgstr "Anmelden" | ||||||
|  | 
 | ||||||
|  | msgid "Don't have an account yet ?" | ||||||
| msgstr "Besitzt du kein Benutzerkonto?" | msgstr "Besitzt du kein Benutzerkonto?" | ||||||
| 
 | 
 | ||||||
| msgid "Sign up" | msgid "Sign up" | ||||||
| msgstr "Registrieren" | msgstr "Registrieren" | ||||||
| 
 | 
 | ||||||
| msgid "Forgot your password ? " | msgid "Forgot your password ?" | ||||||
| msgstr "Passwort vergessen?" | msgstr "Passwort vergessen?" | ||||||
| 
 | 
 | ||||||
| msgid "Resend activation link" | msgid "Resend activation link" | ||||||
|  | @ -478,7 +455,7 @@ msgstr "Deine Kreditkartennummer" | ||||||
| msgid "Submit" | msgid "Submit" | ||||||
| msgstr "Absenden" | msgstr "Absenden" | ||||||
| 
 | 
 | ||||||
| msgid "Reset your password" | msgid "Password reset" | ||||||
| msgstr "Passwort zurücksetzen" | msgstr "Passwort zurücksetzen" | ||||||
| 
 | 
 | ||||||
| msgid "UPDATE" | msgid "UPDATE" | ||||||
|  | @ -630,12 +607,6 @@ msgstr "" | ||||||
| "Um auf Deine VM zuzugreifen, <a href=\"%(create_ssh_url)s\">füge Deinen SSH-" | "Um auf Deine VM zuzugreifen, <a href=\"%(create_ssh_url)s\">füge Deinen SSH-" | ||||||
| "Key hinzu</a>" | "Key hinzu</a>" | ||||||
| 
 | 
 | ||||||
| msgid "CREATE VM" |  | ||||||
| msgstr "NEUE VM" |  | ||||||
| 
 |  | ||||||
| msgid "View Detail" |  | ||||||
| msgstr "Details anzeigen" |  | ||||||
| 
 |  | ||||||
| msgid "login" | msgid "login" | ||||||
| msgstr "anmelden" | msgstr "anmelden" | ||||||
| 
 | 
 | ||||||
|  | @ -660,6 +631,9 @@ msgstr "Dein Account wurde aktiviert." | ||||||
| msgid "You can now" | msgid "You can now" | ||||||
| msgstr "Du kannst dich nun" | msgstr "Du kannst dich nun" | ||||||
| 
 | 
 | ||||||
|  | msgid "Welcome to Data Center Light!" | ||||||
|  | msgstr "Willkommen beim Data Center Light!" | ||||||
|  | 
 | ||||||
| msgid "Sorry. Your request is invalid." | msgid "Sorry. Your request is invalid." | ||||||
| msgstr "Entschuldigung, deine Anfrage ist ungültig." | msgstr "Entschuldigung, deine Anfrage ist ungültig." | ||||||
| 
 | 
 | ||||||
|  | @ -730,14 +704,21 @@ msgstr "" | ||||||
| msgid "Error terminating VM" | msgid "Error terminating VM" | ||||||
| msgstr "Fehler beenden VM" | msgstr "Fehler beenden VM" | ||||||
| 
 | 
 | ||||||
| msgid "Virtual Machine Cancellation" | #, python-format | ||||||
| msgstr "VM Kündigung" | msgid "Virtual Machine %(vm_name)s Cancelled" | ||||||
|  | msgstr "Virtuelle Maschine %(vm_name)s Kündigung" | ||||||
| 
 | 
 | ||||||
| msgid "There was an error processing your request. Please try again." | msgid "There was an error processing your request. Please try again." | ||||||
| msgstr "" | msgstr "" | ||||||
| "Es gab einen Fehler bei der Bearbeitung Deine Anfrage. Bitte versuche es " | "Es gab einen Fehler bei der Bearbeitung Deine Anfrage. Bitte versuche es " | ||||||
| "noch einmal." | "noch einmal." | ||||||
| 
 | 
 | ||||||
|  | #~ msgid "Reset your password" | ||||||
|  | #~ msgstr "Passwort zurücksetzen" | ||||||
|  | 
 | ||||||
|  | #~ msgid "My VM page" | ||||||
|  | #~ msgstr "Meine VM page" | ||||||
|  | 
 | ||||||
| #~ msgid "Invoice Date" | #~ msgid "Invoice Date" | ||||||
| #~ msgstr "Rechnung Datum" | #~ msgstr "Rechnung Datum" | ||||||
| 
 | 
 | ||||||
|  | @ -765,12 +746,27 @@ msgstr "" | ||||||
| #~ msgid "Start VM" | #~ msgid "Start VM" | ||||||
| #~ msgstr "VM jetzt starten" | #~ msgstr "VM jetzt starten" | ||||||
| 
 | 
 | ||||||
|  | #~ msgid "View Invoice" | ||||||
|  | #~ msgstr "Zur Rechnung" | ||||||
|  | 
 | ||||||
|  | #~ msgid "" | ||||||
|  | #~ "You're receiving this mail because your virtual machine [%(vm_name)s] has " | ||||||
|  | #~ "been cancelled.<br/>\n" | ||||||
|  | #~ "You can see your order status by clicking [my VM page] below.<br/>\n" | ||||||
|  | #~ "If you want to order a new virtual machine, you can do it by clicking <a " | ||||||
|  | #~ "href=\"%(base_url)s%(my_virtual_machines_url)s\">this link</a>.<br/>\n" | ||||||
|  | #~ msgstr "" | ||||||
|  | #~ "Du erhälst diese E-Mail, da deine virtuelle Maschine [%(vm_name)s] " | ||||||
|  | #~ "gekündigt wurde.<br/>\n" | ||||||
|  | #~ "Um deinen Auftragsstatus zu sehen, klicke auf die [my VM page] unten.<br/" | ||||||
|  | #~ ">\n" | ||||||
|  | #~ "Falls du eine neue virtuelle Maschine bestellen möchtest, kannst du dies " | ||||||
|  | #~ "tun, indem du <a href=\"%(base_url)s%(my_virtual_machines_url)s\">diesen " | ||||||
|  | #~ "Link klickst</a>.<br/>\n" | ||||||
|  | 
 | ||||||
| #~ msgid "Finish Configuration" | #~ msgid "Finish Configuration" | ||||||
| #~ msgstr "Konfiguration beenden" | #~ msgstr "Konfiguration beenden" | ||||||
| 
 | 
 | ||||||
| #~ msgid "Your New VM %(vm_name)s at Data Center Light" |  | ||||||
| #~ msgstr "Deine neue VM %(vm_name)s bei Data Center Light" |  | ||||||
| 
 |  | ||||||
| #~ msgid "My Virtual Machines" | #~ msgid "My Virtual Machines" | ||||||
| #~ msgstr "Meine virtuellen Maschinen" | #~ msgstr "Meine virtuellen Maschinen" | ||||||
| 
 | 
 | ||||||
|  | @ -828,9 +824,6 @@ msgstr "" | ||||||
| #~ msgid "Keys" | #~ msgid "Keys" | ||||||
| #~ msgstr "Keys" | #~ msgstr "Keys" | ||||||
| 
 | 
 | ||||||
| #~ msgid "Log in" |  | ||||||
| #~ msgstr "Anmelden" |  | ||||||
| 
 |  | ||||||
| #~ msgid "You haven been logged out" | #~ msgid "You haven been logged out" | ||||||
| #~ msgstr "Du wurdest abgemeldet" | #~ msgstr "Du wurdest abgemeldet" | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,7 +1,9 @@ | ||||||
| import os | import os | ||||||
| import logging | import logging | ||||||
|  | from dateutil.relativedelta import relativedelta | ||||||
| 
 | 
 | ||||||
| from django.db import models | from django.db import models | ||||||
|  | from django.utils import timezone | ||||||
| from django.utils.functional import cached_property | from django.utils.functional import cached_property | ||||||
| from Crypto.PublicKey import RSA | from Crypto.PublicKey import RSA | ||||||
| from membership.models import StripeCustomer, CustomUser | from membership.models import StripeCustomer, CustomUser | ||||||
|  | @ -172,3 +174,9 @@ class VMDetail(models.Model): | ||||||
|     ipv6 = models.TextField(default='') |     ipv6 = models.TextField(default='') | ||||||
|     created_at = models.DateTimeField(auto_now_add=True) |     created_at = models.DateTimeField(auto_now_add=True) | ||||||
|     terminated_at = models.DateTimeField(null=True) |     terminated_at = models.DateTimeField(null=True) | ||||||
|  | 
 | ||||||
|  |     def end_date(self): | ||||||
|  |         end_date = self.terminated_at if self.terminated_at else timezone.now() | ||||||
|  |         months = relativedelta(end_date, self.created_at).months or 1 | ||||||
|  |         end_date = self.created_at + relativedelta(months=months, days=-1) | ||||||
|  |         return end_date | ||||||
|  |  | ||||||
|  | @ -18,7 +18,7 @@ | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .content-dashboard{ | .content-dashboard{ | ||||||
| 	min-height: calc(100vh - 70px); | 	min-height: calc(100vh - 60px); | ||||||
| 	width: 80%; | 	width: 80%; | ||||||
| 	margin: 0 auto; | 	margin: 0 auto; | ||||||
| 	max-width: 1120px; | 	max-width: 1120px; | ||||||
|  | @ -66,7 +66,9 @@ | ||||||
|       width: 280px; |       width: 280px; | ||||||
|     } |     } | ||||||
|     .content-dashboard { |     .content-dashboard { | ||||||
|       width: 90%; |       padding-left: 15px; | ||||||
|  |       padding-right: 15px; | ||||||
|  |       width: 100%; | ||||||
|   } |   } | ||||||
| } | } | ||||||
| .btn:focus, .btn:active:focus { | .btn:focus, .btn:active:focus { | ||||||
|  | @ -296,10 +298,6 @@ | ||||||
|   max-width: 360px; |   max-width: 360px; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .btn-wide { |  | ||||||
|   min-width: 100px; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .caps-link { | .caps-link { | ||||||
|   font-weight: 600; |   font-weight: 600; | ||||||
|   color: #8da4c0; |   color: #8da4c0; | ||||||
|  | @ -375,4 +373,12 @@ | ||||||
|   outline: none; |   outline: none; | ||||||
|   color: #999; |   color: #999; | ||||||
|   fill: #999; |   fill: #999; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .locale_date { | ||||||
|  |   opacity: 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .locale_date.done{ | ||||||
|  |   opacity: 1; | ||||||
| } | } | ||||||
|  | @ -17,9 +17,11 @@ h3, | ||||||
| h4, | h4, | ||||||
| h5, | h5, | ||||||
| h6 { | h6 { | ||||||
|     /*font-family: 'Lato-Regular', sans-serif;*/ |  | ||||||
|     font-family: 'Lato', sans-serif; |     font-family: 'Lato', sans-serif; | ||||||
|     /*font-weight: 300;*/ | } | ||||||
|  | 
 | ||||||
|  | .allcaps { | ||||||
|  |     text-transform: uppercase; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .topnav { | .topnav { | ||||||
|  | @ -31,6 +33,11 @@ h6 { | ||||||
| .navbar-brand { | .navbar-brand { | ||||||
|     padding: 10px 15px; |     padding: 10px 15px; | ||||||
| } | } | ||||||
|  | @media (max-width: 767px) { | ||||||
|  |     .navbar-brand { | ||||||
|  |         padding: 10px 0; | ||||||
|  |     } | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| .navbar-default { | .navbar-default { | ||||||
|     background: #fff; |     background: #fff; | ||||||
|  | @ -46,7 +53,7 @@ h6 { | ||||||
| .navbar-transparent { | .navbar-transparent { | ||||||
|     background: transparent; |     background: transparent; | ||||||
|     border: none; |     border: none; | ||||||
|     padding: 20px; |     padding: 20px 0; | ||||||
|     box-shadow: none; |     box-shadow: none; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -72,7 +79,6 @@ h6 { | ||||||
| .navbar-transparent #logoWhite{ | .navbar-transparent #logoWhite{ | ||||||
|     display: block; |     display: block; | ||||||
|     width: 220px; |     width: 220px; | ||||||
|     /* color: #fff; */ |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .navbar-right .highlights-dropdown .dropdown-menu { | .navbar-right .highlights-dropdown .dropdown-menu { | ||||||
|  | @ -92,16 +98,6 @@ h6 { | ||||||
|         border-color: #e7e7e7; |         border-color: #e7e7e7; | ||||||
|         box-shadow: -8px 14px 20px -5px rgba(77, 77, 77, 0.5); |         box-shadow: -8px 14px 20px -5px rgba(77, 77, 77, 0.5); | ||||||
|     } |     } | ||||||
| /*     .navbar-right .highlights-dropdown .dropdown-menu:before { |  | ||||||
|         content: ''; |  | ||||||
|         display: block; |  | ||||||
|         height: 1px; |  | ||||||
|         background: #e7e7e7; |  | ||||||
|         position: absolute; |  | ||||||
|         top: -1px; |  | ||||||
|         left: -1px; |  | ||||||
|         right: -1px; |  | ||||||
|     } */ |  | ||||||
| } | } | ||||||
| .navbar-right .highlights-dropdown .dropdown-menu > li > a{ | .navbar-right .highlights-dropdown .dropdown-menu > li > a{ | ||||||
|     font-size: 13px; |     font-size: 13px; | ||||||
|  | @ -274,16 +270,15 @@ h6 { | ||||||
| 
 | 
 | ||||||
| /*------Auth section---------*/ | /*------Auth section---------*/ | ||||||
| .auth-container { | .auth-container { | ||||||
|     min-height: calc(100vh - 120px); |     min-height: calc(100vh - 180px); | ||||||
|     position: relative; |     position: relative; | ||||||
|     /* flex-grow: 1; */ |  | ||||||
|     display: flex; |     display: flex; | ||||||
|     flex-direction: column; |     flex-direction: column; | ||||||
|     justify-content: center; |     justify-content: center; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .auth-bg { | .auth-bg { | ||||||
|     background: url(../img/auth-bg-sm.jpg); |     background: url(../img/pattern.jpg) no-repeat center center; | ||||||
|     position: fixed; |     position: fixed; | ||||||
|     left: 0; |     left: 0; | ||||||
|     top: 0; |     top: 0; | ||||||
|  | @ -293,7 +288,6 @@ h6 { | ||||||
|     background-position: center center; |     background-position: center center; | ||||||
|     background-size: cover; |     background-size: cover; | ||||||
|     background-attachment: fixed; |     background-attachment: fixed; | ||||||
| 
 |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .auth-bg::before { | .auth-bg::before { | ||||||
|  | @ -303,7 +297,7 @@ h6 { | ||||||
|     bottom: 0; |     bottom: 0; | ||||||
|     left: 0; |     left: 0; | ||||||
|     right: 0; |     right: 0; | ||||||
|     background: rgba(75, 75, 101, 0.55); |     background: rgba(90, 116, 175, 0.7); | ||||||
|     z-index: 1; |     z-index: 1; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -313,69 +307,38 @@ h6 { | ||||||
| 
 | 
 | ||||||
| .auth-container .auth-content { | .auth-container .auth-content { | ||||||
|     width: 100%; |     width: 100%; | ||||||
|     margin: 0 auto; |     margin: 0 auto 15px; | ||||||
|     max-width: 390px; |     max-width: 400px; | ||||||
|  |     padding: 0 15px; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .auth-container .auth-center { | .auth-container .auth-content.wide { | ||||||
|     /* position: absolute; */ |     max-width: 480px; | ||||||
|     /* left: 50%; */ |  | ||||||
|     /* top: 50%; */ |  | ||||||
|     /* transform: translate(-50%, -50%); */ |  | ||||||
|     /* width: 100%; */ |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .auth-container .auth-title { |  | ||||||
|     margin-bottom: 50px; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .auth-container .auth-title h2 { |  | ||||||
|     color: #fff; |  | ||||||
|     font-size: 44px; |  | ||||||
|     text-align: center; |  | ||||||
|     width: 425px; |  | ||||||
|     margin: 0 auto; |  | ||||||
|     margin-bottom: 30px; |  | ||||||
|     position: relative; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .auth-container .auth-title h2::after { |  | ||||||
|     content: ""; |  | ||||||
|     position: absolute; |  | ||||||
|     bottom: -20px; |  | ||||||
|     background: #fff; |  | ||||||
|     height: 7px; |  | ||||||
|     width: 70px; |  | ||||||
|     left: 50%; |  | ||||||
|     transform: translate(-50%, 0); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .auth-box { | .auth-box { | ||||||
|  |     position: relative; | ||||||
|     background: #fff; |     background: #fff; | ||||||
|     padding: 0; |     padding: 40px 20px 20px; | ||||||
|     padding-bottom: 30px; |  | ||||||
|     box-sizing: border-box; |     box-sizing: border-box; | ||||||
|     box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); |     box-shadow: 0 6px 12px rgba(0, 0, 0, 0.09), 0 5px 5px rgba(0, 0, 0, 0.23); | ||||||
|     border-radius: 4px; |  | ||||||
|     z-index: 10; |     z-index: 10; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .auth-box .section-heading { | .auth-box .section-heading { | ||||||
|     color: #5a5a5a; |     color: #5a5a5a; | ||||||
|     padding-top: 30px; |     font-weight: 300; | ||||||
|     padding-bottom: 5px; |  | ||||||
|     text-align: center; |     text-align: center; | ||||||
|     text-transform: uppercase; |     letter-spacing: 1px; | ||||||
|     letter-spacing: 3px; |     font-size: 36px; | ||||||
|     font-size: 20px; |  | ||||||
|     border-radius: 3px 3px 0px 0px; |     border-radius: 3px 3px 0px 0px; | ||||||
|     margin: 0 auto; |     margin: 0 auto 10px; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .auth-box .form { | .auth-box .form { | ||||||
|     padding: 20px; |     padding: 20px; | ||||||
|     width: 80%; |  | ||||||
|     margin: 0 auto; |     margin: 0 auto; | ||||||
|  |     max-width: 360px; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .auth-box .form .red { | .auth-box .form .red { | ||||||
|  | @ -383,27 +346,56 @@ h6 { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .auth-box .form .btn { | .auth-box .form .btn { | ||||||
|     box-shadow: 0 0px 9px rgba(0, 0, 0, 0.19), 0 3px 5px rgba(0, 0, 0, 0.23); |     letter-spacing: 2px; | ||||||
|     letter-spacing: 3px; |     font-size: 16px; | ||||||
|     font-size: 17px; |     padding: 6px 12px; | ||||||
|  |     min-width: 140px; | ||||||
|  |     margin-top: 15px; | ||||||
|     text-transform: uppercase; |     text-transform: uppercase; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .auth-box .form .form-control { | .auth-box .form .form-control { | ||||||
|     height: 44px; |     height: 48px; | ||||||
|     font-size: 16px; |     font-size: 14px; | ||||||
|  |     padding: 10px 17px; | ||||||
|  |     line-height: 30px; | ||||||
|  |     border-color: #aaa; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .auth-box .form .form-control:focus, | ||||||
|  | .auth-box .form .form-control:active { | ||||||
|  |     box-shadow: none; | ||||||
|  |     border-radius: 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .auth-box .form-control::-webkit-input-placeholder { | ||||||
|  |     color: #aaa; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .auth-box .form-control:-moz-placeholder{ | ||||||
|  |     /* Firefox 18- */ | ||||||
|  |     color: #aaa; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .auth-box .form-control::-moz-placeholder{ | ||||||
|  |     /* Firefox 19+ */ | ||||||
|  |     color: #aaa; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .auth-box .form-control:-ms-input-placeholder { | ||||||
|  |     color: #aaa; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .auth-box .auth-footer { | .auth-box .auth-footer { | ||||||
|     text-align: center; |     text-align: center; | ||||||
|     padding: 10px; |     padding: 5px; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .auth-box .auth-footer .text { | .auth-box .auth-footer { | ||||||
|     color: #777; |     color: #777; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .auth-box .auth-footer .links a { | .auth-box .auth-footer a { | ||||||
|     color: #1e94cc; |     color: #1e94cc; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -411,20 +403,11 @@ h6 { | ||||||
|     color: #1e94cc; |     color: #1e94cc; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .auth-box.sign-up { |  | ||||||
|     padding-bottom: 5px; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .auth-box.sign-up .form { |  | ||||||
|     padding: 15px 20px 0 20px; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .sign-up-message { | .sign-up-message { | ||||||
|     padding: 25px 30px 25px 30px; |     padding: 25px 30px 25px 30px; | ||||||
|     text-align: center; |     text-align: center; | ||||||
|     font-size: 18px; |     font-size: 18px; | ||||||
|     line-height: 30px; |     line-height: 30px; | ||||||
|     /*font-family: 'Lato' !important;*/ |  | ||||||
|     font-weight: 300 !important; |     font-weight: 300 !important; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -458,16 +441,7 @@ h6 { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     .auth-box .form { |     .auth-box .form { | ||||||
|         padding: 15px 0px 0 0; |         padding: 15px 0 15px 0; | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     .auth-box.sign-up .form { |  | ||||||
|         padding: 15px 0px 0 0; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     .auth-box .form .form-control { |  | ||||||
|         height: 44px; |  | ||||||
|         font-size: 13px; |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     .auth-container .auth-title { |     .auth-container .auth-title { | ||||||
|  | @ -476,7 +450,7 @@ h6 { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .auth-box .msg-list { | .auth-box .msg-list { | ||||||
|     padding: 15px 25px 5px; |     padding: 20px 25px 0; | ||||||
|     text-align: center; |     text-align: center; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -493,19 +467,14 @@ h6 { | ||||||
|         margin-bottom: 50px; |         margin-bottom: 50px; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     .auth-box .form { |  | ||||||
|         width: 90%; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     .auth-box .section-heading { |     .auth-box .section-heading { | ||||||
|         font-size: 15px; |         font-size: 32px; | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| footer { | footer { | ||||||
|     padding: 20px; |     padding: 20px 0; | ||||||
|     background-color: #f8f8f8; |     background-color: #f8f8f8; | ||||||
| /*     position: absolute */ |  | ||||||
|     right: 0; |     right: 0; | ||||||
|     bottom: 0; |     bottom: 0; | ||||||
|     left: 0; |     left: 0; | ||||||
|  | @ -537,7 +506,6 @@ a.unlink:hover { | ||||||
| 
 | 
 | ||||||
| /***** DCL payment page **********/ | /***** DCL payment page **********/ | ||||||
| .dcl-order-container { | .dcl-order-container { | ||||||
|     /*font-family: Lato;*/ |  | ||||||
|     font-weight: 300; |     font-weight: 300; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -580,9 +548,7 @@ a.unlink:hover { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .dcl-place-order-text{ | .dcl-place-order-text{ | ||||||
|    /* font-size: 13px; */ |  | ||||||
|    color: #808080; |    color: #808080; | ||||||
|    /* margin-bottom: 15px; */ |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .dcl-order-table-total .tbl-total { | .dcl-order-table-total .tbl-total { | ||||||
|  | @ -610,7 +576,6 @@ a.unlink:hover { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .card-warning-content { | .card-warning-content { | ||||||
|     /*font-family: Lato;*/ |  | ||||||
|     font-weight: 300; |     font-weight: 300; | ||||||
|     border: 1px solid #a1a1a1; |     border: 1px solid #a1a1a1; | ||||||
|     border-radius: 3px; |     border-radius: 3px; | ||||||
|  | @ -638,18 +603,6 @@ a.unlink:hover { | ||||||
|     right: 0; |     right: 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .brand { |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .brand #brand-icon { |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .card-number-element { |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .card-expiry-element { |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .card-cvc-element label { | .card-cvc-element label { | ||||||
|     padding-left: 10px; |     padding-left: 10px; | ||||||
| } | } | ||||||
|  | @ -735,9 +688,6 @@ a.unlink:hover { | ||||||
|         margin-bottom: 30px; |         margin-bottom: 30px; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     .brand { |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     .card-expiry-element { |     .card-expiry-element { | ||||||
|     padding-right: 10px; |     padding-right: 10px; | ||||||
|     } |     } | ||||||
|  | @ -802,10 +752,23 @@ a.unlink:hover { | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | .footer-light { | ||||||
| .footer-light a:hover, .footer-light a:focus, .footer-light a:active { |     position: relative; | ||||||
|  | } | ||||||
|  | .footer-light footer { | ||||||
|  |     background: transparent; | ||||||
|  |     color: #eee; | ||||||
|  | } | ||||||
|  | .footer-light a, | ||||||
|  | .footer-light .text-muted { | ||||||
|     color: #ddd; |     color: #ddd; | ||||||
| } | } | ||||||
|  | .footer-light a:hover, .footer-light a:focus, .footer-light a:active { | ||||||
|  |     color: #fff; | ||||||
|  | } | ||||||
|  | .footer-vm p.copyright { | ||||||
|  |     margin-top: 4px; | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| .visible-mobile { | .visible-mobile { | ||||||
|     display: none !important; |     display: none !important; | ||||||
|  |  | ||||||
							
								
								
									
										
											BIN
										
									
								
								hosting/static/hosting/img/pattern.jpg
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								hosting/static/hosting/img/pattern.jpg
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 58 KiB | 
							
								
								
									
										
											BIN
										
									
								
								hosting/static/hosting/img/pattern_original.jpg
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								hosting/static/hosting/img/pattern_original.jpg
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 181 KiB | 
|  | @ -54,19 +54,18 @@ | ||||||
|         {% include "hosting/includes/_navbar_user.html" %} |         {% include "hosting/includes/_navbar_user.html" %} | ||||||
|     {% endblock navbar %} |     {% endblock navbar %} | ||||||
| 
 | 
 | ||||||
| 
 |     <div class="{% if request.user.is_authenticated %}content-dashboard{% endif %}"> | ||||||
|     <div class="content-dashboard"> |  | ||||||
|         {% block content %} |         {% block content %} | ||||||
|         {% endblock %} |         {% endblock %} | ||||||
|     </div> |     </div> | ||||||
| 
 | 
 | ||||||
|     <!-- Footer --> |     <!-- Footer --> | ||||||
|     {% if request.user.is_authenticated %} |     {% if request.user.is_authenticated %} | ||||||
|     <footer class="footer-vm"> |         <footer class="footer-vm"> | ||||||
|         <div class="container"> |             <div class="container"> | ||||||
|             <p class="copyright text-muted small">Copyright © ungleich GmbH {% now "Y" %}. {% trans "All Rights Reserved" %}</p> |                 <p class="copyright text-muted small">Copyright © ungleich GmbH {% now "Y" %}. {% trans "All Rights Reserved" %}</p> | ||||||
|         </div> |             </div> | ||||||
|     </footer> |         </footer> | ||||||
|     {% else %} |     {% else %} | ||||||
|         <div class="footer-light"> |         <div class="footer-light"> | ||||||
|             {% include "datacenterlight/includes/_footer.html" %} |             {% include "datacenterlight/includes/_footer.html" %} | ||||||
|  |  | ||||||
|  | @ -1,21 +1,17 @@ | ||||||
| {% extends "hosting/base_short.html" %} | {% extends "hosting/base_short.html" %} | ||||||
| {% load staticfiles bootstrap3%} | {% load staticfiles bootstrap3 i18n %} | ||||||
| {% load i18n %} |  | ||||||
| 
 | 
 | ||||||
| {% block navbar %} | {% block navbar %} | ||||||
|     {% include  'hosting/includes/_navbar_transparent.html' %} |     {% include 'hosting/includes/_navbar_transparent.html' %} | ||||||
| {% endblock navbar %} | {% endblock navbar %} | ||||||
| 
 | 
 | ||||||
| {% block content %} | {% block content %} | ||||||
| <div class="auth-container"> |     <div class="auth-container"> | ||||||
|    <div class="auth-bg"></div> |         <div class="auth-bg"></div> | ||||||
|         <div class="auth-center"> |         <div class="auth-center"> | ||||||
|             <div class="auth-title"> |  | ||||||
|                 <h2>{% trans "Your VM hosted in Switzerland"%}</h2> |  | ||||||
|             </div> |  | ||||||
|             <div class="auth-content"> |             <div class="auth-content"> | ||||||
|                 <div class="intro-message auth-box sign-up"> |                 <div class="auth-box sign-up"> | ||||||
|                      <h2  class="section-heading">{% trans "Set your new password"%}</h2> |                     <h1 class="section-heading">{% trans "Set your new password" %}</h1> | ||||||
|                     {% if messages %} |                     {% if messages %} | ||||||
|                         <ul class="list-unstyled msg-list"> |                         <ul class="list-unstyled msg-list"> | ||||||
|                         {% for message in messages %} |                         {% for message in messages %} | ||||||
|  | @ -28,23 +24,18 @@ | ||||||
|                         {% for field in form %} |                         {% for field in form %} | ||||||
|                             {% bootstrap_field field show_label=False %} |                             {% bootstrap_field field show_label=False %} | ||||||
|                         {% endfor %} |                         {% endfor %} | ||||||
|                         {% buttons %} |                         <div class="text-center"> | ||||||
|                             <button type="submit" class="btn btn-block btn-success"> |                             <button type="submit" class="btn choice-btn"> | ||||||
|                             {% trans "Reset"%} |                                 {% trans "Reset" %} | ||||||
|                             </button> |                             </button> | ||||||
|                         {% endbuttons %} |                         </div> | ||||||
|                     </form> |                     </form> | ||||||
|                     <div class="auth-footer"> |                     <div class="auth-footer"> | ||||||
|                         <div class="text"> |                         <span>{% trans "Already have an account ?" %}</span>  | ||||||
|                             <span>{% trans "Already have an account ?"%}</span> |                         <a class="unlink" href="{% url 'hosting:login' %}">{% trans "Login" %}</a> | ||||||
|                         </div> |  | ||||||
|                         <div class="links"> |  | ||||||
|                            <a class="unlink" href="{% url 'hosting:login' %}">{% trans "Login"%}</a> |  | ||||||
|                         </div> |  | ||||||
|                     </div> |                     </div> | ||||||
|                 </div> |                 </div> | ||||||
|             </div> |             </div> | ||||||
| 
 |  | ||||||
|         </div> |         </div> | ||||||
| </div> |     </div> | ||||||
| {% endblock %} | {% endblock %} | ||||||
|  |  | ||||||
|  | @ -1,14 +1,51 @@ | ||||||
| {% extends "datacenterlight/emails/base_email_datacenterlight.html" %} | {% load static i18n %} | ||||||
| {% load i18n %} | <!DOCTYPE html> | ||||||
| {% block email_head %}{{page_header}}{% endblock %} | <html> | ||||||
| {% block email_body %} | 
 | ||||||
| {% url 'hosting:orders' order.id as order_url %} | <head> | ||||||
| {% blocktrans with vm.name as vm_name %}You have ordered a new virtual machine! |     <meta charset="UTF-8"> | ||||||
| <br/> |     <meta name="viewport" content="width=device-width, initial-scale=1"> | ||||||
| Your order of [{{vm_name}}] has been charged.<br/><br/> |     <title>{% blocktrans %}Your New VM {{vm_name}}{% endblocktrans %}</title> | ||||||
| You can view your invoice by clicking the button below.<br/><br/> |     <link rel="shortcut icon" href="{{ base_url }}{% static 'datacenterlight/img/favicon.ico' %}" type="image/x-icon"> | ||||||
| {% endblocktrans %} |     <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:300,400"> | ||||||
| <div class="button" style="border-collapse: collapse; font-family: 'Lato', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; padding: 30px 0;" align="center"> | </head> | ||||||
|     <a href="{{ base_url }}{{order_url}}" style="border-radius: 5px; color: #ffffff; display: inline-block; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; font-weight: regular; line-height: 45px; text-align: center; text-decoration: none !important; width: 155px; -webkit-text-size-adjust: none; mso-hide: all; background: #ff6f6f;">{% trans 'View Invoice' %}</a> | 
 | ||||||
| </div> | <body style="margin: 0; padding: 20px 0;"> | ||||||
| {% endblock %} |     <table style="width: 100%; border-spacing: 0; border-collapse: collapse; max-width: 560px;"> | ||||||
|  |         <tr> | ||||||
|  |             <td> | ||||||
|  |                 <img src="{{ base_url }}{% static 'datacenterlight/img/logo_black.png' %}" style="width: 200px; height: 50px;"> | ||||||
|  |             </td> | ||||||
|  |         </tr> | ||||||
|  |         <tr> | ||||||
|  |             <td style="padding-top: 15px;"> | ||||||
|  |                 <h1 style="font-family: Lato, Arial, sans-serif; font-size: 25px; font-weight: 400; margin: 0;">{% blocktrans %}Your New VM {{ vm_name }}{% endblocktrans %}</h1> | ||||||
|  |             </td> | ||||||
|  |         </tr> | ||||||
|  |         <tr> | ||||||
|  |             <td style="padding-top: 25px; font-size: 16px;"> | ||||||
|  |                 <p style="line-height: 1.75; font-family: Lato, Arial, sans-serif; font-weight: 300; margin: 0;"> | ||||||
|  |                     {% blocktrans %}You have ordered a new virtual machine!{% endblocktrans %} | ||||||
|  |                 </p> | ||||||
|  |                 <p style="line-height: 1.75; font-family: Lato, Arial, sans-serif; font-weight: 300; margin: 0;"> | ||||||
|  |                     {% blocktrans %}Your order of <strong>{{ vm_name }}</strong> has been charged.{% endblocktrans %} | ||||||
|  |                 </p> | ||||||
|  |                 <p style="line-height: 1.75; font-family: Lato, Arial, sans-serif; font-weight: 300; margin: 0;"> | ||||||
|  |                     {% blocktrans %}You can view your VM detail by clicking the button below.{% endblocktrans %} | ||||||
|  |                 </p> | ||||||
|  |             </td> | ||||||
|  |         </tr> | ||||||
|  |         <tr> | ||||||
|  |             <td style="padding-top: 30px;"> | ||||||
|  |                 <a class="btn" href="{{ base_url }}{{ order_url }}" style="font-family: Lato, Arial, sans-serif; text-decoration: none; background-color: #1596da; color: #fff; padding-top: 10px; padding-bottom: 10px; padding-left: 30px; padding-right: 30px; letter-spacing: 0.5px; border-radius: 3px; display: inline-block; position: relative;">{% trans "View Detail" %}</a> | ||||||
|  |             </td> | ||||||
|  |         </tr> | ||||||
|  |         <tr> | ||||||
|  |             <td style="padding-top: 40px; padding-bottom: 25px;"> | ||||||
|  |                 <h3 style="font-family: Lato, Arial, sans-serif; margin: 0; font-weight: 400; font-size: 15px;">{% trans "Your Data Center Light Team" %}</h3> | ||||||
|  |             </td> | ||||||
|  |         </tr> | ||||||
|  |     </table> | ||||||
|  | </body> | ||||||
|  | 
 | ||||||
|  | </html> | ||||||
|  | @ -1,11 +1,11 @@ | ||||||
| {% extends "datacenterlight/emails/base_email_datacenterlight.txt" %} |  | ||||||
| {% load i18n %} | {% load i18n %} | ||||||
| {% block email_head %}{{page_header}}{% endblock %} | 
 | ||||||
| {% block email_body %} | {% blocktrans %}Your New VM {{vm_name}}{% endblocktrans %} | ||||||
| {% url 'hosting:orders' order.id as order_url %} | 
 | ||||||
| {% blocktrans with vm.name as vm_name %}You have ordered a new virtual machine! | {% blocktrans %}You have ordered a new virtual machine!{% endblocktrans %} | ||||||
| Your order of [{{vm_name}}] has been charged. | {% blocktrans %}Your order of {{vm_name}} has been charged.{% endblocktrans %} | ||||||
| You can view your invoice here. | {% blocktrans %}You can view your VM detail by following the link below.{% endblocktrans %} | ||||||
| {% endblocktrans %} | 
 | ||||||
| {{ base_url }}{{order_url}} | {{ base_url }}{{ order_url }} | ||||||
| {% endblock %} | 
 | ||||||
|  | {% trans "Your Data Center Light Team" %} | ||||||
|  | @ -1,14 +1,52 @@ | ||||||
| {% extends "datacenterlight/emails/base_email_datacenterlight.html" %} | {% load static i18n %} | ||||||
| {% load i18n %} | <!DOCTYPE html> | ||||||
| {% block email_head %} | <html> | ||||||
| {% trans 'Password Reset' %} | 
 | ||||||
| {% endblock %} | <head> | ||||||
| {% block email_body %} |     <meta charset="UTF-8"> | ||||||
| {% url 'hosting:reset_password_confirm' uidb64=uid token=token as password_reset_url %} |     <meta name="viewport" content="width=device-width, initial-scale=1"> | ||||||
| {% blocktrans %} |     <title>{% trans "Password Reset" %}</title> | ||||||
| You're receiving this email because you requested a password reset for your user account at {{site_name}}.<br/> |     <link rel="shortcut icon" href="{{ base_url }}{% static 'datacenterlight/img/favicon.ico' %}" type="image/x-icon"> | ||||||
| Please go to the following page and choose a new password: {{base_url}}{{ password_reset_url }}<br/> |     <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:300,400"> | ||||||
| If you didn't request a new password, ignore this e-mail.<br/> | </head> | ||||||
| Thank you! | 
 | ||||||
| {% endblocktrans %} | <body style="margin: 0; padding: 20px 0;"> | ||||||
| {% endblock %} |     <table style="width: 100%; border-spacing: 0; border-collapse: collapse; max-width: 560px;"> | ||||||
|  |         <tr> | ||||||
|  |             <td> | ||||||
|  |                 <img src="{{base_url}}{% static 'datacenterlight/img/logo_black.png' %}" style="width: 200px; height: 50px;"> | ||||||
|  |             </td> | ||||||
|  |         </tr> | ||||||
|  |         <tr> | ||||||
|  |             <td style="padding-top: 15px;"> | ||||||
|  |                 <h1 style="font-family: Lato, Arial, sans-serif; font-size: 25px; font-weight: 400; margin: 0;">{% trans "Password Reset" %}</h1> | ||||||
|  |             </td> | ||||||
|  |         </tr> | ||||||
|  |         <tr> | ||||||
|  |             <td style="padding-top: 25px; font-size: 16px;"> | ||||||
|  |                 <p style="line-height: 1.75; font-family: Lato, Arial, sans-serif; font-weight: 300; margin-bottom: 10px; margin-top: 0;"> | ||||||
|  |                     {% trans "We received a request to reset your password." %} | ||||||
|  |                 </p> | ||||||
|  |                 <p style="line-height: 1.75; font-family: Lato, Arial, sans-serif; font-weight: 300; margin-bottom: 10px; margin-top: 0;"> | ||||||
|  |                     {% trans "If you didn't make this request you can safely ignore this email." %} | ||||||
|  |                 <p style="line-height: 1.75; font-family: Lato, Arial, sans-serif; font-weight: 300; margin-bottom: 10px; margin-top: 0;"> | ||||||
|  |                     {% trans "Otherwise, click here to reset your password." %} | ||||||
|  |                 </p> | ||||||
|  |                 <p style="color: #4382c8; line-height: 1.4; font-family: Lato, Arial, sans-serif; font-weight: 300; margin: 0;"> | ||||||
|  |                     {% url 'hosting:reset_password_confirm' uidb64=uid token=token as password_reset_url %} | ||||||
|  |                     {{base_url}}{{ password_reset_url }} | ||||||
|  |                 </p> | ||||||
|  |                 <p style="line-height: 1.75; font-family: Lato, Arial, sans-serif; font-weight: 300; margin-bottom: 0; margin-top: 10px;"> | ||||||
|  |                     {% trans "Thank you!" %} | ||||||
|  |                 </p> | ||||||
|  |             </td> | ||||||
|  |         </tr> | ||||||
|  |         <tr> | ||||||
|  |             <td style="padding-top: 40px; padding-bottom: 25px;"> | ||||||
|  |                 <h3 style="font-family: Lato, Arial, sans-serif; margin: 0; font-weight: 400; font-size: 15px;">{% trans "Your Data Center Light Team" %}</h3> | ||||||
|  |             </td> | ||||||
|  |         </tr> | ||||||
|  |     </table> | ||||||
|  | </body> | ||||||
|  | 
 | ||||||
|  | </html> | ||||||
|  | @ -1,11 +1,14 @@ | ||||||
| {% extends "datacenterlight/emails/base_email_datacenterlight.txt" %} |  | ||||||
| {% load i18n %} | {% load i18n %} | ||||||
| {% block email_head %}{% trans 'Password Reset' %}{% endblock %} | 
 | ||||||
| {% block email_body %} | {% trans "Password Reset" %} | ||||||
|  | 
 | ||||||
|  | {% trans "We received a request to reset your password." %} | ||||||
|  | {% trans "If you didn't make this request you can safely ignore this email." %} | ||||||
|  | {% trans "Otherwise, click here to reset your password." %} | ||||||
|  | 
 | ||||||
| {% url 'hosting:reset_password_confirm' uidb64=uid token=token as password_reset_url %} | {% url 'hosting:reset_password_confirm' uidb64=uid token=token as password_reset_url %} | ||||||
| {% blocktrans %}You're receiving this email because you requested a password reset for your user account at {{site_name}}. | {{base_url}}{{ password_reset_url }} | ||||||
| Please go to the following page and choose a new password: {{base_url}}{{ password_reset_url }} | 
 | ||||||
| If you didn't request a new password, ignore this e-mail. | {% trans "Thank you!" %} | ||||||
| Thank you! | 
 | ||||||
| {% endblocktrans %} | {% trans "Your Data Center Light Team" %} | ||||||
| {% endblock %} |  | ||||||
|  |  | ||||||
|  | @ -1,15 +1,49 @@ | ||||||
| {% extends "datacenterlight/emails/base_email_datacenterlight.html" %} | {% load static i18n %} | ||||||
| {% load i18n %} | <!DOCTYPE html> | ||||||
| {% block email_head %}{{page_header}}{% endblock %} | <html> | ||||||
| {% block email_body %} | 
 | ||||||
| {% url 'hosting:virtual_machines' as my_virtual_machines_url %} | <head> | ||||||
| {% url 'hosting:orders' as vm_orders_url %} |     <meta charset="UTF-8"> | ||||||
| {% blocktrans with vm.name as vm_name %}You're receiving this mail because your virtual machine [{{vm_name}}] has been cancelled.<br/> |     <meta name="viewport" content="width=device-width, initial-scale=1"> | ||||||
| You can see your order status by clicking [my VM page] below.<br/> |     <title>{% trans "Virtual Machine Cancellation" %}</title> | ||||||
| If you want to order a new virtual machine, you can do it by clicking <a href="{{base_url}}{{my_virtual_machines_url}}">this link</a>.<br/> |     <link rel="shortcut icon" href="{{ base_url }}{% static 'datacenterlight/img/favicon.ico' %}" type="image/x-icon"> | ||||||
| {% endblocktrans %} |     <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:300,400"> | ||||||
| <div class="button" style="border-collapse: collapse; font-family: 'Lato', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; padding: 30px 0;" align="center"> | </head> | ||||||
|     <a href="{{ base_url }}{{vm_orders_url}}" style="border-radius: 5px; color: #ffffff; display: inline-block; font-family: 'Oxygen', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; font-weight: regular; line-height: 45px; text-align: center; text-decoration: none !important; width: 155px; -webkit-text-size-adjust: none; mso-hide: all; background: #ff6f6f;">{% trans 'My VM page' %}</a> | 
 | ||||||
| </div> | <body style="margin: 0; padding: 20px 0;"> | ||||||
| {% endblock %} |     <table style="width: 100%; border-spacing: 0; border-collapse: collapse; max-width: 560px;"> | ||||||
|  |         <tr> | ||||||
|  |             <td> | ||||||
|  |                 <img src="{{ base_url }}{% static 'datacenterlight/img/logo_black.png' %}" style="width: 200px; height: 50px;"> | ||||||
|  |             </td> | ||||||
|  |         </tr> | ||||||
|  |         <tr> | ||||||
|  |             <td style="padding-top: 15px;"> | ||||||
|  |                 <h1 style="font-family: Lato, Arial, sans-serif; font-size: 25px; font-weight: 400; margin: 0;">{% trans "Virtual Machine Cancellation" %}</h1> | ||||||
|  |             </td> | ||||||
|  |         </tr> | ||||||
|  |         <tr> | ||||||
|  |             <td style="padding-top: 25px; font-size: 16px;"> | ||||||
|  |                 <p style="line-height: 1.75; font-family: Lato, Arial, sans-serif; font-weight: 300; margin: 0;"> | ||||||
|  |                     {% blocktrans %}You are receiving this email because your virutal machine <strong>{{ vm_name }}</strong> has been cancelled.{% endblocktrans %} | ||||||
|  |                 </p> | ||||||
|  |                 <p style="line-height: 1.75; font-family: Lato, Arial, sans-serif; font-weight: 300; margin: 0;"> | ||||||
|  |                     {% blocktrans %}You can always order a new VM by clicking the button below.{% endblocktrans %} | ||||||
|  |                 </p> | ||||||
|  |             </td> | ||||||
|  |         </tr> | ||||||
|  |         <tr> | ||||||
|  |             <td style="padding-top: 30px;"> | ||||||
|  |                 <a class="btn" href="{{ base_url }}{% url 'hosting:create_virtual_machine' %}" style="font-family: Lato, Arial, sans-serif; text-decoration: none; background-color: #1596da; color: #fff; padding-top: 10px; padding-bottom: 10px; padding-left: 30px; padding-right: 30px; letter-spacing: 0.5px; border-radius: 3px; display: inline-block; position: relative;">{% trans "CREATE VM" %}</a> | ||||||
|  |             </td> | ||||||
|  |         </tr> | ||||||
|  |         <tr> | ||||||
|  |             <td style="padding-top: 40px; padding-bottom: 25px;"> | ||||||
|  |                 <h3 style="font-family: Lato, Arial, sans-serif; margin: 0; font-weight: 400; font-size: 15px;">{% trans "Your Data Center Light Team" %}</h3> | ||||||
|  |             </td> | ||||||
|  |         </tr> | ||||||
|  |     </table> | ||||||
|  | </body> | ||||||
|  | 
 | ||||||
|  | </html> | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,13 +1,10 @@ | ||||||
| {% extends "datacenterlight/emails/base_email_datacenterlight.txt" %} |  | ||||||
| {% load i18n %} | {% load i18n %} | ||||||
| {% block email_head %}{{page_header}}{% endblock %} | 
 | ||||||
| {% block email_body %} | {% trans "Virtual Machine Cancellation" %} | ||||||
| {% url 'hosting:virtual_machines' as my_virtual_machines_url %} | 
 | ||||||
| {% url 'hosting:orders' order.id as vm_order_url %} | {% blocktrans %}You are receiving this email because your virutal machine {{vm_name}} has been cancelled.{% endblocktrans %} | ||||||
| {% blocktrans with vm.name as vm_name %}You're receiving this mail because your virtual machine [{{vm_name}}] has been cancelled. | {% blocktrans %}You can always order a new VM by following the link below.{% endblocktrans %} | ||||||
| You can see your order status by clicking here | 
 | ||||||
| {{base_url}}{{vm_order_url}} | {{ base_url }}{% url 'hosting:create_virtual_machine' %} | ||||||
| If you want to order a new virtual machine, you can do it by clicking this link. | 
 | ||||||
| {{base_url}}{{my_virtual_machines_url}} | {% trans "Your Data Center Light Team" %} | ||||||
| {% endblocktrans %} |  | ||||||
| {% endblock %} |  | ||||||
|  | @ -1,8 +1,7 @@ | ||||||
| {% if messages %} | {% if messages %} | ||||||
|     <ul class="list-unstyled msg-list"> |     <ul class="list-unstyled msg-list"> | ||||||
|     {% for message in messages %} |     {% for message in messages %} | ||||||
|         <div |         <div class="alert {% if message.tags and message.tags == 'error' %} alert-danger {% else %} alert-{{message.tags}} {% endif %}">{{ message|safe }}</div> | ||||||
|                 class="alert {% if message.tags and message.tags == 'error' %} alert-danger {% else %} alert-{{message.tags}} {% endif %}">{{ message|safe }}</div> |  | ||||||
|     {% endfor %} |     {% endfor %} | ||||||
|     </ul> |     </ul> | ||||||
| {% endif %} | {% endif %} | ||||||
|  | @ -1,11 +1,13 @@ | ||||||
| {% load static i18n %} | {% load static i18n %} | ||||||
| 
 | 
 | ||||||
| <nav class="navbar navbar-default  topnav navbar-transparent" role="navigation"> | <nav class="navbar navbar-default  topnav navbar-transparent" role="navigation"> | ||||||
|     <div class="topnav"> |     <div class="container"> | ||||||
|         <!-- Brand and toggle get grouped for better mobile display --> |         <div class="topnav"> | ||||||
|         <div class="navbar-header"> |             <!-- Brand and toggle get grouped for better mobile display --> | ||||||
|             <a id="logoWhite" class="navbar-brand topnav" href="{% url 'datacenterlight:index' %}"><img src="{% static 'datacenterlight/img/logo_white.svg' %}"></a> |             <div class="navbar-header"> | ||||||
|  |                 <a id="logoWhite" class="navbar-brand topnav" href="{% url 'datacenterlight:index' %}"><img src="{% static 'datacenterlight/img/logo_white.svg' %}"></a> | ||||||
|  |             </div> | ||||||
|         </div> |         </div> | ||||||
|  |         <!-- /.container --> | ||||||
|     </div> |     </div> | ||||||
|     <!-- /.container --> |  | ||||||
| </nav> | </nav> | ||||||
|  | @ -1,49 +1,43 @@ | ||||||
| {% extends "hosting/base_short.html" %} | {% extends "hosting/base_short.html" %} | ||||||
| {% load i18n %} | {% load i18n staticfiles bootstrap3%} | ||||||
| {% load staticfiles bootstrap3%} |  | ||||||
| 
 | 
 | ||||||
| {% block navbar %} | {% block navbar %} | ||||||
|     {% include  'hosting/includes/_navbar_transparent.html' %} |     {% include 'hosting/includes/_navbar_transparent.html' %} | ||||||
| {% endblock navbar %} | {% endblock navbar %} | ||||||
| 
 | 
 | ||||||
| {% block content %} | {% block content %} | ||||||
| <div class="auth-container"> |     <div class="auth-container"> | ||||||
|     <div class="auth-bg"></div> |         <div class="auth-bg"></div> | ||||||
|     <div class="auth-center"> |         <div class="auth-center"> | ||||||
|         <div class="auth-title"> |             <div class="auth-content"> | ||||||
|             <h2>{% trans "Your VM hosted in Switzerland"%}</h2> |                 <div class="auth-box"> | ||||||
|         </div> |                     <h1 class="section-heading allcaps">{% trans "Log in" %}</h1> | ||||||
|         <div class="auth-content"> |                     {% include 'hosting/includes/_messages.html' %} | ||||||
|             <div class="intro-message auth-box"> |                     <form action="{% url 'hosting:login' %}" method="post" class="form" novalidated> | ||||||
|                 <h2 class="section-heading">{% trans "Login"%}</h2> |                         {% csrf_token %} | ||||||
|                 {% include  'hosting/includes/_messages.html' %} |                         {% for field in form %} | ||||||
|                 <form action="{% url 'hosting:login' %}" method="post" class="form" novalidated> |                             {% bootstrap_field field show_label=False type='fields'%} | ||||||
|                     {% csrf_token %} |                         {% endfor %} | ||||||
|                     {% for field in form %} |                         <p class="red">{{form.non_field_errors|striptags}}</p> | ||||||
|                         {% bootstrap_field field show_label=False type='fields'%} |                         <div class="text-center"> | ||||||
|                     {% endfor %} |                             <button type="submit" class="btn choice-btn"> | ||||||
|                     <p class="red">{{form.non_field_errors|striptags}}</p> |                                 {% trans "Log in" %} | ||||||
|                     {% buttons %} |                             </button> | ||||||
|                         <button type="submit" class="btn btn-block btn-success"> |                         </div> | ||||||
|                             {% trans "Login"%} |     					<input type='hidden' name='next' value='{{request.GET.next}}'/> | ||||||
|                         </button> |                     </form> | ||||||
|                     {% endbuttons %} |                     <div class="auth-footer"> | ||||||
| 					<input type='hidden' name='next' value='{{request.GET.next}}'/> |                         <div> | ||||||
|                 </form> |                             {% trans "Don't have an account yet ?" %}  | ||||||
|                 <div class="auth-footer"> |                             <a class="" href="{% url 'hosting:signup' %}">{% trans "Sign up" %}</a> | ||||||
|                     <div class="text"> |                         </div> | ||||||
|                         <span>{% trans "Don't have an account yet ? "%}</span> |                         <div> | ||||||
|                     </div> |                             or <a href="{% url 'hosting:reset_password' %}">{% trans "Forgot your password ?" %}</a><br> | ||||||
|                     <div class="links"> |                             or <a href="{% url 'hosting:resend_activation_link' %}">{% trans "Resend activation link" %}</a> | ||||||
|                         <a class="unlink" href="{% url 'hosting:signup' %}">{% trans "Sign up"%}</a> |                         </div> | ||||||
|                         <span class="text"> or </span> |  | ||||||
|                         <a class="unlink" href="{% url 'hosting:reset_password' %}">{% trans "Forgot your password ? "%}</a> |  | ||||||
|                         <span class="text"> or </span><br/> |  | ||||||
|                         <a class="unlink" href="{% url 'hosting:resend_activation_link' %}">{% trans "Resend activation link"%}</a> |  | ||||||
|                     </div> |                     </div> | ||||||
|                 </div> |                 </div> | ||||||
|             </div> |             </div> | ||||||
|         </div> |         </div> | ||||||
|     </div> |     </div> | ||||||
| </div> |  | ||||||
| {% endblock %} | {% endblock %} | ||||||
|  |  | ||||||
|  | @ -32,11 +32,11 @@ | ||||||
|             {% endif %} |             {% endif %} | ||||||
|             <p> |             <p> | ||||||
|                 <strong>{% trans "Date" %}:</strong> |                 <strong>{% trans "Date" %}:</strong> | ||||||
|                 <span id="order-created_at"> |                 <span class="locale_date"> | ||||||
|                     {% if order %} |                     {% if order %} | ||||||
|                         {{order.created_at|date:'Y-m-d H:i'}} |                         {{order.created_at|date:'Y-m-d h:i a'}} | ||||||
|                     {% else %} |                     {% else %} | ||||||
|                         {% now "Y-m-d H:i" %} |                         {% now "Y-m-d h:i a" %} | ||||||
|                     {% endif %} |                     {% endif %} | ||||||
|                 </span> |                 </span> | ||||||
|             </p> |             </p> | ||||||
|  | @ -107,7 +107,9 @@ | ||||||
|                         {% if vm.created_at %} |                         {% if vm.created_at %} | ||||||
|                             <p> |                             <p> | ||||||
|                                 <span>{% trans "Period" %}: </span> |                                 <span>{% trans "Period" %}: </span> | ||||||
|                                 <span>{{ vm.created_at|date:'Y/m/d' }} - {% if vm.terminated_at %}{{ vm.terminated_at|date:'Y/m/d' }}{% else %}{% now 'Y/m/d' %}{% endif %}</span> |                                 <span> | ||||||
|  |                                     <span class="locale_date" data-format="YYYY/MM/DD">{{ vm.created_at|date:'Y-m-d h:i a' }}</span> - <span class="locale_date" data-format="YYYY/MM/DD">{{ subscription_end_date|date:'Y-m-d h:i a' }}</span> | ||||||
|  |                                 </span> | ||||||
|                             </p> |                             </p> | ||||||
|                         {% endif %} |                         {% endif %} | ||||||
|                         <p> |                         <p> | ||||||
|  | @ -194,12 +196,16 @@ | ||||||
| <script type="text/javascript"> | <script type="text/javascript"> | ||||||
|     {% trans "Some problem encountered. Please try again later." as err_msg %} |     {% trans "Some problem encountered. Please try again later." as err_msg %} | ||||||
|     var create_vm_error_message = '{{err_msg|safe}}'; |     var create_vm_error_message = '{{err_msg|safe}}'; | ||||||
| 
 |  | ||||||
|     window.onload = function () { |     window.onload = function () { | ||||||
|         var locale_date = moment.utc(document.getElementById("order-created_at").textContent, 'YYYY-MM-DD HH:mm').toDate(); |         var locale_dates = document.getElementsByClassName("locale_date"); | ||||||
|         locale_date = moment(locale_date).format("YYYY-MM-DD h:mm:ss a"); |         var formats = ['YYYY-MM-DD hh:mm a'] | ||||||
|         document.getElementById('order-created_at').innerHTML = locale_date; |         var i; | ||||||
| 
 |         for (i = 0; i < locale_dates.length; i++) { | ||||||
|  |             var oldDate = moment.utc(locale_dates[i].textContent, formats); | ||||||
|  |             var outputFormat = locale_dates[i].getAttribute('data-format') || oldDate._f; | ||||||
|  |             locale_dates[i].innerHTML = oldDate.local().format(outputFormat); | ||||||
|  |             locale_dates[i].className += ' done'; | ||||||
|  |         } | ||||||
|     }; |     }; | ||||||
| </script> | </script> | ||||||
| {%endblock%} | {%endblock%} | ||||||
|  |  | ||||||
|  | @ -1,37 +1,40 @@ | ||||||
| {% extends "hosting/base_short.html" %} | {% extends "hosting/base_short.html" %} | ||||||
| {% load staticfiles bootstrap3%} | {% load staticfiles bootstrap3 i18n %} | ||||||
| {% load i18n %} |  | ||||||
| 
 | 
 | ||||||
| {% block navbar %} | {% block navbar %} | ||||||
|     {% include  'hosting/includes/_navbar_transparent.html' %} |     {% include 'hosting/includes/_navbar_transparent.html' %} | ||||||
| {% endblock navbar %} | {% endblock navbar %} | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| {% block content %} | {% block content %} | ||||||
| <div class="auth-container"> |     <div class="auth-container"> | ||||||
|    <div class="auth-bg"></div> |        <div class="auth-bg"></div> | ||||||
|         <div class="auth-center"> |         <div class="auth-center"> | ||||||
|             <div class="auth-title"> |             <div class="auth-content wide"> | ||||||
|                 <h2>{% trans "Your VM hosted in Switzerland"%}</h2> |                 <div class="auth-box sign-up"> | ||||||
|             </div> |                     <h1 class="section-heading">{% trans "Resend activation link" %}</h1> | ||||||
|             <div class="auth-content"> |                     {% include 'hosting/includes/_messages.html' %} | ||||||
|                 <div class="intro-message auth-box sign-up"> |  | ||||||
|                     <h2  class="section-heading">{% trans "Resend activation link"%}</h2> |  | ||||||
|                     {% include  'hosting/includes/_messages.html' %} |  | ||||||
|                     <form action="{% url 'hosting:resend_activation_link' %}" method="post" class="form" novalidate> |                     <form action="{% url 'hosting:resend_activation_link' %}" method="post" class="form" novalidate> | ||||||
|                         {% csrf_token %} |                         {% csrf_token %} | ||||||
|                         {% for field in form %} |                         {% for field in form %} | ||||||
|                             {% bootstrap_field field show_label=False %} |                             {% bootstrap_field field show_label=False %} | ||||||
|                         {% endfor %} |                         {% endfor %} | ||||||
|                         {% buttons %} |                         <div class="text-center"> | ||||||
|                             <button type="submit" class="btn btn-block btn-success"> |                             <button type="submit" class="btn choice-btn"> | ||||||
|                                 {% trans "Submit"%} |                                 {% trans "Submit"%} | ||||||
|                             </button> |                             </button> | ||||||
|                         {% endbuttons %} |                         </div> | ||||||
|                     </form> |                     </form> | ||||||
| 
 |                     <div class="auth-footer"> | ||||||
|  |                         <div> | ||||||
|  |                             {% trans "Don't have an account yet ?" %}  | ||||||
|  |                             <a class="" href="{% url 'hosting:signup' %}">{% trans "Sign up" %}</a> | ||||||
|  |                         </div> | ||||||
|  |                         <div> | ||||||
|  |                             or <a href="{% url 'hosting:reset_password' %}">{% trans "Forgot your password ?" %}</a> | ||||||
|  |                         </div> | ||||||
|  |                     </div> | ||||||
|                 </div> |                 </div> | ||||||
|             </div> |             </div> | ||||||
|         </div> |         </div> | ||||||
| </div> |     </div> | ||||||
| {% endblock %} | {% endblock %} | ||||||
|  |  | ||||||
|  | @ -1,44 +1,37 @@ | ||||||
| {% extends "hosting/base_short.html" %} | {% extends "hosting/base_short.html" %} | ||||||
| {% load staticfiles bootstrap3%} | {% load i18n staticfiles bootstrap3%} | ||||||
| {% load i18n %} |  | ||||||
| 
 | 
 | ||||||
| {% block navbar %} | {% block navbar %} | ||||||
|     {% include  'hosting/includes/_navbar_transparent.html' %} |     {% include 'hosting/includes/_navbar_transparent.html' %} | ||||||
| {% endblock navbar %} | {% endblock navbar %} | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| {% block content %} | {% block content %} | ||||||
| <div class="auth-container"> |     <div class="auth-container"> | ||||||
|    <div class="auth-bg"></div> |         <div class="auth-bg"></div> | ||||||
|         <div class="auth-center"> |         <div class="auth-center"> | ||||||
|             <div class="auth-title"> |  | ||||||
|                 <h2>{% trans "Your VM hosted in Switzerland"%}</h2> |  | ||||||
|             </div> |  | ||||||
|             <div class="auth-content"> |             <div class="auth-content"> | ||||||
|                 <div class="intro-message auth-box sign-up"> |                 <div class="auth-box sign-up"> | ||||||
|                     <h2  class="section-heading">{% trans "Reset your password"%}</h2> |                     <h1 class="section-heading">{% trans "Password reset" %}</h1> | ||||||
|                     {% include  'hosting/includes/_messages.html' %} |                     {% include 'hosting/includes/_messages.html' %} | ||||||
|                     <form action="{% url 'hosting:reset_password' %}" method="post" class="form" novalidate> |                     <form action="{% url 'hosting:reset_password' %}" method="post" class="form" novalidate> | ||||||
|                         {% csrf_token %} |                         {% csrf_token %} | ||||||
|                         {% for field in form %} |                         {% for field in form %} | ||||||
|                             {% bootstrap_field field show_label=False %} |                             {% bootstrap_field field show_label=False %} | ||||||
|                         {% endfor %} |                         {% endfor %} | ||||||
|                         {% buttons %} |                         <div class="text-center"> | ||||||
|                             <button type="submit" class="btn btn-block btn-success"> |                             <button type="submit" class="btn choice-btn"> | ||||||
|                                 {% trans "Reset"%} |                                 {% trans "Reset" %} | ||||||
|                             </button> |                             </button> | ||||||
|                         {% endbuttons %} |                         </div> | ||||||
|                     </form> |                     </form> | ||||||
|                     <div class="auth-footer"> |                     <div class="auth-footer"> | ||||||
|                         <div class="text"> |                         <div> | ||||||
|                             <span>{% trans "Already have an account ?"%}</span> |                             <span>{% trans "Already have an account ?" %}</span>  | ||||||
|                         </div> |                             <a href="{% url 'hosting:login' %}">{% trans "Login" %}</a> | ||||||
|                         <div class="links"> |  | ||||||
|                            <a class="unlink" href="{% url 'hosting:login' %}">{% trans "Login"%}</a> |  | ||||||
|                         </div> |                         </div> | ||||||
|                     </div> |                     </div> | ||||||
|                 </div> |                 </div> | ||||||
|             </div> |             </div> | ||||||
|         </div> |         </div> | ||||||
| </div> |     </div> | ||||||
| {% endblock %} | {% endblock %} | ||||||
|  |  | ||||||
|  | @ -2,41 +2,36 @@ | ||||||
| {% load staticfiles bootstrap3 i18n %} | {% load staticfiles bootstrap3 i18n %} | ||||||
| 
 | 
 | ||||||
| {% block navbar %} | {% block navbar %} | ||||||
|     {% include  'hosting/includes/_navbar_transparent.html' %} |     {% include 'hosting/includes/_navbar_transparent.html' %} | ||||||
| {% endblock navbar %} | {% endblock navbar %} | ||||||
| 
 | 
 | ||||||
| {% block content %} | {% block content %} | ||||||
| <div class="auth-container auth-signup"> |     <div class="auth-container auth-signup"> | ||||||
|    <div class="auth-bg"></div> |         <div class="auth-bg"></div> | ||||||
|     <div class="auth-center "> |         <div class="auth-center "> | ||||||
|         <div class="auth-title"> |             <div class="auth-content"> | ||||||
|             <h2>{% trans "Your VM hosted in Switzerland"%}</h2> |                 <div class="auth-box sign-up"> | ||||||
|         </div> |                     <h1 class="section-heading allcaps">{% trans "Sign up" %}</h1> | ||||||
|         <div class="auth-content"> |                     {% include 'hosting/includes/_messages.html' %} | ||||||
|             <div class="intro-message auth-box sign-up"> |                     <form action="{% url 'hosting:signup' %}" method="post" class="form" novalidate> | ||||||
|                 <h2  class="section-heading">{% trans "Sign up"%}</h2> |                         {% csrf_token %} | ||||||
|                 {% include  'hosting/includes/_messages.html' %} |                         {% for field in form %} | ||||||
|                 <form action="{% url 'hosting:signup' %}" method="post" class="form" novalidate> |                             {% bootstrap_field field show_label=False %} | ||||||
|                     {% csrf_token %} |                         {% endfor %} | ||||||
|                     {% for field in form %} |                         <div class="text-center"> | ||||||
|                         {% bootstrap_field field show_label=False %} |                             <button type="submit" class="btn choice-btn"> | ||||||
|                     {% endfor %} |                                 {% trans "Sign up" %} | ||||||
|                     {% buttons %} |                             </button> | ||||||
|                         <button type="submit" class="btn btn-block btn-info"> |                         </div> | ||||||
|                             {% trans "Sign up"%} |                     </form> | ||||||
|                         </button> |                     <div class="auth-footer"> | ||||||
|                     {% endbuttons %} |                         <div> | ||||||
|                 </form> |                             <span>{% trans "Already have an account ?" %}</span>  | ||||||
|                 <div class="auth-footer"> |                             <a href="{% url 'hosting:login' %}">{% trans "Login" %}</a> | ||||||
|                     <div class="text"> |                         </div> | ||||||
|                         <span>{% trans "Already have an account ?"%}</span> |  | ||||||
|                     </div> |  | ||||||
|                     <div class="links"> |  | ||||||
|                        <a class="unlink" href="{% url 'hosting:login' %}">{% trans "Login"%}</a> |  | ||||||
|                     </div> |                     </div> | ||||||
|                 </div> |                 </div> | ||||||
|             </div> |              </div> | ||||||
|          </div> |         </div> | ||||||
|     </div> |     </div> | ||||||
| </div> |  | ||||||
| {% endblock %} | {% endblock %} | ||||||
|  |  | ||||||
|  | @ -6,21 +6,17 @@ | ||||||
| {% endblock navbar %} | {% endblock navbar %} | ||||||
| 
 | 
 | ||||||
| {% block content %} | {% block content %} | ||||||
| <div class="auth-container"> |     <div class="auth-container"> | ||||||
|    <div class="auth-bg"></div> |         <div class="auth-bg"></div> | ||||||
|     <div class="auth-center"> |         <div class="auth-center"> | ||||||
|             <div class="auth-title"> |             <div class="auth-content wide"> | ||||||
|                 <h2>{% trans "Your VM hosted in Switzerland"%}</h2> |  | ||||||
|                 {% include  'hosting/includes/_messages.html' %} |  | ||||||
|             </div> |  | ||||||
|             <div class="auth-content"> |  | ||||||
|                 <div class="intro-message auth-box sign-up"> |                 <div class="intro-message auth-box sign-up"> | ||||||
|                     <h2  class="section-heading">{{section_title}}</h2> |                     <h2 class="section-heading">{{section_title}}</h2> | ||||||
|                     <div class="sign-up-message"> |                     <div class="sign-up-message"> | ||||||
|                          {{message}} |                         {{message}} | ||||||
|                     </div> |                     </div> | ||||||
|                 </div> |                 </div> | ||||||
|  |             </div> | ||||||
|         </div> |         </div> | ||||||
|     </div> |     </div> | ||||||
| </div> |  | ||||||
| {% endblock %} | {% endblock %} | ||||||
|  |  | ||||||
|  | @ -267,6 +267,8 @@ class SignupValidatedView(SignupValidateView): | ||||||
|         login_url = '<a href="' + \ |         login_url = '<a href="' + \ | ||||||
|                     reverse('hosting:login') + '">' + str(_('login')) + '</a>' |                     reverse('hosting:login') + '">' + str(_('login')) + '</a>' | ||||||
|         section_title = _('Account activation') |         section_title = _('Account activation') | ||||||
|  |         user = CustomUser.objects.filter( | ||||||
|  |             validation_slug=self.kwargs['validate_slug']).first() | ||||||
|         if validated: |         if validated: | ||||||
|             message = ('{account_activation_string} <br />' |             message = ('{account_activation_string} <br />' | ||||||
|                        ' {login_string} {lurl}.').format( |                        ' {login_string} {lurl}.').format( | ||||||
|  | @ -274,6 +276,21 @@ class SignupValidatedView(SignupValidateView): | ||||||
|                     "Your account has been activated."), |                     "Your account has been activated."), | ||||||
|                 login_string=_("You can now"), |                 login_string=_("You can now"), | ||||||
|                 lurl=login_url) |                 lurl=login_url) | ||||||
|  |             email_data = { | ||||||
|  |                 'subject': _('Welcome to Data Center Light!'), | ||||||
|  |                 'to': user.email, | ||||||
|  |                 'context': { | ||||||
|  |                     'base_url': "{0}://{1}".format( | ||||||
|  |                         self.request.scheme, | ||||||
|  |                         self.request.get_host() | ||||||
|  |                     ) | ||||||
|  |                 }, | ||||||
|  |                 'template_name': 'welcome_user', | ||||||
|  |                 'template_path': 'datacenterlight/emails/', | ||||||
|  |                 'from_address': settings.DCL_SUPPORT_FROM_ADDRESS, | ||||||
|  |             } | ||||||
|  |             email = BaseEmail(**email_data) | ||||||
|  |             email.send() | ||||||
|         else: |         else: | ||||||
|             home_url = '<a href="' + \ |             home_url = '<a href="' + \ | ||||||
|                        reverse('datacenterlight:index') + \ |                        reverse('datacenterlight:index') + \ | ||||||
|  | @ -686,6 +703,7 @@ class OrdersHostingDetailView(LoginRequiredMixin, | ||||||
|                     disk_size=context['vm']['disk_size'], |                     disk_size=context['vm']['disk_size'], | ||||||
|                     memory=context['vm']['memory'] |                     memory=context['vm']['memory'] | ||||||
|                 ) |                 ) | ||||||
|  |                 context['subscription_end_date'] = vm_detail.end_date() | ||||||
|             except VMDetail.DoesNotExist: |             except VMDetail.DoesNotExist: | ||||||
|                 try: |                 try: | ||||||
|                     manager = OpenNebulaManager( |                     manager = OpenNebulaManager( | ||||||
|  | @ -1048,6 +1066,7 @@ class VirtualMachineView(LoginRequiredMixin, View): | ||||||
| 
 | 
 | ||||||
|         try: |         try: | ||||||
|             vm_data = VirtualMachineSerializer(manager.get_vm(vm.id)).data |             vm_data = VirtualMachineSerializer(manager.get_vm(vm.id)).data | ||||||
|  |             vm_name = vm_data.get('name') | ||||||
|         except WrongIdError: |         except WrongIdError: | ||||||
|             return redirect(reverse('hosting:virtual_machines')) |             return redirect(reverse('hosting:virtual_machines')) | ||||||
| 
 | 
 | ||||||
|  | @ -1073,10 +1092,11 @@ class VirtualMachineView(LoginRequiredMixin, View): | ||||||
|                 else: |                 else: | ||||||
|                     sleep(2) |                     sleep(2) | ||||||
|             context = { |             context = { | ||||||
|                 'vm': vm_data, |                 'vm_name': vm_name, | ||||||
|                 'base_url': "{0}://{1}".format(self.request.scheme, |                 'base_url': "{0}://{1}".format(self.request.scheme, | ||||||
|                                                self.request.get_host()), |                                                self.request.get_host()), | ||||||
|                 'page_header': _('Virtual Machine Cancellation') |                 'page_header': _('Virtual Machine %(vm_name)s Cancelled') % { | ||||||
|  |                     'vm_name': vm_name} | ||||||
|             } |             } | ||||||
|             email_data = { |             email_data = { | ||||||
|                 'subject': context['page_header'], |                 'subject': context['page_header'], | ||||||
|  |  | ||||||
							
								
								
									
										62
									
								
								ungleich_page/cms_menus.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								ungleich_page/cms_menus.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,62 @@ | ||||||
|  | from menus.base import NavigationNode | ||||||
|  | from menus.menu_pool import menu_pool | ||||||
|  | from django.utils.translation import ugettext_lazy as _ | ||||||
|  | from cms.menu_bases import CMSAttachMenu | ||||||
|  | from cms.templatetags.cms_tags import _get_placeholder | ||||||
|  | from cms.utils.plugins import get_plugins | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class GlasfaserMenu(CMSAttachMenu): | ||||||
|  | 
 | ||||||
|  |     name = _("Glasfaser menu") | ||||||
|  | 
 | ||||||
|  |     def get_nodes(self, request): | ||||||
|  |         nodes = [] | ||||||
|  |         glasfaser_cms = 'ungleich_page/glasfaser_cms_page.html' | ||||||
|  |         if request and request.current_page.get_template() == glasfaser_cms: | ||||||
|  |             template_context = { | ||||||
|  |                 "request": request, | ||||||
|  |             } | ||||||
|  |             placeholder_name_list = [ | ||||||
|  |                 'Top Section', 'Middle Section',  'Glasfaser Services', | ||||||
|  |                 'Glasfaser About', 'Contact Section' | ||||||
|  |             ] | ||||||
|  |             plugins_list = [ | ||||||
|  |                 'SectionWithImage', 'UngelichContactUsSection', | ||||||
|  |                 'UngelichTextSection', 'Service', 'About' | ||||||
|  |             ] | ||||||
|  |             for placeholder_name in placeholder_name_list: | ||||||
|  |                 placeholder = _get_placeholder( | ||||||
|  |                     request.current_page, request.current_page, | ||||||
|  |                     template_context, placeholder_name | ||||||
|  |                 ) | ||||||
|  |                 plugins = get_plugins( | ||||||
|  |                     request, placeholder, request.current_page.get_template() | ||||||
|  |                 ) | ||||||
|  |                 for plugin in plugins: | ||||||
|  |                     if type(plugin).__name__ in plugins_list: | ||||||
|  |                         section_hash = request.build_absolute_uri() | ||||||
|  |                         if hasattr(plugin, 'menu_text'): | ||||||
|  |                             menu_text = plugin.menu_text | ||||||
|  |                             if menu_text.strip() == '': | ||||||
|  |                                 continue | ||||||
|  |                             menu_words = menu_text.split() | ||||||
|  |                             if len(menu_words) > 0: | ||||||
|  |                                 section_hash = '{}#{}'.format( | ||||||
|  |                                     section_hash, | ||||||
|  |                                     menu_words[0] | ||||||
|  |                                 ) | ||||||
|  |                         else: | ||||||
|  |                             continue | ||||||
|  |                         newnode = NavigationNode( | ||||||
|  |                             menu_text, | ||||||
|  |                             url=section_hash, | ||||||
|  |                             id="{}-{}".format( | ||||||
|  |                                 request.current_page.id, plugin.id | ||||||
|  |                             ) | ||||||
|  |                         ) | ||||||
|  |                         nodes.append(newnode) | ||||||
|  |         return nodes | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | menu_pool.register_menu(GlasfaserMenu) | ||||||
							
								
								
									
										147
									
								
								ungleich_page/cms_plugins.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										147
									
								
								ungleich_page/cms_plugins.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,147 @@ | ||||||
|  | from cms.plugin_base import CMSPluginBase | ||||||
|  | from cms.plugin_pool import plugin_pool | ||||||
|  | 
 | ||||||
|  | from .models import ( | ||||||
|  |     UngelichContactUsSection, UngelichTextSection, Service, ServiceItem, | ||||||
|  |     About, AboutItem, SectionWithImage | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def get_section_id(plugin_instance, default): | ||||||
|  |     """ | ||||||
|  |     A helper function to get the section id from a given menu text | ||||||
|  |     :param plugin_instance: | ||||||
|  |     :param default: The default section id to return in case a section id | ||||||
|  |                     is not found | ||||||
|  |     :return: The section id for the plugin_instance | ||||||
|  |     """ | ||||||
|  |     section_id = default | ||||||
|  |     if hasattr(plugin_instance, 'menu_text'): | ||||||
|  |         menu_words = plugin_instance.menu_text.split() | ||||||
|  |         if len(menu_words) > 0: | ||||||
|  |             section_id = menu_words[0] | ||||||
|  |     return section_id | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | @plugin_pool.register_plugin | ||||||
|  | class SectionWithImagePlugin(CMSPluginBase): | ||||||
|  |     model = SectionWithImage | ||||||
|  |     render_template = "ungleich_page/glasfaser/section_with_image.html" | ||||||
|  |     cache = False | ||||||
|  | 
 | ||||||
|  |     def render(self, context, instance, placeholder): | ||||||
|  |         context.update({ | ||||||
|  |             'image': instance.image, | ||||||
|  |             'object': instance, | ||||||
|  |             'placeholder': placeholder | ||||||
|  |         }) | ||||||
|  |         return context | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | @plugin_pool.register_plugin | ||||||
|  | class SectionContact(CMSPluginBase): | ||||||
|  |     model = UngelichContactUsSection | ||||||
|  |     render_template = "ungleich_page/glasfaser/section_contact.html" | ||||||
|  |     cache = False | ||||||
|  | 
 | ||||||
|  |     def render(self, context, instance, placeholder): | ||||||
|  |         context = super(SectionContact, self).render( | ||||||
|  |             context, instance, placeholder | ||||||
|  |         ) | ||||||
|  |         context['instance'] = instance | ||||||
|  |         context['section_id'] = get_section_id(instance, 'contact') | ||||||
|  |         return context | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | @plugin_pool.register_plugin | ||||||
|  | class SectionTextParagraphDCL(CMSPluginBase): | ||||||
|  |     model = UngelichTextSection | ||||||
|  |     render_template = "ungleich_page/glasfaser/section_text_dcl.html" | ||||||
|  |     cache = False | ||||||
|  | 
 | ||||||
|  |     def render(self, context, instance, placeholder): | ||||||
|  |         context = super(SectionTextParagraphDCL, self).render( | ||||||
|  |             context, instance, placeholder | ||||||
|  |         ) | ||||||
|  |         context['instance'] = instance | ||||||
|  |         context['section_id'] = get_section_id(instance, 'your') | ||||||
|  |         return context | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | @plugin_pool.register_plugin | ||||||
|  | class SectionTextParagraphGlasfaser(CMSPluginBase): | ||||||
|  |     model = UngelichTextSection | ||||||
|  |     render_template = "ungleich_page/glasfaser/section_text_glasfaser.html" | ||||||
|  |     cache = False | ||||||
|  | 
 | ||||||
|  |     def render(self, context, instance, placeholder): | ||||||
|  |         context = super(SectionTextParagraphGlasfaser, self).render( | ||||||
|  |             context, instance, placeholder | ||||||
|  |         ) | ||||||
|  |         context['instance'] = instance | ||||||
|  |         context['section_id'] = get_section_id(instance, 'our') | ||||||
|  |         return context | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | @plugin_pool.register_plugin | ||||||
|  | class GlasfaserServicesPlugin(CMSPluginBase): | ||||||
|  |     name = "Glasfaser Services Plugin" | ||||||
|  |     model = Service | ||||||
|  |     render_template = "ungleich_page/glasfaser/section_services.html" | ||||||
|  |     cache = False | ||||||
|  |     allow_children = True | ||||||
|  |     child_classes = ['GlasfaserServicesItemPlugin'] | ||||||
|  | 
 | ||||||
|  |     def render(self, context, instance, placeholder): | ||||||
|  |         context['service_instance'] = instance | ||||||
|  |         context['section_id'] = get_section_id(instance, 'services') | ||||||
|  |         return context | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | @plugin_pool.register_plugin | ||||||
|  | class GlasfaserServicesItemPlugin(CMSPluginBase): | ||||||
|  |     name = "Glasfaser Service Item Plugin" | ||||||
|  |     model = ServiceItem | ||||||
|  |     render_template = "ungleich_page/glasfaser/_services_item.html" | ||||||
|  |     cache = False | ||||||
|  |     require_parent = True | ||||||
|  |     parent_classes = ['GlasfaserServicesPlugin'] | ||||||
|  | 
 | ||||||
|  |     def render(self, context, instance, placeholder): | ||||||
|  |         context = super(GlasfaserServicesItemPlugin, self).render( | ||||||
|  |             context, instance, placeholder | ||||||
|  |         ) | ||||||
|  |         context['instance'] = instance | ||||||
|  |         return context | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | @plugin_pool.register_plugin | ||||||
|  | class GlasfaserAboutPlugin(CMSPluginBase): | ||||||
|  |     name = "Glasfaser About Plugin" | ||||||
|  |     model = About | ||||||
|  |     render_template = "ungleich_page/glasfaser/section_about.html" | ||||||
|  |     cache = False | ||||||
|  |     allow_children = True | ||||||
|  |     child_classes = ['GlasfaserAboutItemPlugin'] | ||||||
|  | 
 | ||||||
|  |     def render(self, context, instance, placeholder): | ||||||
|  |         context['about_instance'] = instance | ||||||
|  |         context['section_id'] = get_section_id(instance, 'about') | ||||||
|  |         return context | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | @plugin_pool.register_plugin | ||||||
|  | class GlasfaserAboutItemPlugin(CMSPluginBase): | ||||||
|  |     name = "Glasfaser About Item Plugin" | ||||||
|  |     model = AboutItem | ||||||
|  |     render_template = "ungleich_page/glasfaser/_about_item.html" | ||||||
|  |     cache = False | ||||||
|  |     require_parent = True | ||||||
|  |     parent_classes = ['GlasfaserAboutPlugin'] | ||||||
|  | 
 | ||||||
|  |     def render(self, context, instance, placeholder): | ||||||
|  |         context = super(GlasfaserAboutItemPlugin, self).render( | ||||||
|  |             context, instance, placeholder | ||||||
|  |         ) | ||||||
|  |         context['instance'] = instance | ||||||
|  |         return context | ||||||
							
								
								
									
										106
									
								
								ungleich_page/migrations/0001_initial.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								ungleich_page/migrations/0001_initial.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,106 @@ | ||||||
|  | # -*- coding: utf-8 -*- | ||||||
|  | # Generated by Django 1.9.4 on 2017-10-18 18:23 | ||||||
|  | from __future__ import unicode_literals | ||||||
|  | 
 | ||||||
|  | from django.db import migrations, models | ||||||
|  | import django.db.models.deletion | ||||||
|  | import djangocms_text_ckeditor.fields | ||||||
|  | import filer.fields.image | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class Migration(migrations.Migration): | ||||||
|  | 
 | ||||||
|  |     initial = True | ||||||
|  | 
 | ||||||
|  |     dependencies = [ | ||||||
|  |         ('filer', '0004_auto_20160328_1434'), | ||||||
|  |         ('cms', '0014_auto_20160404_1908'), | ||||||
|  |     ] | ||||||
|  | 
 | ||||||
|  |     operations = [ | ||||||
|  |         migrations.CreateModel( | ||||||
|  |             name='Service', | ||||||
|  |             fields=[ | ||||||
|  |                 ('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.CMSPlugin')), | ||||||
|  |                 ('title', models.CharField(max_length=200)), | ||||||
|  |                 ('sub_title', models.CharField(max_length=200)), | ||||||
|  |             ], | ||||||
|  |             options={ | ||||||
|  |                 'abstract': False, | ||||||
|  |             }, | ||||||
|  |             bases=('cms.cmsplugin',), | ||||||
|  |         ), | ||||||
|  |         migrations.CreateModel( | ||||||
|  |             name='ServiceItem', | ||||||
|  |             fields=[ | ||||||
|  |                 ('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.CMSPlugin')), | ||||||
|  |                 ('title', models.CharField(max_length=200)), | ||||||
|  |                 ('description', djangocms_text_ckeditor.fields.HTMLField()), | ||||||
|  |                 ('image', filer.fields.image.FilerImageField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='service_item_image', to='filer.Image')), | ||||||
|  |             ], | ||||||
|  |             options={ | ||||||
|  |                 'abstract': False, | ||||||
|  |             }, | ||||||
|  |             bases=('cms.cmsplugin',), | ||||||
|  |         ), | ||||||
|  |         migrations.CreateModel( | ||||||
|  |             name='UngelichContactUsSection', | ||||||
|  |             fields=[ | ||||||
|  |                 ('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.CMSPlugin')), | ||||||
|  |                 ('email', models.EmailField(max_length=200)), | ||||||
|  |             ], | ||||||
|  |             options={ | ||||||
|  |                 'abstract': False, | ||||||
|  |             }, | ||||||
|  |             bases=('cms.cmsplugin',), | ||||||
|  |         ), | ||||||
|  |         migrations.CreateModel( | ||||||
|  |             name='UngelichPicture', | ||||||
|  |             fields=[ | ||||||
|  |                 ('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.CMSPlugin')), | ||||||
|  |                 ('title', models.CharField(max_length=400)), | ||||||
|  |             ], | ||||||
|  |             options={ | ||||||
|  |                 'abstract': False, | ||||||
|  |             }, | ||||||
|  |             bases=('cms.cmsplugin',), | ||||||
|  |         ), | ||||||
|  |         migrations.CreateModel( | ||||||
|  |             name='UngelichTextSection', | ||||||
|  |             fields=[ | ||||||
|  |                 ('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.CMSPlugin')), | ||||||
|  |                 ('title', models.CharField(max_length=200)), | ||||||
|  |                 ('description', djangocms_text_ckeditor.fields.HTMLField()), | ||||||
|  |             ], | ||||||
|  |             options={ | ||||||
|  |                 'abstract': False, | ||||||
|  |             }, | ||||||
|  |             bases=('cms.cmsplugin',), | ||||||
|  |         ), | ||||||
|  |         migrations.CreateModel( | ||||||
|  |             name='About', | ||||||
|  |             fields=[ | ||||||
|  |                 ('service_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='ungleich_page.Service')), | ||||||
|  |             ], | ||||||
|  |             options={ | ||||||
|  |                 'abstract': False, | ||||||
|  |             }, | ||||||
|  |             bases=('ungleich_page.service',), | ||||||
|  |         ), | ||||||
|  |         migrations.CreateModel( | ||||||
|  |             name='AboutItem', | ||||||
|  |             fields=[ | ||||||
|  |                 ('ungelichpicture_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='ungleich_page.UngelichPicture')), | ||||||
|  |                 ('inverted', models.BooleanField(default=False)), | ||||||
|  |             ], | ||||||
|  |             options={ | ||||||
|  |                 'abstract': False, | ||||||
|  |             }, | ||||||
|  |             bases=('ungleich_page.ungelichpicture',), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name='ungelichpicture', | ||||||
|  |             name='image', | ||||||
|  |             field=filer.fields.image.FilerImageField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='image', to='filer.Image'), | ||||||
|  |         ), | ||||||
|  |     ] | ||||||
							
								
								
									
										30
									
								
								ungleich_page/migrations/0002_sectionwithimage.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								ungleich_page/migrations/0002_sectionwithimage.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,30 @@ | ||||||
|  | # -*- coding: utf-8 -*- | ||||||
|  | # Generated by Django 1.9.4 on 2017-10-18 22:02 | ||||||
|  | from __future__ import unicode_literals | ||||||
|  | 
 | ||||||
|  | from django.db import migrations, models | ||||||
|  | import django.db.models.deletion | ||||||
|  | import filer.fields.image | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class Migration(migrations.Migration): | ||||||
|  | 
 | ||||||
|  |     dependencies = [ | ||||||
|  |         ('filer', '0004_auto_20160328_1434'), | ||||||
|  |         ('ungleich_page', '0001_initial'), | ||||||
|  |     ] | ||||||
|  | 
 | ||||||
|  |     operations = [ | ||||||
|  |         migrations.CreateModel( | ||||||
|  |             name='SectionWithImage', | ||||||
|  |             fields=[ | ||||||
|  |                 ('ungelichpicture_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='ungleich_page.UngelichPicture')), | ||||||
|  |                 ('price_tag_url', models.URLField(default='', max_length=300)), | ||||||
|  |                 ('price_tag_image', filer.fields.image.FilerImageField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='price_tag_image', to='filer.Image')), | ||||||
|  |             ], | ||||||
|  |             options={ | ||||||
|  |                 'abstract': False, | ||||||
|  |             }, | ||||||
|  |             bases=('ungleich_page.ungelichpicture',), | ||||||
|  |         ), | ||||||
|  |     ] | ||||||
							
								
								
									
										35
									
								
								ungleich_page/migrations/0003_auto_20171019_1007.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								ungleich_page/migrations/0003_auto_20171019_1007.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,35 @@ | ||||||
|  | # -*- coding: utf-8 -*- | ||||||
|  | # Generated by Django 1.9.4 on 2017-10-19 10:07 | ||||||
|  | from __future__ import unicode_literals | ||||||
|  | 
 | ||||||
|  | from django.db import migrations, models | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class Migration(migrations.Migration): | ||||||
|  | 
 | ||||||
|  |     dependencies = [ | ||||||
|  |         ('ungleich_page', '0002_sectionwithimage'), | ||||||
|  |     ] | ||||||
|  | 
 | ||||||
|  |     operations = [ | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name='sectionwithimage', | ||||||
|  |             name='menu_text', | ||||||
|  |             field=models.CharField(default='', max_length=100), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name='service', | ||||||
|  |             name='menu_text', | ||||||
|  |             field=models.CharField(default='', max_length=100), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name='ungelichcontactussection', | ||||||
|  |             name='menu_text', | ||||||
|  |             field=models.CharField(default='', max_length=100), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name='ungelichtextsection', | ||||||
|  |             name='menu_text', | ||||||
|  |             field=models.CharField(default='', max_length=100), | ||||||
|  |         ), | ||||||
|  |     ] | ||||||
							
								
								
									
										40
									
								
								ungleich_page/migrations/0004_auto_20171019_1113.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								ungleich_page/migrations/0004_auto_20171019_1113.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,40 @@ | ||||||
|  | # -*- coding: utf-8 -*- | ||||||
|  | # Generated by Django 1.9.4 on 2017-10-19 11:13 | ||||||
|  | from __future__ import unicode_literals | ||||||
|  | 
 | ||||||
|  | from django.db import migrations, models | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class Migration(migrations.Migration): | ||||||
|  | 
 | ||||||
|  |     dependencies = [ | ||||||
|  |         ('ungleich_page', '0003_auto_20171019_1007'), | ||||||
|  |     ] | ||||||
|  | 
 | ||||||
|  |     operations = [ | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name='sectionwithimage', | ||||||
|  |             name='menu_text', | ||||||
|  |             field=models.CharField(blank=True, default='', max_length=100), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name='sectionwithimage', | ||||||
|  |             name='price_tag_url', | ||||||
|  |             field=models.URLField(blank=True, default='', max_length=300), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name='service', | ||||||
|  |             name='menu_text', | ||||||
|  |             field=models.CharField(blank=True, default='', max_length=100), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name='ungelichcontactussection', | ||||||
|  |             name='menu_text', | ||||||
|  |             field=models.CharField(blank=True, default='', max_length=100), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name='ungelichtextsection', | ||||||
|  |             name='menu_text', | ||||||
|  |             field=models.CharField(blank=True, default='', max_length=100), | ||||||
|  |         ), | ||||||
|  |     ] | ||||||
							
								
								
									
										45
									
								
								ungleich_page/migrations/0005_auto_20171019_1517.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								ungleich_page/migrations/0005_auto_20171019_1517.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,45 @@ | ||||||
|  | # -*- coding: utf-8 -*- | ||||||
|  | # Generated by Django 1.9.4 on 2017-10-19 15:17 | ||||||
|  | from __future__ import unicode_literals | ||||||
|  | 
 | ||||||
|  | from django.db import migrations, models | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class Migration(migrations.Migration): | ||||||
|  | 
 | ||||||
|  |     dependencies = [ | ||||||
|  |         ('ungleich_page', '0004_auto_20171019_1113'), | ||||||
|  |     ] | ||||||
|  | 
 | ||||||
|  |     operations = [ | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name='ungelichcontactussection', | ||||||
|  |             name='address', | ||||||
|  |             field=models.CharField(blank=True, default='In der Au 7, Schwanden 8762', max_length=100), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name='ungelichcontactussection', | ||||||
|  |             name='contact_form_header_text', | ||||||
|  |             field=models.CharField(blank=True, default='Send us a message.', max_length=100), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name='ungelichcontactussection', | ||||||
|  |             name='contact_text', | ||||||
|  |             field=models.CharField(blank=True, default='Contact', max_length=100), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name='ungelichcontactussection', | ||||||
|  |             name='country', | ||||||
|  |             field=models.CharField(blank=True, default='Switzerland', max_length=100), | ||||||
|  |         ), | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name='ungelichcontactussection', | ||||||
|  |             name='organization_name', | ||||||
|  |             field=models.CharField(blank=True, default='ungleich GmbH', max_length=100), | ||||||
|  |         ), | ||||||
|  |         migrations.AlterField( | ||||||
|  |             model_name='ungelichcontactussection', | ||||||
|  |             name='email', | ||||||
|  |             field=models.EmailField(default='info@ungleich.ch', max_length=200), | ||||||
|  |         ), | ||||||
|  |     ] | ||||||
							
								
								
									
										20
									
								
								ungleich_page/migrations/0006_aboutitem_link_url.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								ungleich_page/migrations/0006_aboutitem_link_url.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,20 @@ | ||||||
|  | # -*- coding: utf-8 -*- | ||||||
|  | # Generated by Django 1.9.4 on 2017-10-20 06:42 | ||||||
|  | from __future__ import unicode_literals | ||||||
|  | 
 | ||||||
|  | from django.db import migrations, models | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class Migration(migrations.Migration): | ||||||
|  | 
 | ||||||
|  |     dependencies = [ | ||||||
|  |         ('ungleich_page', '0005_auto_20171019_1517'), | ||||||
|  |     ] | ||||||
|  | 
 | ||||||
|  |     operations = [ | ||||||
|  |         migrations.AddField( | ||||||
|  |             model_name='aboutitem', | ||||||
|  |             name='link_url', | ||||||
|  |             field=models.URLField(blank=True, default='', max_length=300), | ||||||
|  |         ), | ||||||
|  |     ] | ||||||
|  | @ -1,3 +1,89 @@ | ||||||
| # from django.db import models | from cms.models.pluginmodel import CMSPlugin | ||||||
|  | from django.db import models | ||||||
|  | from djangocms_text_ckeditor.fields import HTMLField | ||||||
|  | from filer.fields.image import FilerImageField | ||||||
| 
 | 
 | ||||||
| # Create your models here. | 
 | ||||||
|  | class UngelichPicture(CMSPlugin): | ||||||
|  |     image = FilerImageField( | ||||||
|  |         null=True, | ||||||
|  |         blank=True, | ||||||
|  |         related_name="image", | ||||||
|  |         on_delete=models.SET_NULL | ||||||
|  |     ) | ||||||
|  |     title = models.CharField(max_length=400) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class SectionWithImage(UngelichPicture): | ||||||
|  |     menu_text = models.CharField(max_length=100, default="", blank=True) | ||||||
|  |     price_tag_image = FilerImageField( | ||||||
|  |         null=True, | ||||||
|  |         blank=True, | ||||||
|  |         related_name="price_tag_image", | ||||||
|  |         on_delete=models.SET_NULL | ||||||
|  |     ) | ||||||
|  |     price_tag_url = models.URLField(max_length=300, default="", blank=True) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class UngelichContactUsSection(CMSPlugin): | ||||||
|  |     menu_text = models.CharField(max_length=100, default="", blank=True) | ||||||
|  |     email = models.EmailField(max_length=200, default="info@ungleich.ch") | ||||||
|  |     contact_text = models.CharField( | ||||||
|  |         max_length=100, default="Contact", blank=True | ||||||
|  |     ) | ||||||
|  |     organization_name = models.CharField( | ||||||
|  |         max_length=100, default="ungleich GmbH", blank=True | ||||||
|  |     ) | ||||||
|  |     address = models.CharField( | ||||||
|  |         max_length=100, default="In der Au 7, Schwanden 8762", blank=True | ||||||
|  |     ) | ||||||
|  |     country = models.CharField( | ||||||
|  |         max_length=100, default="Switzerland", blank=True | ||||||
|  |     ) | ||||||
|  |     contact_form_header_text = models.CharField( | ||||||
|  |         max_length=100, default="Send us a message.", blank=True | ||||||
|  |     ) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class UngelichTextSection(CMSPlugin): | ||||||
|  |     menu_text = models.CharField(max_length=100, default="", blank=True) | ||||||
|  |     title = models.CharField(max_length=200) | ||||||
|  |     description = HTMLField() | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class Service(CMSPlugin): | ||||||
|  |     menu_text = models.CharField(max_length=100, default="", blank=True) | ||||||
|  |     title = models.CharField(max_length=200) | ||||||
|  |     sub_title = models.CharField(max_length=200) | ||||||
|  | 
 | ||||||
|  |     def __str__(self): | ||||||
|  |         return self.title | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class ServiceItem(CMSPlugin): | ||||||
|  |     image = FilerImageField( | ||||||
|  |         null=True, | ||||||
|  |         blank=True, | ||||||
|  |         related_name="service_item_image", | ||||||
|  |         on_delete=models.SET_NULL | ||||||
|  |     ) | ||||||
|  |     title = models.CharField(max_length=200) | ||||||
|  |     description = HTMLField() | ||||||
|  | 
 | ||||||
|  |     def __str__(self): | ||||||
|  |         return self.title | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class About(Service): | ||||||
|  |     pass | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class AboutItem(UngelichPicture): | ||||||
|  |     inverted = models.BooleanField(default=False) | ||||||
|  |     link_url = models.URLField(max_length=300, default="", blank=True) | ||||||
|  | 
 | ||||||
|  |     def __str__(self): | ||||||
|  |         alignment = "Right" if self.inverted else "Left" | ||||||
|  |         return "{alignment} - {title}".format( | ||||||
|  |             alignment=alignment, title=self.title | ||||||
|  |         ) | ||||||
|  |  | ||||||
							
								
								
									
										12
									
								
								ungleich_page/static/ungleich_page/css/cms.css
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								ungleich_page/static/ungleich_page/css/cms.css
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,12 @@ | ||||||
|  | .lead, .split-description.wow.fadeInUp p{ | ||||||
|  |     font-family: "Raleway" , "Helvetica Neue", Helvetica, Arial, sans-serif; | ||||||
|  |     font-size: 21px; | ||||||
|  |     color: #3a3a3a; | ||||||
|  |     font-weight: 300 !important; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | @media(min-width: 768px) { | ||||||
|  |     .custom-padding-bottom{ | ||||||
|  |         padding-bottom: 0; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -0,0 +1,12 @@ | ||||||
|  | <li {% if instance.inverted %}class="timeline-inverted"{% endif %}> | ||||||
|  |     {% if instance.link_url %}<a href="{{ instance.link_url }}" target="_blank">{% endif %} | ||||||
|  |     <div class="timeline-image"> | ||||||
|  |       <img class="img-circle img-responsive" src="{{ instance.image.url }}" alt=""> | ||||||
|  |     </div> | ||||||
|  |     {% if instance.link_url %}</a>{% endif %} | ||||||
|  |     <div class="timeline-panel wow {% if instance.inverted %}slideInRight{% else %}slideInLeft{% endif %}"> | ||||||
|  |       <div class="timeline-body"> | ||||||
|  |         <p>{{ instance.title }}</p> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  | </li> | ||||||
|  | @ -0,0 +1,7 @@ | ||||||
|  | <div class="team-member wow fadeInUp" data-wow-delay="0.25s"> | ||||||
|  |   <img src="{{ instance.image.url }}" class="img-responsive img-circle" alt=""> | ||||||
|  |   <div class="team-member-caption inline-block"> | ||||||
|  |     <h4 class="portfolio-caption">{{ instance.title }}</h4> | ||||||
|  |     <p class="text-muted">{{ instance.description }}</p> | ||||||
|  |   </div> | ||||||
|  | </div> | ||||||
							
								
								
									
										12
									
								
								ungleich_page/templates/ungleich_page/glasfaser/menus.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								ungleich_page/templates/ungleich_page/glasfaser/menus.html
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,12 @@ | ||||||
|  | {% load menu_tags %} | ||||||
|  | 
 | ||||||
|  | {% for child in children %} | ||||||
|  | <li class="child{% if child.selected %} selected{% endif %}{% if child.ancestor %} ancestor{% endif %}{% if child.sibling %} sibling{% endif %}{% if child.descendant %} descendant{% endif %}"> | ||||||
|  | 	<a href="{{ child.attr.redirect_url|default:child.get_absolute_url }}" class="page-scroll">{{ child.get_menu_title }}</a> | ||||||
|  | 	{% if child.children %} | ||||||
|  | 	<ul> | ||||||
|  | 		{% show_menu from_level to_level extra_inactive extra_active template "" "" child %} | ||||||
|  | 	</ul> | ||||||
|  | 	{% endif %} | ||||||
|  | </li> | ||||||
|  | {% endfor %} | ||||||
|  | @ -0,0 +1,18 @@ | ||||||
|  | {% load cms_tags %} | ||||||
|  | <section id="{{section_id}}"> | ||||||
|  |   <div class="container"> | ||||||
|  |     <div class="text-center wow fadeInDown"> | ||||||
|  |       <h2 class="section-heading">{{ about_instance.title }}</h2> | ||||||
|  |       <h3 class="section-subheading text-muted">{{ about_instance.sub_title }}</h3> | ||||||
|  |     </div> | ||||||
|  |     <div class="row"> | ||||||
|  |       <div class="col-lg-12"> | ||||||
|  |         <ul class="timeline"> | ||||||
|  |         {% for plugin in about_instance.child_plugin_instances %} | ||||||
|  |             {% render_plugin plugin %} | ||||||
|  |         {% endfor %} | ||||||
|  |         </ul> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |   </div> | ||||||
|  | </section> | ||||||
|  | @ -0,0 +1,83 @@ | ||||||
|  | {% load i18n %} | ||||||
|  | <!-- / contact section --> | ||||||
|  | <div id="contact_section" class="full-contact-section"> | ||||||
|  |   <div class="intro-header-2 contact-section" id="{{section_id}}"> | ||||||
|  |     <div class="container"> | ||||||
|  |       <div class="row"> | ||||||
|  |         <div class="col-sm-6"> | ||||||
|  |           <div class="title"> | ||||||
|  |             <h2>{{instance.contact_text}}</h2> | ||||||
|  |           </div> | ||||||
|  |           <div class="contact-details"> | ||||||
|  |             <div class="subtitle"> | ||||||
|  |               <h3>{{instance.organization_name}}</h3> | ||||||
|  |             </div> | ||||||
|  |             <div class="description"> | ||||||
|  |               <p>{{instance.email}}</p> | ||||||
|  |               <p>{{instance.address}}</p> | ||||||
|  |               <p>{{instance.country}}</p> | ||||||
|  |             </div> | ||||||
|  |           </div> | ||||||
|  |           <div class="social"> | ||||||
|  |             <a target="_blank" class="" href="https://twitter.com/datacenterlight"><i class="fa fa-twitter fa-fw"></i></a> | ||||||
|  |             <a target="_blank"  class=""  href="https://github.com/ungleich"><i class="fa fa-github fa-fw"></i></a> | ||||||
|  |             <a target="_blank"  class=""  href="https://www.facebook.com/ungleich.ch/"><i class="fa fa-facebook"></i></a> | ||||||
|  |           </div> | ||||||
|  |         </div> | ||||||
|  |         <div class="col-sm-6"> | ||||||
|  |           <div id="contact-form" class="contact-form"> | ||||||
|  |             {% if success %} | ||||||
|  |                 <div class="contact-form-success"> | ||||||
|  |                     <div class="subtitle text-center"> | ||||||
|  |                         <h3>{% trans "Thank you for contacting us." %}</h3> | ||||||
|  |                     </div> | ||||||
|  |                     <p> | ||||||
|  |                         {% trans "Your message was successfully sent to our team." %} | ||||||
|  |                     </p> | ||||||
|  |                 </div> | ||||||
|  |             {% else %} | ||||||
|  |                 <div class="row"> | ||||||
|  |                     <div class="col-sm-offset-2 col-sm-10"> | ||||||
|  |                         <div class="subtitle"> | ||||||
|  |                             <h3>{{instance.contact_form_header_text}}</h3> | ||||||
|  |                         </div> | ||||||
|  |                     </div> | ||||||
|  |                 </div> | ||||||
|  |                 <form class="form-horizontal ajax-form" method="POST" action="{% url 'datacenterlight:contact_us' %}" data-toggle="validator" data-response="#contact-form"> | ||||||
|  |                     {% csrf_token %} | ||||||
|  |                     <input type="hidden" value="glasfaser" name="from_page"> | ||||||
|  |                     <div class="form-group"> | ||||||
|  |                         <label class="control-label col-sm-2" for="name">{% trans "Name" %}</label> | ||||||
|  |                         <div class="col-sm-10"> | ||||||
|  |                             <input id = "name" type="text" name="name" class="form-control" data-minlength="3" data-error="{% trans 'Please enter your name.' %}" required> | ||||||
|  |                             {{contact_form.name.errors}} | ||||||
|  |                         </div> | ||||||
|  |                     </div> | ||||||
|  |                     <div class="form-group"> | ||||||
|  |                         <label class="control-label col-sm-2" for="email">{% trans "Email" %}</label> | ||||||
|  |                         <div class="col-sm-10"> | ||||||
|  |                             <input id = "email" name="email" type="email" pattern="^[^@\s]+@([^@\s]+\.)+[^@\s]+$" class="form-control" data-error="{% trans 'Please enter a valid email address.' %}" required> | ||||||
|  |                             {{contact_form.email.errors}} | ||||||
|  |                         </div> | ||||||
|  |                     </div> | ||||||
|  |                     <div class="form-group"> | ||||||
|  |                         <label class="control-label col-sm-2" for="message">{% trans "Message" %}</label> | ||||||
|  |                         <div class="col-sm-10"> | ||||||
|  |                             <textarea class="form-control" name="message" id="message" rows="6" required></textarea> | ||||||
|  |                             {{contact_form.message.errors}} | ||||||
|  |                         </div> | ||||||
|  |                     </div> | ||||||
|  |                     <div class="form-group"> | ||||||
|  |                         <div class="col-sm-offset-2 col-sm-10 text-right"> | ||||||
|  |                             <div class="form-error hide">{% trans "Sorry, there was an unexpected error. Kindly retry." %}</div> | ||||||
|  |                             <button type="submit" class="btn btn-default">{% trans "SUBMIT" %}</button> | ||||||
|  |                         </div> | ||||||
|  |                     </div> | ||||||
|  |                 </form> | ||||||
|  |             {% endif %} | ||||||
|  |           </div> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |   </div> | ||||||
|  | </div> | ||||||
|  | @ -0,0 +1,17 @@ | ||||||
|  | {% load static i18n cms_tags %} | ||||||
|  | <section id="{{section_id}}" class="custom-padding-bottom"> | ||||||
|  |   <div class="container"> | ||||||
|  |     <div class="text-center wow fadeInDown"> | ||||||
|  |       <h2 class="section-heading">{{ service_instance.title }}</h2> | ||||||
|  |       <h3 class="section-subheading text-muted">{{ service_instance.sub_title }}</h3> | ||||||
|  |     </div> | ||||||
|  |     <div class="row text-center"> | ||||||
|  |         {% for plugin in service_instance.child_plugin_instances %} | ||||||
|  |             <div class="col-sm-4"> | ||||||
|  |             {% render_plugin plugin %} | ||||||
|  |             </div> | ||||||
|  |         {% endfor %} | ||||||
|  | 
 | ||||||
|  |     </div> | ||||||
|  |   </div> | ||||||
|  | </section> | ||||||
|  | @ -0,0 +1,12 @@ | ||||||
|  | <div class="split-section left" id="{{section_id}}"> | ||||||
|  |   <div class="container"> | ||||||
|  |     <div class="split-text"> | ||||||
|  |       <div class="split-title"> | ||||||
|  |         <h2>{{instance.title}}</h2> | ||||||
|  |       </div> | ||||||
|  |       <div class="split-description wow fadeInUp"> | ||||||
|  |         <p class="lead">{{instance.description}}</p> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |   </div> | ||||||
|  | </div> | ||||||
|  | @ -0,0 +1,13 @@ | ||||||
|  | <section class="split-section right" id="{{section_id}}"> | ||||||
|  |   <div class="container"> | ||||||
|  |     <div class="split-text text-center"> | ||||||
|  |       <div class="wow fadeInDown"> | ||||||
|  |         <h2 class="section-heading text-center">{{instance.title}}</h2> | ||||||
|  |         <h3 class="section-subheading text-muted"></h3> | ||||||
|  |       </div> | ||||||
|  |       <div class="split-description text-center wow fadeInUp"> | ||||||
|  |         <p class="lead">{{instance.description}}</p> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |   </div> | ||||||
|  | </section> | ||||||
|  | @ -0,0 +1,10 @@ | ||||||
|  | <div class="intro-header" style="background:url({{ image.url }}) no-repeat center center; background-size: cover; background-position: left; background-color: rgb(118, 140, 163); background-attachment: fixed; flex-direction: column; align-items: flex-end; justify-content: space-between; padding-top: 70px;" id="home"> | ||||||
|  |   <div class="price-tag-container"> | ||||||
|  |     {% if object.price_tag_url %}<a href="{{ object.price_tag_url }}" target="_blank">{% endif %}{% if object.price_tag_image %}<div style="background:url({{ object.price_tag_image.url }}) no-repeat center center; background-size: cover;" class="price-tag"></div>{% endif %}{% if object.price_tag_url %}</a>{% endif %} | ||||||
|  |   </div> | ||||||
|  |   <div class="high-speed"> | ||||||
|  |     <div class="high-speed-border"></div> | ||||||
|  |       <h1>{{ object.title }}</h1> | ||||||
|  |     <div class="high-speed-border"></div> | ||||||
|  |   </div> | ||||||
|  | </div> | ||||||
							
								
								
									
										107
									
								
								ungleich_page/templates/ungleich_page/glasfaser_cms_page.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								ungleich_page/templates/ungleich_page/glasfaser_cms_page.html
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,107 @@ | ||||||
|  | {% load static bootstrap3 i18n cms_tags sekizai_tags menu_tags %} | ||||||
|  | {% get_current_language as LANGUAGE_CODE %} | ||||||
|  | 
 | ||||||
|  | <!DOCTYPE html> | ||||||
|  | <html lang="{{LANGUAGE_CODE}}"> | ||||||
|  | <head> | ||||||
|  |     <meta charset="utf-8"> | ||||||
|  |     <meta http-equiv="X-UA-Compatible" content="IE=edge"> | ||||||
|  |     <meta name="viewport" content="width=device-width, initial-scale=1"> | ||||||
|  |     <meta name="author" content="ungleich GmbH"> | ||||||
|  |     <meta name="description" content="{% page_attribute 'meta_description' %}"> | ||||||
|  |     <title>{% page_attribute "page_title" %}</title> | ||||||
|  | 
 | ||||||
|  |     <!-- Bootstrap Core CSS --> | ||||||
|  |     <link href="{% static 'ungleich_page/css/bootstrap.min.css' %}" rel="stylesheet"> | ||||||
|  |     <link href="{% static 'ungleich_page/css/lib/animate.min.css' %}" rel="stylesheet"> | ||||||
|  | 
 | ||||||
|  |     <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries --> | ||||||
|  |     <!-- WARNING: Respond.js doesn't work if you view the page via file:// --> | ||||||
|  |     <!--[if lt IE 9]> | ||||||
|  |     <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script> | ||||||
|  |     <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script> | ||||||
|  |     <![endif]--> | ||||||
|  | 
 | ||||||
|  |     <link href="//fonts.googleapis.com/css?family=Open+Sans+Condensed:700|Lato:300,400,700|Montserrat:400,700" rel="stylesheet" type="text/css"> | ||||||
|  | 
 | ||||||
|  |     <!-- Custom CSS --> | ||||||
|  |     <link href="{% static 'ungleich_page/css/agency.css' %}" rel="stylesheet"> | ||||||
|  |     <link href="{% static 'ungleich_page/css/ungleich.css' %}" rel="stylesheet"> | ||||||
|  |     <link href="{% static 'datacenterlight/css/landing-page.css' %}" rel="stylesheet"> | ||||||
|  |     <link href="{% static 'ungleich_page/css/glasfaser.css' %}" rel="stylesheet"> | ||||||
|  |     {% addtoblock "css" %} | ||||||
|  |     <link href="{% static 'ungleich_page/css/cms.css' %}" media="screen" rel="stylesheet" type="text/css"/> | ||||||
|  |     {% endaddtoblock %} | ||||||
|  |     {% render_block "css" postprocessor "compressor.contrib.sekizai.compress" %} | ||||||
|  |     {% render_block "js" postprocessor "compressor.contrib.sekizai.compress" %} | ||||||
|  | 
 | ||||||
|  |     <!-- Google analytics --> | ||||||
|  |     {% include "google_analytics.html" %} | ||||||
|  |     <!-- End Google Analytics --> | ||||||
|  | 
 | ||||||
|  |     <link rel="shortcut icon" href="{% static 'ungleich_page/img/favicon.ico' %}" type="image/x-icon"> | ||||||
|  | </head> | ||||||
|  | 
 | ||||||
|  | <body id="page-top" class="index"> | ||||||
|  | {% cms_toolbar %} | ||||||
|  |     <nav class="navbar navbar-default navbar-fixed-top topnav navbar-transparent"> | ||||||
|  |       <div class="topnav"> | ||||||
|  |         <!-- Brand and toggle get grouped for better mobile display --> | ||||||
|  |         <div class="navbar-header"> | ||||||
|  |             <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"> | ||||||
|  |               <span class="sr-only">{% trans "Toggle navigation" %}</span> | ||||||
|  |               <span class="icon-bar"></span> | ||||||
|  |               <span class="icon-bar"></span> | ||||||
|  |               <span class="icon-bar"></span> | ||||||
|  |             </button> | ||||||
|  |             <a href="{% url 'ungleich_page:landing' %}" id="logoBlack" class="navbar-brand topnav"><img src="{% static 'ungleich_page/img/logo_black.svg' %}"></a> | ||||||
|  |             <a href="{% url 'ungleich_page:landing' %}" id="logoWhite" class="navbar-brand topnav"><img src="{% static 'ungleich_page/img/logo_white.svg' %}"></a> | ||||||
|  |         </div> | ||||||
|  |         <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> | ||||||
|  |           <!-- Start Navbar collapse--> | ||||||
|  |           <ul class="nav navbar-nav navbar-right"> | ||||||
|  |               {% show_sub_menu 1 None 100 "ungleich_page/glasfaser/menus.html" %} | ||||||
|  |           </ul> | ||||||
|  |           <!-- /.navbar-collapse --> | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </nav> | ||||||
|  | 
 | ||||||
|  |     {% placeholder 'Top Section' %} | ||||||
|  | 
 | ||||||
|  |     {% placeholder 'Middle Section' %} | ||||||
|  | 
 | ||||||
|  |     {% placeholder 'Glasfaser Services' %} | ||||||
|  | 
 | ||||||
|  |     {% placeholder 'Glasfaser About' %} | ||||||
|  | 
 | ||||||
|  |     {% placeholder 'Contact Section' %} | ||||||
|  | 
 | ||||||
|  |     <!-- Footer --> | ||||||
|  |     {% include "ungleich_page/includes/_footer.html" %} | ||||||
|  | 
 | ||||||
|  |     <!-- jQuery --> | ||||||
|  |     <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js" type="text/javascript"></script> | ||||||
|  |     <script type="text/javascript"> | ||||||
|  |         $(document).ready(function () { | ||||||
|  |             if ($(".has-error").length != 0) { | ||||||
|  |                 window.location = window.location.pathname + "#contact_section" | ||||||
|  |             } | ||||||
|  |         }); | ||||||
|  |     </script> | ||||||
|  |     <script src="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js" type="text/javascript"></script> | ||||||
|  | 
 | ||||||
|  |     <!-- Plugin JavaScript --> | ||||||
|  |     <script src="//cdnjs.cloudflare.com/ajax/libs/1000hz-bootstrap-validator/0.11.9/validator.min.js"></script> | ||||||
|  |     <script src="//cdnjs.cloudflare.com/ajax/libs/classie/1.0.1/classie.min.js" type="text/javascript"></script> | ||||||
|  |     <script src="//cdnjs.cloudflare.com/ajax/libs/wow/1.1.2/wow.min.js" type="text/javascript"></script> | ||||||
|  | 
 | ||||||
|  |     <!-- Custom Theme JavaScript --> | ||||||
|  |     <script src="{% static 'ungleich_page/js/ungleich.js' %}" type="text/javascript"></script> | ||||||
|  |     <script src="{% static 'datacenterlight/js/main.js' %}"></script> | ||||||
|  | 
 | ||||||
|  |     <!-- Custom Fonts --> | ||||||
|  |     <link href="//fonts.googleapis.com/css?family=Raleway" rel="stylesheet" type="text/css"> | ||||||
|  |     <link href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" type="text/css"> | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
|  | @ -795,7 +795,7 @@ msgstr "Es wurde eine E-Mail mit dem Aktivierungslink an Dich gesendet." | ||||||
| msgid "Account Activation" | msgid "Account Activation" | ||||||
| msgstr "Accountaktivierung" | msgstr "Accountaktivierung" | ||||||
| 
 | 
 | ||||||
| msgid "The link to reset your email has been sent to your email" | msgid "The link to reset your password has been sent to your email" | ||||||
| msgstr "" | msgstr "" | ||||||
| "Der Link zum Zurücksetzen deines Passwortes wurde an deine E-Mail gesendet" | "Der Link zum Zurücksetzen deines Passwortes wurde an deine E-Mail gesendet" | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -104,7 +104,7 @@ class ResendActivationLinkViewMixin(FormView): | ||||||
| 
 | 
 | ||||||
| class PasswordResetViewMixin(FormView): | class PasswordResetViewMixin(FormView): | ||||||
|     success_message = _( |     success_message = _( | ||||||
|         "The link to reset your email has been sent to your email") |         "The link to reset your password has been sent to your email") | ||||||
|     site = '' |     site = '' | ||||||
| 
 | 
 | ||||||
|     def test_generate_email_context(self, user): |     def test_generate_email_context(self, user): | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue