Exemplo n.º 1
0
def news_detail(request, pk=None):
    """
    Детали поста
    """
    company = None
    if request.environ['HTTP_HOST']:
        company = Company.objects.filter(domain__contains=request.environ['HTTP_HOST'])[0]
    post_qs = Post.objects.for_user(request.user, company=company)
    try:
        instance_qs = post_qs.filter(pk=pk)
        instance_qs = Post.update_qs(instance_qs)
        if len(instance_qs) != 1:
            raise Http404
        instance = instance_qs[0]
    except Charter.DoesNotExist:
        raise Http404
    instance.text = find_img(instance.text)

    tags_ids = set(TagPost.objects.filter(post_id=instance.pk).values_list('tag_id', flat=True))
    tags_qs = Tag.objects.filter(id__in=tags_ids)
    recent_post_idx = get_recent_for_tags(instance, request.user)
    recent_post_qs = Post.objects.filter(id__in=recent_post_idx[0:16])
    if recent_post_qs.count() == 0:
        recent_post_qs = Post.objects.all()[0:16]

    return render(request, "newsapp/news_detail.html", {
        'instance': instance,
        'tags_qs': tags_qs,
        'active': instance.charter.slug,
        'recent_post_qs': recent_post_qs,
        'seo': get_settings(company.id),
    })
Exemplo n.º 2
0
def charter_view(request):
    """
    Галерея категорий
    """
    message = None
    filter_dct = dict()
    charter_qs = Charter.objects.for_user(request.user).filter(**filter_dct)

    query = request.GET.get('query')
    if query:
        query = query.strip()
        charter_qs = charter_qs.filter(
            Q(title__icontains=query) |
            Q(lead__icontains=query)
        )
        message = f'Все категории по поиску "{query}"'
    user = request.user
    charter_dct = dict(Post.objects.for_user(user).order_by().values_list('charter_id').annotate(count=Count('id')))
    for charter in charter_qs:
        charter.count = charter_dct.get(charter.id, None)

    return render(request, "postapp/charter_view.html", {
        'charter_qs': charter_qs,
        'active': 'charter',
        'message': message,
        'seo': get_settings(request.user.company_id),
    })
Exemplo n.º 3
0
def get_footer(context):
    """
	Выводит виджет футера
	"""
    seo = get_settings()
    return {
        'SEO':
        seo,
        'inc_counter_name':
        f'inc/counter.html'
        if settings.DEBUG else f'inc/counter_{ seo["folder"] }.html'
    }
Exemplo n.º 4
0
def calendar(request):
    year = request.GET.get('year')
    if not year:
        year = timezone.now().year
    year = int(year)

    company = Company.objects.filter(domain__contains=request.environ['HTTP_HOST'])[0]
    year_lst = set()
    post_qs = Post.objects.for_user(user=request.user, company=company).order_by('date_post')
    for post in range(post_qs.first().date_post.year, post_qs.last().date_post.year + 1):
        year_lst.add(post)
    year_lst = list(year_lst)
    sorted(year_lst)

    post_qs = Post.objects.for_user(user=request.user, company=company).filter(date_post__startswith=year).order_by('date_post')
    post_dct = dict()
    for m in range(1, 13):
        first_day = datetime.date(year, m, 1)
        length_mons = (first_day - datetime.timedelta(days=1))
        post_dct.setdefault(length_mons.month, {}).setdefault('length', length_mons.day)
        post_dct.setdefault(m, {}).setdefault('name', first_day.strftime("%B"))
        post_dct.setdefault(m, {}).setdefault('weekday', first_day.isoweekday())
        post_dct.setdefault(m, {}).setdefault('date', [])

    for m in range(1, 13):
        count = 0
        show = ''
        cl = list()
        ls = list()
        for d in range(1, 43):
            if len(ls) == 7:
                cl.append(ls)
                ls = list()
            if d >= post_dct[m]['weekday']:
                count += 1
                show = count
            if count > post_dct[m]['length']:
                show = ''
            ls.append(show)
        cl.append(ls)
        post_dct.setdefault(m, {}).setdefault('calendar', cl)

    for post in post_qs:
        post_dct[post.date_post.month]['date'].append(post.date_post.day)

    seo = get_settings(request.user.company_id)
    return render(request, "newsapp/calendar.html", {
        'post_dct': dict(sorted(post_dct.items(), key=lambda item: item[0])),
        'year': year,
        'year_lst': year_lst,
        'seo': seo
    })
