Merge branch 'develop' of github.com:ungleich/dynamicweb into develop

This commit is contained in:
Levi 2016-05-12 01:58:23 -05:00
commit 8304205537
55 changed files with 315 additions and 213 deletions

2
.gitignore vendored
View file

@ -11,7 +11,7 @@ __pycache__/
#django #django
local_settings.py local_settings.py
media/* media/
!media/keep !media/keep
/CACHE/ /CACHE/
/static/ /static/

View file

@ -43,6 +43,25 @@ After You have complited the task create a pull request and ask someone to revie
`read more about getting code from upstream here <https://help.github.com/articles/syncing-a-fork/>`_ `read more about getting code from upstream here <https://help.github.com/articles/syncing-a-fork/>`_
*merging your branch*
(**IMPORTANT**)
Before You make a pull request from Your forked branch to the ungleich make sure You did merge and resolve any conflicts You may find and that the application is running bug free.
Also You can run
``./manage test``
To merge upstream branch run this git commands.
``git fetch upstream``
``git checkout your_feature_branch``
``git merge remotes/upstream/develop``

View file

@ -106,8 +106,7 @@ INSTALLED_APPS = (
'ungleich_page', 'ungleich_page',
'hosting', 'hosting',
'digitalglarus', 'digitalglarus',
'django_extensions',
'debug_toolbar'
) )
MIDDLEWARE_CLASSES = ( MIDDLEWARE_CLASSES = (
@ -128,7 +127,6 @@ MIDDLEWARE_CLASSES = (
ROOT_URLCONF = 'dynamicweb.urls' ROOT_URLCONF = 'dynamicweb.urls'
TEMPLATES = [ TEMPLATES = [
{ {
'BACKEND': 'django.template.backends.django.DjangoTemplates', 'BACKEND': 'django.template.backends.django.DjangoTemplates',
@ -446,14 +444,15 @@ AUTH_USER_MODEL = 'membership.CustomUser'
# PAYMENT # PAYMENT
STRIPE_API_PUBLIC_KEY = 'pk_test_QqBZ50Am8KOxaAlOxbcm9Psl' # used in frontend to call from user browser
STRIPE_API_PRIVATE_KEY = 'sk_test_dqAmbKAij12QCGfkYZ3poGt2' # used in backend payment
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 = {'subject': "Validation mail",
'message': 'Please validate Your account under this link http://localhost:8000/en-us/validate/{}', 'message': 'Thank You for registering for account on Digital Glarus.\nPlease verify Your account under following link http://{host}/en-us/digitalglarus/login/validate/{slug}',
'from': 'test@test.com'} }
STRIPE_API_PRIVATE_KEY = env('STRIPE_API_PRIVATE_KEY')
STRIPE_API_PUBLIC_KEY = env('STRIPE_API_PUBLIC_KEY')
DEBUG = True DEBUG = True
@ -461,5 +460,3 @@ if DEBUG:
from .local import * from .local import *
else: else:
from .prod import * from .prod import *
#dont migrate test
# SOUTH_TESTS_MIGRATE = False

View file

@ -1,15 +1,9 @@
from .base import * from .base import *
REGISTRATION_MESSAGE['message'] = REGISTRATION_MESSAGE['message'].format(host='dynamicweb-development.ungleich.ch',slug='{slug}')
ALLOWED_HOSTS = [ ALLOWED_HOSTS = [
"*" "*"
] ]
# DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': 'app.db',
# }
# }
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
CACHES = { CACHES = {
@ -20,3 +14,8 @@ CACHES = {
} }
MIDDLEWARE_CLASSES+=("debug_toolbar.middleware.DebugToolbarMiddleware",) MIDDLEWARE_CLASSES+=("debug_toolbar.middleware.DebugToolbarMiddleware",)
INSTALLED_APPS+=(
'django_extensions',
'debug_toolbar'
)

View file

@ -8,6 +8,8 @@ ADMINS = (
MANAGERS = ADMINS MANAGERS = ADMINS
REGISTRATION_MESSAGE['message'] = REGISTRATION_MESSAGE['message'].format(host='digitalglarus.ungleich.ch',slug='{slug}')
ALLOWED_HOSTS = [ ALLOWED_HOSTS = [
".ungleich.ch", ".ungleich.ch",
"digital.glarus.ungleich.ch" , "digital.glarus.ungleich.ch" ,

View file

@ -7,6 +7,7 @@ from django.conf.urls.static import static
from django.conf import settings from django.conf import settings
from hosting.views import RailsHostingView, DjangoHostingView, NodeJSHostingView from hosting.views import RailsHostingView, DjangoHostingView, NodeJSHostingView
from membership import urls as membership_urls from membership import urls as membership_urls
import debug_toolbar
urlpatterns = [ urlpatterns = [
url(r'^hosting/', include('hosting.urls', namespace="hosting")), url(r'^hosting/', include('hosting.urls', namespace="hosting")),
@ -39,3 +40,4 @@ if settings.DEBUG:
'document_root': settings.MEDIA_ROOT, 'document_root': settings.MEDIA_ROOT,
}), }),
) )
urlpatterns += patterns('',url(r'^__debug__/', include(debug_toolbar.urls)))

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 338 KiB

View file

@ -4,12 +4,12 @@ from django.db import models
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.contrib.auth.models import User, AbstractBaseUser, BaseUserManager, AbstractUser from django.contrib.auth.models import User, AbstractBaseUser, BaseUserManager, AbstractUser
from django.contrib.auth.hashers import make_password from django.contrib.auth.hashers import make_password
from django.core.mail import send_mail
from django.core.validators import RegexValidator from django.core.validators import RegexValidator
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.contrib.sites.models import Site from django.contrib.sites.models import Site
from utils.stripe_utils import StripeUtils from utils.stripe_utils import StripeUtils
from utils.mailer import DigitalGlarusRegistrationMailer
REGISTRATION_MESSAGE = {'subject': "Validation mail", REGISTRATION_MESSAGE = {'subject': "Validation mail",
'message': 'Please validate Your account under this link http://localhost:8000/en-us/digitalglarus/login/validate/{}', 'message': 'Please validate Your account under this link http://localhost:8000/en-us/digitalglarus/login/validate/{}',
@ -72,9 +72,8 @@ class CustomUser(AbstractBaseUser):
if not user: if not user:
user = cls.objects.create_user(name=name, email=email, password=password) user = cls.objects.create_user(name=name, email=email, password=password)
if user: if user:
send_mail(REGISTRATION_MESSAGE['subject'], dg = DigitalGlarusRegistrationMailer(user.validation_slug)
REGISTRATION_MESSAGE['message'].format(user.validation_slug), dg.send_mail(to=user.email)
REGISTRATION_MESSAGE['from'], [user.email], fail_silently=False)
return user return user
else: else:
return None return None

View file

@ -7,23 +7,32 @@
<div class="col-lg-12 text-center wow fadeInDown"> <div class="col-lg-12 text-center wow fadeInDown">
{% for message in messages %} {% for message in messages %}
<div class="alert alert-success alert-dismissible" role="alert"> <div class="alert alert-success alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close" autofocus><span aria-hidden="true">&times;</span></button> <button type="button" class="close" data-dismiss="alert" aria-label="Close"
autofocus><span aria-hidden="true">&times;</span></button>
<strong>{{ message }}</strong> <strong>{{ message }}</strong>
</div> </div>
{% endfor %} {% endfor %}
<h2 class="section-heading">{% trans "Contact Us" %}</h2> <h2 class="section-heading">{% trans "Contact Us" %}</h2>
<br> <br>
<h3 class="intro-smallcap">{% trans "Join us at" %} <a href="{% page_url 'digital-glarus-page' %}">{% trans "Digital Glarus" %}</a>,
{% trans "a great co-working space in the middle of Alps!" %} <p></p> {% trans "You can contact us at" %} </h3> <h3 class="intro-smallcap">{% trans "Join us at" %} <a
<h3 class="intro-smallcap"><a href="mailto:info@ungleich.ch" ><i class="fa fa-envelope">info@ungleich.ch</i></a></h3> href="{% page_url 'digital-glarus-page' %}">{% trans "Digital Glarus" %}</a>,
{% trans "a great co-working space in the middle of Alps!" %}
<p></p> {% trans "You can contact us at" %} </h3>
<h3 class="intro-smallcap"><a href="mailto:info@ungleich.ch"><i class="fa fa-envelope">info@ungleich.ch</i></a>
</h3>
<h3 class="intro-smallcap"><i class="fa fa-phone"></i> (044) 534-66-22<p></p></h3> <h3 class="intro-smallcap"><i class="fa fa-phone"></i> (044) 534-66-22<p></p></h3>
<h3 class="intro-smallcap">{% trans "or" %}</h3> <h3 class="intro-smallcap">{% trans "or" %}</h3>
<h3 class="intro-smallcap">{% trans "Contact Us" %}</h3> <h3 class="intro-smallcap">{% trans "Contact Us" %}</h3>
<form action="{% url 'ungleich_page:contact' %}" method="post"> <form action="{% url 'ungleich_page:contact' %}" method="post">
{% csrf_token %} {% csrf_token %}
<div class="row"> <div class="row">
<div autofocus class="form-group col-lg-4 {% if form.name.errors %}has-error text-danger{% endif %}"> <div autofocus
class="form-group col-lg-4 {% if form.name.errors %}has-error text-danger{% endif %}">
{{ form.name.label_tag }} {{ form.name.label_tag }}
{{ form.name }} {{ form.name }}
{{ form.name.errors|striptags }} {{ form.name.errors|striptags }}
@ -47,7 +56,8 @@
{{ form.non_field_errors }} {{ form.non_field_errors }}
<div class="form-group col-lg-12"> <div class="form-group col-lg-12">
<input type="hidden" name="save" value="contact"> <input type="hidden" name="save" value="contact">
<button type="submit" class="btn btn-default" {% if form.name.errors %} autofocus {% endif %}>{% trans "Submit" %}</button> <button type="submit" class="btn btn-default" {% if form.name.errors %}
autofocus {% endif %}>{% trans "Submit" %}</button>
</div> </div>
</div> </div>
</form> </form>

View file

@ -6,8 +6,8 @@
<div class="row"> <div class="row">
<div class="col-lg-12 text-center wow fadeInDown"> <div class="col-lg-12 text-center wow fadeInDown">
<h2 class="section-heading">{% trans "our services" %}</h2> <h2 class="section-heading">{% trans "our services" %}</h2>
<h3 class="section-subheading text-muted">{% trans "We support our clients in all areas of Unix infrastructure.<p></p> <h3 class="section-subheading text-muted">We support our clients in all areas of Unix infrastructure.<p></p>
Our top notch configuration management is refreshingly simple and reliable." %}</h3> Our top notch configuration management is refreshingly simple and reliable."</h3>
</div> </div>
</div> </div>
<div class="row text-center"> <div class="row text-center">

View file

@ -31,13 +31,19 @@
<link href="{% static 'ungleich_page/css/ungleich.css' %}" rel="stylesheet"> <link href="{% static 'ungleich_page/css/ungleich.css' %}" rel="stylesheet">
<!-- Google tracking --> <!-- Google tracking -->
<script src="//www.google-analytics.com/analytics.js" async></script><script> <script src="//www.google-analytics.com/analytics.js" async></script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ <script>
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), (function (i, s, o, g, r, a, m) {
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) i['GoogleAnalyticsObject'] = r;
i[r] = i[r] || function () {
(i[r].q = i[r].q || []).push(arguments)
}, i[r].l = 1 * new Date();
a = s.createElement(o),
m = s.getElementsByTagName(o)[0];
a.async = 1;
a.src = g;
m.parentNode.insertBefore(a, m)
})(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga'); })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
ga('create', 'UA-62285904-1', 'auto'); ga('create', 'UA-62285904-1', 'auto');
@ -45,7 +51,8 @@
</script> </script>
<link rel="shortcut icon" href="img/favicon.ico" type="image/x-icon"> <link rel="shortcut icon" href="img/favicon.ico" type="image/x-icon">
<style id="igtranslator-color" type="text/css"></style></head> <style id="igtranslator-color" type="text/css"></style>
</head>
<body id="page-top" class="index"> <body id="page-top" class="index">
@ -54,13 +61,16 @@
<div class="container"> <div class="container">
<!-- Brand and toggle get grouped for better mobile display --> <!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header page-scroll"> <div class="navbar-header page-scroll">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"> <button type="button" class="navbar-toggle" data-toggle="collapse"
data-target="#bs-example-navbar-collapse-1">
<span class="sr-only">Toggle navigation</span> <span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span> <span class="icon-bar"></span>
<span class="icon-bar"></span> <span class="icon-bar"></span>
<span class="icon-bar"></span> <span class="icon-bar"></span>
</button> </button>
<p><a class="navbar-brand page-scroll" href="#page-top"><img src="{% static 'ungleich_page/img/logo_white.svg'%}"></a></p> <p><a class="navbar-brand page-scroll" href="#page-top"><img
src="{% static 'ungleich_page/img/logo_white.svg' %}"></a></p>
<p>&nbsp;</p> <p>&nbsp;</p>
</div> </div>
@ -141,17 +151,24 @@
<!-- jQuery --> <!-- jQuery -->
<script src="{% static 'ungleich_page/js/jquery.js' %}" type="text/javascript"></script> <script src="{% static 'ungleich_page/js/jquery.js' %}" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function () {
if ($(".has-error").length != 0) {
window.location = window.location.pathname + "#contact"
}
});
</script>
<!-- Bootstrap Core JavaScript --> <!-- Bootstrap Core JavaScript -->
<script src="{% static 'ungleich_page/js/bootstrap.min.js' %}" type="text/javascript"></script> <script src="{% static 'ungleich_page/js/bootstrap.min.js' %}" type="text/javascript"></script>
<!-- Plugin JavaScript --> <!-- Plugin JavaScript -->
<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery-easing/1.3/jquery.easing.min.js" type="text/javascript"></script> <script src="http://cdnjs.cloudflare.com/ajax/libs/jquery-easing/1.3/jquery.easing.min.js"
type="text/javascript"></script>
<script src="{% static 'ungleich_page/js/classie.js' %}" type="text/javascript"></script> <script src="{% static 'ungleich_page/js/classie.js' %}" type="text/javascript"></script>
<script src="{% static 'ungleich_page/js/cbpAnimatedHeader.js' %}" type="text/javascript"></script> <script src="{% static 'ungleich_page/js/cbpAnimatedHeader.js' %}" type="text/javascript"></script>
<!-- Contact Form JavaScript --> <!-- Contact Form JavaScript -->
<script src="{% static 'ungleich_page/js/jqBootstrapValidation.js' %}" type="text/javascript"></script> <script src="{% static 'ungleich_page/js/jqBootstrapValidation.js' %}" type="text/javascript"></script>
<!-- <script src="{% static 'ungleich_page/js/contact_me.js' %}" type="text/javascript"></script> --> <!-- <script src="{% static 'ungleich_page/js/contact_me.js' %}" type="text/javascript"></script> -->
@ -163,9 +180,11 @@
<!-- Custom Fonts --> <!-- Custom Fonts -->
<link href="//fonts.googleapis.com/css?family=Raleway" rel="stylesheet" type="text/css"> <link href="//fonts.googleapis.com/css?family=Raleway" rel="stylesheet" type="text/css">
<link href="{% static 'ungleich_page/font-awesome-4.1.0/css/font-awesome.min.css' %}" rel="stylesheet" type="text/css"> <link href="{% static 'ungleich_page/font-awesome-4.1.0/css/font-awesome.min.css' %}" rel="stylesheet"
type="text/css">
<link href="//fonts.googleapis.com/css?family=Montserrat:400,700" rel="stylesheet" type="text/css"> <link href="//fonts.googleapis.com/css?family=Montserrat:400,700" rel="stylesheet" type="text/css">
<link href="//fonts.googleapis.com/css?family=Kaushan+Script" rel="stylesheet" type="text/css"> <link href="//fonts.googleapis.com/css?family=Kaushan+Script" rel="stylesheet" type="text/css">
<link href="//fonts.googleapis.com/css?family=Droid+Serif:400,700,400italic,700italic" rel="stylesheet" type="text/css"> <link href="//fonts.googleapis.com/css?family=Droid+Serif:400,700,400italic,700italic" rel="stylesheet"
type="text/css">
<link href="//fonts.googleapis.com/css?family=Roboto+Slab:400,100,300,700" rel="stylesheet" type="text/css"> <link href="//fonts.googleapis.com/css?family=Roboto+Slab:400,100,300,700" rel="stylesheet" type="text/css">
</html> </html>

View file

@ -2,9 +2,10 @@ from django.contrib import messages
from django.views.generic.edit import FormView from django.views.generic.edit import FormView
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.core.urlresolvers import reverse_lazy from django.core.urlresolvers import reverse_lazy,reverse
from django.views.generic import View from django.views.generic import View
from django.shortcuts import render from django.shortcuts import render,redirect,render_to_response
from django.http import HttpResponseRedirect
from utils.forms import ContactUsForm from utils.forms import ContactUsForm

52
utils/mailer.py Normal file
View file

@ -0,0 +1,52 @@
import six
from django.core.mail import send_mail
from django.conf import settings
class BaseMailer(object):
def __init__(self):
self._slug = None
self.no_replay_mail = 'no-replay@ungleich.ch'
if not hasattr(self, '_to'):
self._to = None
@property
def slug(self):
return self._slug
@slug.setter
def slug(self, val):
assert isinstance(val, six.string_types), "slug is not string: %r" % val
self._slug = val
@property
def registration(self):
return self.message
@registration.setter
def registration(self, val):
msg = "registration is not dict with fields subject,message"
assert type(val) is dict, msg
assert val.get('subject') and val.get('message'), msg
self._message, self._subject, self._from = (
val.get('message'), val.get('subject'), val.get('from'))
assert isinstance(self.slug, six.string_types), 'slug not set'
def send_mail(self, to=None):
if not to:
to = self._to
if not self.message:
raise NotImplementedError
send_mail(self._subject, self._message, self.no_replay_mail, [to])
class DigitalGlarusRegistrationMailer(BaseMailer):
message = settings.REGISTRATION_MESSAGE
def __init__(self, slug):
self.slug = slug
self.registration = self.message
self._message = self._message.format(slug=self._slug)
super().__init__()

View file

@ -1,6 +1,5 @@
import stripe import stripe
from django.conf import settings from django.conf import settings
stripe.api_key = settings.STRIPE_API_PRIVATE_KEY stripe.api_key = settings.STRIPE_API_PRIVATE_KEY
@ -122,3 +121,6 @@ class StripeUtils(object):
name=name, name=name,
currency=self.CURRENCY, currency=self.CURRENCY,
id=id) id=id)