diff --git a/BlocPowerWebsite/settings.py b/BlocPowerWebsite/settings.py index 3b8968a34ebf2d23724b43ebfc347ac387ad7b9b..1832550fdcb78d34ceade7edbc942cace802d0ae 100644 --- a/BlocPowerWebsite/settings.py +++ b/BlocPowerWebsite/settings.py @@ -46,8 +46,9 @@ LANGUAGES = [ ('de', 'German'), ] -MEDIA_URL = "/media/" -MEDIA_ROOT = os.path.join(BASE_DIR, "media") +MEDIA_URL = "/static/media/" +MEDIA_ROOT = os.path.join(BASE_DIR, "static/media") + INSTALLED_APPS = [ 'marketing.apps.MarketingConfig', @@ -59,6 +60,8 @@ INSTALLED_APPS = [ 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.sites', + 'ckeditor', + 'ckeditor_uploader', 'cms', 'menus', 'treebeard', @@ -75,6 +78,7 @@ INSTALLED_APPS = [ 'djangocms_snippet', 'djangocms_style', 'djangocms_column', + 'storages', ] MIDDLEWARE = [ @@ -166,24 +170,40 @@ AUTH_PASSWORD_VALIDATORS = [ # Internationalization # https://docs.djangoproject.com/en/2.2/topics/i18n/ - LANGUAGE_CODE = 'en-us' - TIME_ZONE = 'UTC' - USE_I18N = True - USE_L10N = True - USE_TZ = True +AWS_ACCESS_KEY_ID = 'AKIA3DOHIAZRASVFEE33' +AWS_SECRET_ACCESS_KEY = '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' +AWS_STORAGE_BUCKET_NAME = 'blocpower.io' +AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME +AWS_S3_OBJECT_PARAMETERS = { + 'CacheControl': 'max-age=86400', +} +AWS_LOCATION = 'static' + + # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/2.2/howto/static-files/ - -STATIC_URL = '/static/' -STATICFILES_DIRS = ( +STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static'), -) +] +STATIC_URL = 'https://%s/%s/' % (AWS_S3_CUSTOM_DOMAIN, AWS_LOCATION) +STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage' +DEFAULT_FILE_STORAGE = 'BlocPowerWebsite.storage_backends.MediaStorage' + -STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') +CKEDITOR_UPLOAD_PATH = "uploads/" +CKEDITOR_IMAGE_BACKEND = "pillow" +CKEDITOR_BROWSE_SHOW_DIRS = True +CKEDITOR_BASEPATH = '%sckeditor/ckeditor/' % STATIC_URL + +CKEDITOR_CONFIGS = { + 'default': { + 'toolbar': None, + }, +} diff --git a/BlocPowerWebsite/storage_backends.py b/BlocPowerWebsite/storage_backends.py new file mode 100644 index 0000000000000000000000000000000000000000..b411648411ba6f3bcecac1bae3c6e7a409f6cb96 --- /dev/null +++ b/BlocPowerWebsite/storage_backends.py @@ -0,0 +1,5 @@ +from storages.backends.s3boto3 import S3Boto3Storage + +class MediaStorage(S3Boto3Storage): + location = 'media' + file_overwrite = False diff --git a/BlocPowerWebsite/urls.py b/BlocPowerWebsite/urls.py index 42923727a6b04dfe1e49bcea8ac78bf036fbaa20..bcafd09737a727cf17aa0bd89d36286c73483329 100644 --- a/BlocPowerWebsite/urls.py +++ b/BlocPowerWebsite/urls.py @@ -26,12 +26,13 @@ urlpatterns = [ url(r'^team/$', views.Team.as_view(), name='team'), url(r'^press/$', views.Press.as_view(), name='press'), url(r'^jobs/$', views.Jobs.as_view(), name='jobs'), - url(r'^blogs/$', views.Blogs.as_view(), name='blog'), + url(r'^blog/$', views.Blog.as_view(), name='blog'), url(r'^contact/$', views.Contact.as_view(), name='contact'), url(r'^gtb/$', views.GTB.as_view(), name='gtb'), - # url(r'^/blog/(?\d+)/$', views.Blog), - path('blog//', views.Blog.as_view(), name='blog'), - # url(r'^blog/11/', views.Blog.as_view(), name='blog'), + path('blog/search/', views.searchBlog), + path('blog//', views.BlogSingle.as_view(), name='blog'), + path('newsletter/', views.NewsLetter.as_view(), name='newsletter'), path('admin/', admin.site.urls), + url(r'^ckeditor/', include('ckeditor_uploader.urls')), url(r'^', include('cms.urls')), ] diff --git a/marketing/forms.py b/marketing/forms.py index 27825a9ed95d9b27f9e0639b00303b07a35aa53c..17b2e2a9902daf674f8ad4532696c2a0df6c873c 100644 --- a/marketing/forms.py +++ b/marketing/forms.py @@ -1,7 +1,7 @@ from django.db import models from django import forms from django.forms import ModelForm -from marketing.models import ContactMessage +from marketing.models import ContactMessage, NewsletterSubscription class ContactMessagesForm(ModelForm): @@ -9,3 +9,10 @@ class ContactMessagesForm(ModelForm): class Meta: model = ContactMessage fields = ['full_name', 'email', 'content', 'post_date'] + + +class NewsletterForm(ModelForm): + email = forms.EmailField() + class Meta: + model = NewsletterSubscription + fields = ['full_name', 'email', 'subscribe_date'] diff --git a/marketing/migrations/0012_auto_20191106_1740.py b/marketing/migrations/0012_auto_20191106_1740.py new file mode 100644 index 0000000000000000000000000000000000000000..f63e34323d72143826627a78025b3b5268b5500a --- /dev/null +++ b/marketing/migrations/0012_auto_20191106_1740.py @@ -0,0 +1,31 @@ +# Generated by Django 2.1.13 on 2019-11-06 17:40 + +import ckeditor.fields +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('marketing', '0011_auto_20191101_2045'), + ] + + operations = [ + migrations.AddField( + model_name='blogarticle', + name='image', + field=models.CharField(default='', max_length=500), + preserve_default=False, + ), + migrations.AlterField( + model_name='blogarticle', + name='blogCategory', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='blogCategories', to='marketing.BlogCategory'), + ), + migrations.AlterField( + model_name='blogarticle', + name='content', + field=ckeditor.fields.RichTextField(), + ), + ] diff --git a/marketing/models.py b/marketing/models.py index 6946525d02e80acd5b1cdb3ee6d8a813404e9d68..d8f0ec42bf10227891dbde4002c9c1828265c7ce 100644 --- a/marketing/models.py +++ b/marketing/models.py @@ -1,5 +1,6 @@ from django.db import models from datetime import datetime +from ckeditor_uploader.fields import RichTextUploadingField class Employee(models.Model): @@ -22,7 +23,8 @@ class BlogArticle(models.Model): title = models.CharField(max_length=200) blogCategory = models.ForeignKey(BlogCategory, related_name="blogCategories", on_delete=models.CASCADE) source = models.CharField(max_length=200) - content = models.TextField(blank = True) + image = models.CharField(max_length=500) + content = RichTextUploadingField() author = models.CharField(max_length=200) pub_date = models.DateTimeField(default=datetime.now, blank=True) diff --git a/marketing/templates/marketing/base.html b/marketing/templates/marketing/base.html index ee016765b9273a3b40e901e8e7fefe5c041fd3ae..cc293dcfb82d56aa1e4dab64df32f705dee1881a 100644 --- a/marketing/templates/marketing/base.html +++ b/marketing/templates/marketing/base.html @@ -14,7 +14,7 @@ - + @@ -29,7 +29,7 @@ document.getElementById("myNavbar").style.width = "0%"; document.getElementById("myNavbar").classList.remove('show'); } - + function handleGAEvent(event, category, label, value) { gtag('event',event, { 'event_category': category, @@ -44,8 +44,38 @@ $(".blog-see-all-categories").hide(); $(".blog-rest-all-categories").show(); }); + + $("#newsletterForm").on('submit', function (event) { + event.preventDefault(); + $.ajax({ + type: "POST", + url: "/newsletter/", + data: { + 'csrfmiddlewaretoken': '{{ csrf_token }}', + 'full_name': $('#newsletter_fullname').val(), // from form + 'email': $('#newsletter_email').val() // from form + }, + success: function (data) { + if (data.result.is_valid) { + // $('#newsletter_fullname').val(''); + // $('#newsletter_email').val(''); + $('#newsletterForm').hide(); + $('.subscribe-newsletter-success-message').html(data.result.message); + } else { + $('#newsletter_fullname').val(''); + $('#newsletter_email').val(''); + $('.subscribe-newsletter-error-message').html(data.result.message); + } + }, + failure: function(data) { + alert('There\'s some error in the form.'); + } + }); + return false; + }); }); +