Exemplo n.º 5
0
def photo_view(request):
    """
    Фотогалерея
    :param request:
    :return:
    """
    message = None
    filter_dct = dict()
    slug_tag = request.GET.get('tag')
    if slug_tag:
        filter_dct.update({'tags__slug': slug_tag})
        tag_obj = get_object_or_404(Tag, slug=slug_tag)
        message = f'Все фотографии по тегу "{tag_obj}"'

    company = Company.objects.filter(
        domain__contains=request.environ['HTTP_HOST'])[0]
    photo_qs = Photo.objects.for_user(
        request.user,
        company=company).filter(**filter_dct).order_by('deleted', '-changed')
    query = request.GET.get('query')
    if query:
        query = query.strip()
        photo_qs = photo_qs.filter(
            Q(title__icontains=query) | Q(description__icontains=query))
        message = f'Все фотографии по поиску "{query}"'

    seo = get_settings()
    page = int(request.GET.get('page')) if request.GET.get('page') else 1
    pagination_counter = 16
    if page:
        photo_qs = photo_qs[(page - 1) * pagination_counter:page *
                            pagination_counter]
    else:
        photo_qs = photo_qs[0:pagination_counter]

    return render(
        request, "photoapp/photo_view.html", {
            'photo_qs': photo_qs,
            'active': 'photo',
            'message': message,
            'seo': seo,
            'pagination': {
                'current': page,
                'counter': pagination_counter,
                'first': 1,
                'rw': page - 1,
                'ff': page + 1,
                'last': pagination_counter,
                'counter_lst': [x for x in range(page - 3, page + 4)],
            }
        })
Exemplo n.º 6
0
def get_main_menu(context, request):
    """
	Выводит виджет меню
	"""
    get_keys = list(context.request.GET.keys())
    active = context.dicts[3].get('active', None)
    if len(get_keys) == 1:
        active = context.request.GET.get(get_keys[0], None)
    company = Company.objects.filter(
        domain__contains=request.environ['HTTP_HOST'])[0]
    seo = get_settings(company.id)
    return {
        'user': context.request.user,
        'active': active,
        'main_menu': seo.get('main_menu', None),
        'site_name': seo.get('site_name', None),
    }
Exemplo n.º 7
0
def user_view(request):
    message = None
    user_qs = User.objects.for_user(request.user)
    query = request.GET.get('query')
    if query:
        query = query.strip()
        user_qs = user_qs.filter(
            Q(username__icontains=query) |
            Q(phone__icontains=query)
        )
        message = f'Все люди по поиску "{query}"'

    return render(request, "postapp/user_view.html", {
        'user_qs': user_qs,
        'active': 'user',
        'message': message,
        'seo': get_settings(request.user.company_id),
    })
Exemplo n.º 8
0
def company_view(request):
    message = None
    company_qs = Company.objects.for_user(request.user)
    query = request.GET.get('query')
    if query:
        query = query.strip()
        company_qs = company_qs.filter(
            Q(title__icontains=query) |
            Q(slug__icontains=query)
        )
        message = f'Все компании по поиску "{query}"'

    return render(request, "postapp/company_view.html", {
        'company_qs': company_qs,
        'active': 'company',
        'message': message,
        'seo': get_settings(request.user.company_id),
    })
