diff --git a/archilance/settings/base.py b/archilance/settings/base.py index 13c9b8e..db32bcf 100644 --- a/archilance/settings/base.py +++ b/archilance/settings/base.py @@ -1,5 +1,7 @@ +from django.core.files.storage import FileSystemStorage import os + # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) ROOT_DIR = os.path.dirname(BASE_DIR) @@ -58,7 +60,26 @@ LOCAL_APPS = [ 'ratings', ] -INSTALLED_APPS = DJANGO_APPS + THIRD_PARTY_APPS + LOCAL_APPS +WAGTAIL = [ + 'wagtail.wagtailforms', + 'wagtail.wagtailredirects', + 'wagtail.wagtailembeds', + 'wagtail.wagtailsites', + 'wagtail.wagtailusers', + 'wagtail.wagtailsnippets', + 'wagtail.wagtaildocs', + 'wagtail.wagtailimages', + 'wagtail.wagtailsearch', + 'wagtail.wagtailadmin', + 'wagtail.wagtailcore', + + 'modelcluster', + 'taggit', + + 'cms_pages', +] + +INSTALLED_APPS = DJANGO_APPS + THIRD_PARTY_APPS + LOCAL_APPS + WAGTAIL MIDDLEWARE_CLASSES = [ 'django.middleware.security.SecurityMiddleware', @@ -70,6 +91,9 @@ MIDDLEWARE_CLASSES = [ 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'common.middleware.SetLastVisitMiddleware', + + 'wagtail.wagtailcore.middleware.SiteMiddleware', + 'wagtail.wagtailredirects.middleware.RedirectMiddleware', ] ROOT_URLCONF = 'archilance.urls' @@ -286,3 +310,17 @@ else: 'shop_id': 0, 'scid': 0, }) + +WAGTAIL_SITE_NAME = 'PROEKTON' + + +# class ASCIIFileSystemStorage(FileSystemStorage): +# def get_valid_name(self, name): +# symbols = (u"абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ", +# u"abvgdeejzijklmnoprstufhzcss_y_euaABVGDEEJZIJKLMNOPRSTUFHZCSS_Y_EUA") +# +# tr = {ord(a):ord(b) for a, b in zip(*symbols)} +# name = name.translate(tr) +# return super().get_valid_name(name) +# +# DEFAULT_FILE_STORAGE = ASCIIFileSystemStorage diff --git a/archilance/urls.py b/archilance/urls.py index c77fca5..8c7bfa5 100644 --- a/archilance/urls.py +++ b/archilance/urls.py @@ -8,6 +8,9 @@ from django.views.generic import TemplateView from .views import HomeTemplateView, TestChatTemplateView from wallets.views import TmpCheckOrderView, TmpPaymentAvisoView +from wagtail.wagtailadmin import urls as wagtailadmin_urls +from wagtail.wagtailcore import urls as wagtail_urls + urlpatterns = [ url(r'^$', HomeTemplateView.as_view()), @@ -26,8 +29,9 @@ urlpatterns = [ url(r'^users/', include('registration.backends.default.urls')), url(r'^admin/', admin.site.urls), url(r'^api/', include('api.urls')), - - + url(r'^cms/', include(wagtailadmin_urls)), + url(r'^pages/', include(wagtail_urls)), + # TODO: Move URLs into the "wallets" app (Yandex Money settings modification needed): url(r'^yandex/check$', TmpCheckOrderView.as_view(), name='tmp-check-order'), diff --git a/cms_pages/__init__.py b/cms_pages/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/cms_pages/admin.py b/cms_pages/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/cms_pages/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/cms_pages/apps.py b/cms_pages/apps.py new file mode 100644 index 0000000..5734504 --- /dev/null +++ b/cms_pages/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class CmsPagesConfig(AppConfig): + name = 'cms_pages' diff --git a/cms_pages/migrations/0001_initial.py b/cms_pages/migrations/0001_initial.py new file mode 100644 index 0000000..ff087b4 --- /dev/null +++ b/cms_pages/migrations/0001_initial.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.7 on 2016-08-26 12:44 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion +import wagtail.wagtailcore.blocks +import wagtail.wagtailcore.fields +import wagtail.wagtailimages.blocks + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('wagtailcore', '0029_unicode_slugfield_dj19'), + ] + + operations = [ + migrations.CreateModel( + name='CmsPage', + fields=[ + ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.Page')), + ('body', wagtail.wagtailcore.fields.StreamField((('heading', wagtail.wagtailcore.blocks.CharBlock(classname='full title')), ('paragraph', wagtail.wagtailcore.blocks.RichTextBlock()), ('image', wagtail.wagtailimages.blocks.ImageChooserBlock())))), + ('date', models.DateField(verbose_name='Дата размещения')), + ], + options={ + 'abstract': False, + }, + bases=('wagtailcore.page',), + ), + ] diff --git a/cms_pages/migrations/__init__.py b/cms_pages/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/cms_pages/models.py b/cms_pages/models.py new file mode 100644 index 0000000..ef0038e --- /dev/null +++ b/cms_pages/models.py @@ -0,0 +1,26 @@ +from django.db import models +from wagtail.wagtailadmin.edit_handlers import StreamFieldPanel, FieldPanel +from wagtail.wagtailcore import blocks +from wagtail.wagtailcore.fields import StreamField +from wagtail.wagtailcore.models import Page +from wagtail.wagtailimages.blocks import ImageChooserBlock + +__author__ = 'PekopT' + + +class CmsPage(Page): + body = StreamField([ + ('heading', blocks.CharBlock(classname="full title")), + ('paragraph', blocks.RichTextBlock()), + ('image', ImageChooserBlock()), + ]) + date = models.DateField("Дата размещения") + + content_panels = Page.content_panels + [ + FieldPanel('date'), + StreamFieldPanel('body'), + ] + + # promote_panels = [ + # MultiFieldPanel(Page.promote_panels, "Common page configuration"), + # ] diff --git a/cms_pages/tests.py b/cms_pages/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/cms_pages/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/cms_pages/views.py b/cms_pages/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/cms_pages/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/projects/models.py b/projects/models.py index a39367d..4ab5b59 100644 --- a/projects/models.py +++ b/projects/models.py @@ -287,6 +287,7 @@ class Portfolio(models.Model): budget = models.DecimalField(max_digits=10, decimal_places=0, default=0, null=True, blank=True) building_classification = models.ForeignKey(BuildingClassfication, related_name='portfolios', null=True, blank=True) construction_type = models.ForeignKey(ConstructionType, related_name='portfolios', null=True, blank=True) + created = models.DateTimeField(default=timezone.now) currency = models.CharField(max_length=20, default='rur', choices=CURRENCIES, null=True, blank=True) description = models.TextField() location = TreeForeignKey('common.Location', related_name='portfolios', null=True, blank=True) @@ -296,7 +297,6 @@ class Portfolio(models.Model): term_type = models.CharField(max_length=20, choices=TERMS, default='hour', null=True, blank=True) user = models.ForeignKey(User, related_name='portfolios', null=True, blank=True) worksell = models.BooleanField(default=False) - created = models.DateTimeField(default=timezone.now) def __str__(self): return self.name @@ -320,8 +320,7 @@ class Portfolio(models.Model): def get_cover(self): photo = self.photos.first() - return photo and photo.img - + return photo and photo.img # WTF? We could at leat return a URL, not an object class PortfolioPhoto(models.Model): diff --git a/projects/templates/project_filter.html b/projects/templates/project_filter.html index b012e46..154f280 100644 --- a/projects/templates/project_filter.html +++ b/projects/templates/project_filter.html @@ -180,11 +180,13 @@ {{ project.name }}

