def load_boxes(context, slugs=None, **filters): if slugs: filters['slug__in'] = ordered_slugs = slugs.split(',') request = context['request'] current_site = getattr( request, 'site', Site.objects.get(pk=settings.SITE_ID) ) filters['site__in'] = [current_site] master_site = settings.OPPS_CONTAINERS_SITE_ID or 1 if current_site.id != master_site: filters['site__in'].append(master_site) filters['date_available__lte'] = timezone.now() filters['published'] = True boxes = ContainerBox.objects.filter(**filters).order_by('-site') fallback = getattr(settings, 'OPPS_MULTISITE_FALLBACK', False) exclude_ids = [] if slugs: ob = lambda i, o=ordered_slugs: ( i.site != current_site, i.site.id, o.index(i.slug) ) boxes = sorted( boxes, key=ob ) for box in boxes: if box.queryset: results = box.get_queryset(exclude_ids=exclude_ids) else: results = box.ordered_containers(exclude_ids=exclude_ids) if box.queryset: [exclude_ids.append(i.pk) for i in results if i.pk not in exclude_ids and issubclass(i.__class__, Container)] elif fallback: [exclude_ids.append(i.container_id) for i in results if i.container_id and i.container_id not in exclude_ids] else: [exclude_ids.append(i.pk) for i in results if i.pk not in exclude_ids] results = {} for box in boxes: if box.slug not in results: results[box.slug] = box get_request().container_boxes = results return results
def get_containerbox(context, slug, template_name=None, **extra_context): request = context['request'] current_site = getattr(request, 'site', Site.objects.get(pk=settings.SITE_ID)) is_mobile = getattr(request, 'is_mobile', False) cachekey = "ContainerBox-{}-{}-{}-{}".format(slug, template_name, is_mobile, current_site.id) render = cache.get(cachekey) if render: return render box = getattr(get_request(), 'container_boxes', {}).get(slug, None) if not box: filters = {} filters['site'] = current_site filters['slug'] = slug filters['date_available__lte'] = timezone.now() filters['published'] = True master_site = settings.OPPS_CONTAINERS_SITE_ID or 1 try: box = ContainerBox.objects.get(**filters) except ContainerBox.DoesNotExist: box = None if current_site.id != master_site and \ not box or not getattr(box, 'has_content', False): filters['site'] = master_site try: box = ContainerBox.objects.get(**filters) except ContainerBox.DoesNotExist: box = None if not box: box = ContainerBox.objects.none() t = template.loader.get_template('articles/articlebox_detail.html') if template_name: t = template.loader.get_template(template_name) context = { 'articlebox': box, 'slug': slug, 'context': context, 'request': request } context.update(extra_context) render = t.render(template.Context(context)) cache.set(cachekey, render, settings.OPPS_CACHE_EXPIRE) return render
def load_boxes(context, slugs=None, **filters): if slugs: filters['slug__in'] = ordered_slugs = slugs.split(',') request = context['request'] current_site = getattr(request, 'site', Site.objects.get(pk=settings.SITE_ID)) filters['site__in'] = [current_site] master_site = settings.OPPS_CONTAINERS_SITE_ID or 1 if current_site.id != master_site: filters['site__in'].append(master_site) filters['date_available__lte'] = timezone.now() filters['published'] = True boxes = ContainerBox.objects.filter(**filters).order_by('-site') fallback = getattr(settings, 'OPPS_MULTISITE_FALLBACK', False) exclude_ids = [] if slugs: ob = lambda i, o=ordered_slugs: (i.site != current_site, i.site.id, o.index(i.slug)) boxes = sorted(boxes, key=ob) for box in boxes: if box.queryset: results = box.get_queryset(exclude_ids=exclude_ids) else: results = box.ordered_containers(exclude_ids=exclude_ids) if box.queryset: [ exclude_ids.append(i.pk) for i in results if i.pk not in exclude_ids and issubclass(i.__class__, Container) ] elif fallback: [ exclude_ids.append(i.container_id) for i in results if i.container_id and i.container_id not in exclude_ids ] else: [ exclude_ids.append(i.pk) for i in results if i.pk not in exclude_ids ] results = {} for box in boxes: if box.slug not in results: results[box.slug] = box get_request().container_boxes = results return results
def get_containerbox( context, slug, template_name=None, channel=None, **extra_context): request = context['request'] current_site = getattr( request, 'site', Site.objects.get(pk=settings.SITE_ID) ) is_mobile = getattr(request, 'is_mobile', False) cachekey = "ContainerBox-{0}-{1}-{2}-{3}".format( slug, template_name, is_mobile, current_site.id ) render = cache.get(cachekey) if render: return render box = getattr(get_request(), 'container_boxes', {}).get(slug, None) if not box: filters = {} filters['site'] = current_site filters['slug'] = slug filters['date_available__lte'] = timezone.now() filters['published'] = True if channel is not None: filters['channel'] = channel master_site = settings.OPPS_CONTAINERS_SITE_ID or 1 try: box = ContainerBox.objects.get(**filters) except ContainerBox.DoesNotExist: box = None if current_site.id != master_site and \ not box or not getattr(box, 'has_content', False): filters['site'] = master_site try: box = ContainerBox.objects.get(**filters) except ContainerBox.DoesNotExist: box = None if not box: box = ContainerBox.objects.none() t = template.loader.get_template('articles/articlebox_detail.html') if template_name: t = template.loader.get_template(template_name) context = { 'articlebox': box, 'slug': slug, 'context': context, 'request': request } context.update(extra_context) render = t.render(template.Context(context)) cache.set(cachekey, render, settings.OPPS_CACHE_EXPIRE) return render