Exemplo n.º 9
0
def post_edit(request, pk=None):
    """
    Редактирование поста
    """
    instance = None
    photo_list = [('', '---')]
    if pk:
        instance = get_object_or_404(Post, pk=pk)
        photo_list.append((instance.photo.id, instance.photo.title), )

    photo_qs = Photo.objects.for_user(request.user).order_by('-changed')[:10]
    for photo in photo_qs:
        photo_list.append((photo.id, photo.title), )

    charter_list = list()
    charter_qs = Charter.objects.for_user(request.user).order_by('-order')
    for charter in charter_qs:
        charter_list.append((charter.id, charter.title), )

    company = request.user.company
    init_dct = {
        'company_list': [(company.id, company.title)],
        'photo_list': photo_list,
        'charter_list': charter_list,
    }

    form = PostForm(data=request.POST or None, files=request.FILES or None, instance=instance, init_dct=init_dct)
    if request.method == 'POST' and form.is_valid():
        cd = form.cleaned_data
        post = form.save(commit=False)
        post.save()
        # Нельзя добавить теги к несуществующему объекту.
        post.save_tags()
        return redirect(post_edit, post.pk)

    tag_slugs = set(TagPost.objects.filter(post=instance).values_list('tag__slug', flat=True))
    tags_qs = Tag.objects.filter(slug__in=tag_slugs)
    return render(request, "postapp/post_edit.html", {
        'form': form,
        'instance': instance,
        'tags_qs': tags_qs,
        'active': 'post',
        'seo': get_settings(request.user.company_id),
    })
Exemplo n.º 10
0
class PostFeed(Feed):
    seo = get_settings()
    title = seo['title']
    description = seo['description']
    link = '/'

    def items(self):
        return Post.objects.filter(
            deleted__isnull=True,
            date_post__lte=timezone.now()).order_by('-date_post')[0:25]

    def item_title(self, obj):
        return obj.title

    def item_description(self, obj):
        return obj.lead

    def item_link(self, obj):
        return "/detail/%d" % obj.pk
Exemplo n.º 11
0
def company_edit(request, pk=None):
    """
    Добавить или отредактировать тег
    """
    instance = None
    if pk:
        instance = get_object_or_404(Company, pk=pk)
    form = CompanyForm(data=request.POST or None, files=request.FILES or None, instance=instance)
    if request.method == 'POST':
        if form.is_valid():
            form.save()
            return redirect(company_view)

    return render(request, "postapp/company_edit.html", {
        'form': form,
        'instance': instance,
        'active': 'company',
        'seo': get_settings(request.user.company_id),
    })
Exemplo n.º 12
0
    def get_context_data(self, **kwargs):
        company = Company.objects.filter(
            domain__contains=self.request.environ['HTTP_HOST'])[0]
        seo = get_settings(company.id)

        ctx = super(YandexDzenRss, self).get_context_data(**kwargs)
        post_qs = Post.objects.for_user(
            self.request.user, company=company).filter(
                deleted__isnull=True,
                date_post__lte=timezone.now()).order_by('-date_post')[0:25]
        for post in post_qs:
            post.title = delete_tags(post.title)
            post.lead = '<![CDATA[{}]]>'.format(delete_tags(post.lead))
            post.text = '<![CDATA[{}]]>'.format(delete_tags(post.text))
        ctx['object_list'] = post_qs
        ctx['static'] = settings.STATIC_URL
        ctx['media'] = settings.MEDIA_URL
        ctx['host'] = seo['domain']
        ctx['sitename'] = seo['title']
        ctx['description'] = seo['description']
        return ctx
Exemplo n.º 13
0
    def get_context_data(self, **kwargs):
        company = Company.objects.filter(
            domain__contains=self.request.environ['HTTP_HOST'])[0]
        seo = get_settings(company.id)

        ctx = super(YandexTurboRss, self).get_context_data(**kwargs)
        slug_charter = ctx['view'].request.GET.get('charter')
        slug_tag = ctx['view'].request.GET.get('tag')

        filter_dct = {
            # 'deleted__isnull': True,
            'date_post__lte': timezone.now(),
        }
        if slug_tag:
            filter_dct.update({'tags__slug': slug_tag})
            get_object_or_404(Tag, slug=slug_tag)

        if slug_charter:
            filter_dct.update({'charter__slug': slug_charter})
            get_object_or_404(Charter, slug=slug_charter)

        post_qs = Post.objects.for_user(
            self.request.user,
            company=company).filter(**filter_dct).order_by('-date_post')[0:50]
        for post in post_qs:
            post.turbo_new = post.turbo and not bool(post.deleted)
            post.title = process_text(post.title)
            post.lead = process_text(post.lead)
            post.text = process_text(post.text)
            post.url = post.get_absolute_url()
        ctx['object_list'] = post_qs
        ctx['static'] = settings.STATIC_URL
        ctx['media'] = settings.MEDIA_URL
        ctx['host'] = seo['domain']
        ctx['sitename'] = seo['title']
        ctx['description'] = seo['description']
        return ctx