- + {% if project.realty %} + + {% endif %}

{{ project.text|linebreaksbr|truncatechars:300 }}

diff --git a/ratings/models.py b/ratings/models.py index 375907b..a231776 100644 --- a/ratings/models.py +++ b/ratings/models.py @@ -22,7 +22,7 @@ class HistoryRating(models.Model): class SpecializationRating(models.Model): user = models.ForeignKey(User, related_name='specialization_rating', null=True, blank=True) team = models.ForeignKey(Team, related_name='specialization_rating', null=True, blank=True) - specialization = models.ForeignKey(Specialization, related_name='specialization_rating') + specialization = models.ForeignKey(Specialization, related_name='specialization_rating') # TODO: Pluralize related name position = models.PositiveIntegerField(default=0) def __str__(self): @@ -31,5 +31,3 @@ class SpecializationRating(models.Model): class Meta: verbose_name = 'Рейтинг специализаций' verbose_name_plural = 'Рейтинги специализаций' - - diff --git a/requirements/base.txt b/requirements/base.txt index 1c0f8de..19894cb 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -42,3 +42,4 @@ gunicorn==19.6.0 rest-framework-generic-relations django-hitcount django-activeurl==0.1.9 +wagtail==1.6 diff --git a/templates/cms_pages/cms_page.html b/templates/cms_pages/cms_page.html new file mode 100644 index 0000000..a480c11 --- /dev/null +++ b/templates/cms_pages/cms_page.html @@ -0,0 +1,22 @@ +{% extends 'partials/base.html' %} + +{% block content %} +
+ {% include 'partials/header.html' %} +
+
+