Exemplo n.º 14
0
def charter_edit(request, pk=None):
    instance = None
    if pk:
        instance = get_object_or_404(Charter, pk=pk)

    company = request.user.company
    init_dct = {
        'company_list': [(company.id, company.title)],
    }
    form = CharterForm(data=request.POST or None, files=request.FILES or None, instance=instance, init_dct=init_dct)
    if request.method == 'POST' and form.is_valid():
        cd = form.cleaned_data
        charter = form.save(commit=False)
        charter.slug = cyr_lat(cd['title'])
        charter.save()
        update_charter(request.user)
        return redirect(charter_view)

    return render(request, "postapp/charter_edit.html", {
        'form': form,
        'instance': instance,
        'active': 'charter',
        'seo': get_settings(request.user.company_id),
    })
Exemplo n.º 15
0
def news_view(request):
    """
    Галерея новостей
    """
    message = None
    filter_dct = dict()
    slug_tag = request.GET.get('tag')
    company = Company.objects.filter(domain__contains=request.environ['HTTP_HOST'])[0]
    post_qs = Post.objects.for_user(request.user, company=company).order_by('-date_post')

    if slug_tag:
        tag_obj = get_object_or_404(Tag, slug=slug_tag)
        post_ids = TagPost.objects.filter(tag=tag_obj).values_list('post_id', flat=True)
        filter_dct.update(
            {'id__in': post_ids}
        )
        message = f'Публикации по тегу "{tag_obj}"'

    slug = request.GET.get('charter')
    if slug:
        charter = get_object_or_404(Charter, slug=slug)
        filter_dct.update(
            {'charter': charter}
        )
        message = f'Публикации в категории "{charter.title}"'

    date = request.GET.get('date')
    if date:
        filter_dct.update(
            {'date_post__startswith': date}
        )
        message = f'Публикации за дату "{date}"'

    query = request.GET.get('query')
    if query:
        query = query.strip()
        post_qs = post_qs.filter(
            Q(title__icontains=query) |
            Q(text__icontains=query) |
            Q(lead__icontains=query)
        )
        message = f'Публикации по поиску "{query}"'

    post_qs = post_qs.filter(**filter_dct)

    seo = get_settings()
    seo_title_lst = [seo["title"]]
    seo['seo_title'] = seo["title"]
    if message:
        seo_title_lst.append(message)

    page = int(request.GET.get('page')) if request.GET.get('page') else 1
    pagination_counter = 18
    if page > 1:
        post_qs = post_qs[(page-1)*pagination_counter:page*pagination_counter]
        keywords = Post.get_tags(post_qs, seo["keywords"])
        description_set = set(post_qs.values_list('title', flat=True))
        description_set.update({seo["description"]})
        description = list(description_set)

        date_lst = post_qs.values_list('date_post', flat=True)
        if date_lst:
            seo_title_lst.append(
                f"От {min(date_lst).strftime(f'%Y-%m-%d %H:%M:%S')} до {max(date_lst).strftime(f'%Y-%m-%d %H:%M:%S')}"
            )
    else:
        post_qs = post_qs[0:pagination_counter]
        keywords = Post.get_tags(post_qs, seo["keywords"])
        description_set = set(post_qs.values_list('title', flat=True))
        description_set.update({seo["description"]})
        description = list(description_set)

    seo['seo_title'] = ' | '.join(seo_title_lst)
    seo['seo_description'] = ', '.join(description)
    seo['seo_keywords'] = ', '.join(keywords)

    post_qs = Post.update_qs(post_qs)

    main_qs = post_qs[0:6]
    page_qs = post_qs[6:]

    post_idx = [pp.id for pp in post_qs]
    recent_qs = Post.objects.for_user(request.user, company=company).exclude(id__in=post_idx).order_by('-date_post')[0:12]

    return render(request, "newsapp/news_view.html", {
        'main_qs': main_qs,
        'recent_qs': recent_qs,
        'page_qs': page_qs,
        'message': message,
        'seo': seo,
        'pagination': {
            'current': page,
            'counter': pagination_counter,
            'first': 1,
            'rw': page-1,
            'ff': page+1,
            'last': pagination_counter,
            'counter_lst': [x for x in range(page - 3, page + 4)],
        },
    })
Exemplo n.º 16
0
def news_short_list(request):
    recent_qs = Post.objects.for_user(request.user).order_by('id')
    return render(request, "newsapp/news_short_list.html", {
        'recent_qs': recent_qs,
        'seo': get_settings(request.user.company_id),
    })
Exemplo n.º 17
0
def robots(request):
    robots = 'robots.txt'
    if request.environ['HTTP_HOST'] not in get_settings()['domain']:
        robots = 'disable.txt'
    return render(request, robots, content_type="text/plain")
Exemplo n.º 18
0
def post_view(request):
    """
    Галерея постов
    """
    message = None
    filter_dct = dict()
    slug_tag = request.GET.get('tag')

    if slug_tag:
        tag_obj = get_object_or_404(Tag, slug=slug_tag)
        post_ids = TagPost.objects.filter(tag=tag_obj).values_list('post_id', flat=True)
        filter_dct.update(
            {'id__in': post_ids}
        )
        message = f'Все посты по тегу "{tag_obj}"'

    slug = request.GET.get('charter')
    if slug:
        charter = Charter.objects.get(slug=slug)
        filter_dct.update(
            {'charter': charter}
        )
        message = f'Все посты в категории "{charter.title}"'

    date = request.GET.get('date')
    if date:
        filter_dct.update(
            {'date_post__startswith': date}
        )
        message = f'Все материалы за дату "{date}"'

    post_qs = Post.objects.for_user(request.user).filter(**filter_dct)
    query = request.GET.get('query')
    if query:
        query = query.strip()
        post_qs = post_qs.filter(
            Q(title__icontains=query) |
            Q(text__icontains=query) |
            Q(lead__icontains=query)
        )
        message = f'Все посты по поиску "{query}"'

    seo = get_settings(request.user.company_id)
    seo_title_lst = [seo["title"]]
    seo['seo_title'] = seo["title"]
    if message:
        seo_title_lst.append(message)

    page = int(request.GET.get('page')) if request.GET.get('page') else 1
    pagination_counter = 10
    if page > 1:
        post_qs = post_qs[(page-1)*pagination_counter:page*pagination_counter]
        keywords = Post.get_tags(post_qs, seo["keywords"])
        description_set = set(post_qs.values_list('title', flat=True))
        description_set.update({seo["description"]})
        description = list(description_set)
        date_lst = post_qs.values_list('date_post', flat=True)
        if date_lst:
            seo_title_lst.append(
                f"От {min(date_lst).strftime(f'%Y-%m-%d %H:%M:%S')} до {max(date_lst).strftime(f'%Y-%m-%d %H:%M:%S')}"
            )
    else:
        post_qs = post_qs[0:pagination_counter]
        keywords = Post.get_tags(post_qs, seo["keywords"])
        description_set = set(post_qs.values_list('title', flat=True))
        description_set.update({seo["description"]})
        description = list(description_set)

    seo['seo_title'] = ' | '.join(seo_title_lst)
    seo['seo_description'] = ', '.join(description)
    seo['seo_keywords'] = ', '.join(keywords)

    post_qs = Post.update_qs(post_qs)
    return render(request, "postapp/post_view.html", {
        'post_qs': post_qs,
        'active': 'post',
        'message': message,
        'seo': seo,
        'pagination': {
            'current': page,
            'counter': pagination_counter,
            'first': 1,
            'rw': page-1,
            'ff': page+1,
            'last': pagination_counter,
            'counter_lst': [x for x in range(page - 3, page + 4)],
        }
    })