{{ page.title }}

+
+
+
+ + {% for block in page.body %} + {% if block.block_type == 'heading' %} +

{{ block.value }}

+ {% else %} +
+ {{ block }} +
+ {% endif %} + {% endfor %} +{% endblock %} \ No newline at end of file diff --git a/templates/partials/header.html b/templates/partials/header.html index 2f88de2..248cd94 100644 --- a/templates/partials/header.html +++ b/templates/partials/header.html @@ -111,9 +111,9 @@ Настройки -{#
  • #} -{# FAQ#} -{#
  • #} +
  • + FAQ +
  • Выйти diff --git a/users/models.py b/users/models.py index 13bbfab..432e1f2 100644 --- a/users/models.py +++ b/users/models.py @@ -195,6 +195,10 @@ class User(AbstractBaseUser, PermissionsMixin): def is_owner_team(self): return Team.objects.filter(owner=self.pk).exists() + + def get_popular_specialization(self): + from ratings.models import SpecializationRating + return SpecializationRating.objects.filter(user=self).order_by('position').first().specialization.name class Team(models.Model): diff --git a/users/templates/contractor_filter.html b/users/templates/contractor_filter.html index 32817e4..9bf6121 100644 --- a/users/templates/contractor_filter.html +++ b/users/templates/contractor_filter.html @@ -196,7 +196,9 @@
  • - +{# TODO #} +{# #} + написать сообщение
  • diff --git a/users/templates/contractor_office.html b/users/templates/contractor_office.html index 4327f5a..3ccb4b4 100644 --- a/users/templates/contractor_office.html +++ b/users/templates/contractor_office.html @@ -16,57 +16,61 @@ {% include 'partials/contractor_profile_tabs.html' %}
    -
    +
    {% if not contractor.is_owner_team %} - {% endif %}
    - - +
    - {% if contractor.is_owner_team %} + {% if contractor.is_owner_team %}
    - {% thumbnail contractor.avatar "265x264" crop="center" as im %} - profile-image - {% endthumbnail %} + {% if contractor.avatar %} + {% thumbnail contractor.avatar "265x264" crop="center" as im %} + profile-image + {% endthumbnail %} + {% else %} + profile-image + {% endif %}
    @@ -79,23 +83,25 @@

    Состав группы

    {% for p in participants %} -
    -
    - {% thumbnail p.avatar "60x60" crop="center" as im %} - mess-image - {% endthumbnail %} + {% if p.avatar %} + {% thumbnail p.avatar "60x60" crop="center" as im %} + mess-image + {% endthumbnail %} + {% else %} + mess-image + {% endif %}
    -

    +

    {{ p.get_full_name }}

    - Программист +

    {{ p.get_popular_specialization }}

    {% empty %} - В группе пока нет участников + В группе пока нет участников {% endfor %}
    @@ -103,18 +109,18 @@
    -

    - {{ contractor.team }} -

    +

    {{ contractor.team.name }}

    Россия, Москва

    - {# #} + + +
    Свободен
    написать сообщение
    @@ -124,20 +130,17 @@
    - {% if contractor.team %} - {% ratings_team_widget contractor.team.pk %} - {% endif %} + {% ratings_team_widget contractor.team.pk %} {% if contractor.cro %} -
    -
    -

    Есть допуск СРО

    -
    +
    +
    +

    Есть допуск СРО

    +
    {% endif %}
    -