Compare commits
	
		
			9 Commits
		
	
	
		
			master
			...
			b1395a4b5d
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| b1395a4b5d | |||
| 4e03abcac8 | |||
| e9e09104ad | |||
| 95a847cee0 | |||
| 8281c1a4c9 | |||
| cbae38e893 | |||
| efd940f34f | |||
| 893f441ddd | |||
| cd76659ed9 | 
@ -30,7 +30,7 @@ class AdminSite(admin.AdminSite):
 | 
			
		||||
            'programs': Program.objects.active().values('pk', 'title') \
 | 
			
		||||
                                       .order_by('title'),
 | 
			
		||||
            # today's diffusions
 | 
			
		||||
            'diffusions': Diffusion.objects.on_air().date().order_by('start') \
 | 
			
		||||
            'diffusions': Diffusion.objects.date().order_by('start') \
 | 
			
		||||
                                   .select_related('episode'),
 | 
			
		||||
            # TODO: only for dashboard
 | 
			
		||||
            # last comments
 | 
			
		||||
 | 
			
		||||
@ -23,6 +23,9 @@ from aircox.models import *
 | 
			
		||||
 | 
			
		||||
__doc__ = __doc__.format(settings=settings)
 | 
			
		||||
 | 
			
		||||
__all__ = ('PlaylistImport', 'Command')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
logger = logging.getLogger('aircox.commands')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -89,11 +92,10 @@ class PlaylistImport:
 | 
			
		||||
                    **self.track_kwargs
 | 
			
		||||
                )
 | 
			
		||||
                track.timestamp = timestamp
 | 
			
		||||
                print('track', track, timestamp)
 | 
			
		||||
                track.info = line.get('info')
 | 
			
		||||
                tags = line.get('tags')
 | 
			
		||||
                if tags:
 | 
			
		||||
                    track.tags.add(*tags.split(','))
 | 
			
		||||
                    track.tags.add(*tags.lower().split(','))
 | 
			
		||||
            except Exception as err:
 | 
			
		||||
                logger.warning(
 | 
			
		||||
                    'an error occured for track {index}, it may not '
 | 
			
		||||
 | 
			
		||||
@ -62,6 +62,13 @@ class Episode(Page):
 | 
			
		||||
            raise ValueError('missing parent program')
 | 
			
		||||
        super().save(*args, **kwargs)
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def get_default_title(cls, page, date):
 | 
			
		||||
        return settings.AIRCOX_EPISODE_TITLE.format(
 | 
			
		||||
            program=page,
 | 
			
		||||
            date=date.strftime(settings.AIRCOX_EPISODE_TITLE_DATE_FORMAT)
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def get_init_kwargs_from(cls, page, date, title=None, **kwargs):
 | 
			
		||||
        """ Get default Episode's title  """
 | 
			
		||||
@ -252,7 +259,7 @@ class Diffusion(BaseRerun):
 | 
			
		||||
        return self.type == self.TYPE_ON_AIR and \
 | 
			
		||||
            self.start <= now and self.end >= now
 | 
			
		||||
 | 
			
		||||
    # TODO: property?
 | 
			
		||||
    @property
 | 
			
		||||
    def is_live(self):
 | 
			
		||||
        """ True if Diffusion is live (False if there are sounds files). """
 | 
			
		||||
        return self.type == self.TYPE_ON_AIR and \
 | 
			
		||||
 | 
			
		||||
@ -16,7 +16,31 @@
 | 
			
		||||
                <tr {% if diffusion.is_now %}class="is-selected"{% endif %}>
 | 
			
		||||
                    <td>{{ diffusion.start|time }} - {{ diffusion.end|time }}</td>
 | 
			
		||||
                    <td><img src="{% thumbnail episode.cover 64x64 crop %}"/></td>
 | 
			
		||||
                    <td><a href="{% url "admin:aircox_episode_change" episode.pk %}">{{ episode.title }}</a></td>
 | 
			
		||||
                    <td>
 | 
			
		||||
                        <a href="{% url "admin:aircox_episode_change" episode.pk %}">{{ episode.title }}</a>
 | 
			
		||||
                         
 | 
			
		||||
                        {% if diffusion.type == diffusion.TYPE_ON_AIR %}
 | 
			
		||||
                        <span class="tag is-info">
 | 
			
		||||
                            <span class="icon is-small">
 | 
			
		||||
                                {% if diffusion.is_live %}
 | 
			
		||||
                                <i class="fa fa-microphone"
 | 
			
		||||
                                    title="{% trans "Live diffusion" %}"></i>
 | 
			
		||||
                                {% else %}
 | 
			
		||||
                                <i class="fa fa-music"
 | 
			
		||||
                                    title="{% trans "Differed diffusion" %}"></i>
 | 
			
		||||
                                {% endif %}
 | 
			
		||||
                            </span>
 | 
			
		||||
                             
 | 
			
		||||
                            {{ diffusion.get_type_display }}
 | 
			
		||||
                        </span>
 | 
			
		||||
                        {% elif diffusion.type == diffusion.TYPE_CANCEL %}
 | 
			
		||||
                        <span class="tag is-danger">
 | 
			
		||||
                            {{ diffusion.get_type_display }}</span>
 | 
			
		||||
                        {% elif diffusion.type == diffusion.TYPE_UNCONFIRMED %}
 | 
			
		||||
                        <span class="tag is-warning">
 | 
			
		||||
                            {{ diffusion.get_type_display }}</span>
 | 
			
		||||
                        {% endif %}
 | 
			
		||||
                    </td>
 | 
			
		||||
                </tr>
 | 
			
		||||
                {% endwith %}
 | 
			
		||||
                {% endfor %}
 | 
			
		||||
 | 
			
		||||
@ -56,6 +56,10 @@ Usefull context:
 | 
			
		||||
                            {% endfor %}
 | 
			
		||||
                            {% endblock %}
 | 
			
		||||
                        </div>
 | 
			
		||||
                        <div class="navbar-end">
 | 
			
		||||
                            {% block top-nav-tools %}
 | 
			
		||||
                            {% endblock %}
 | 
			
		||||
                        </div>
 | 
			
		||||
                    </div>
 | 
			
		||||
                </div>
 | 
			
		||||
            </nav>
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,5 @@
 | 
			
		||||
{% extends "aircox/basepage_detail.html" %}
 | 
			
		||||
{% load static i18n humanize honeypot %}
 | 
			
		||||
{% load static i18n humanize honeypot aircox %}
 | 
			
		||||
{% comment %}
 | 
			
		||||
Base template used to display a Page
 | 
			
		||||
 | 
			
		||||
@ -14,6 +14,19 @@ Context:
 | 
			
		||||
{% endif %}
 | 
			
		||||
{% endblock %}
 | 
			
		||||
 | 
			
		||||
{% block top-nav-tools %}
 | 
			
		||||
{% has_perm page "change" as can_edit %}
 | 
			
		||||
{% if can_edit %}
 | 
			
		||||
<a class="navbar-item" href="{{ page|admin_url:'change' }}"
 | 
			
		||||
    target="new">
 | 
			
		||||
    <span class="icon is-small">
 | 
			
		||||
        <i class="fa fa-pen"></i>
 | 
			
		||||
    </span> 
 | 
			
		||||
    <span>{% trans "Edit" %}</span>
 | 
			
		||||
</a>
 | 
			
		||||
{% endif %}
 | 
			
		||||
{% endblock %}
 | 
			
		||||
 | 
			
		||||
{% block main %}
 | 
			
		||||
{{ block.super }}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										65
									
								
								aircox/templates/aircox/widgets/basepage_item.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								aircox/templates/aircox/widgets/basepage_item.html
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,65 @@
 | 
			
		||||
{% load i18n easy_thumbnails_tags aircox %}
 | 
			
		||||
{% comment %}
 | 
			
		||||
List item for a page
 | 
			
		||||
 | 
			
		||||
Context variables:
 | 
			
		||||
- object: the object to render
 | 
			
		||||
- render_card: render as card
 | 
			
		||||
- is-primary: render as primary
 | 
			
		||||
- has_headline (=False): if True, display headline
 | 
			
		||||
- has_cover (=True): hide page cover
 | 
			
		||||
{% endcomment %}
 | 
			
		||||
 | 
			
		||||
{% if render_card %}
 | 
			
		||||
<article class="card {% if is_primary %}is-primary{% endif %}">
 | 
			
		||||
    <header class="card-image">
 | 
			
		||||
        <figure class="image is-4by3">
 | 
			
		||||
            <img src="{% thumbnail object.cover|default:station.default_cover 480x480 %}">
 | 
			
		||||
        </figure>
 | 
			
		||||
    </header>
 | 
			
		||||
    <div class="card-header">
 | 
			
		||||
        <h4 class="title">
 | 
			
		||||
            <a href="{{ object.get_absolute_url }}">
 | 
			
		||||
                {% block card_title %}{{ object.title }}{% endblock %}
 | 
			
		||||
            </a>
 | 
			
		||||
        </h4>
 | 
			
		||||
    </div>
 | 
			
		||||
</article>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
{% else %}
 | 
			
		||||
<article class="media item {% block css %}{% endblock%}">
 | 
			
		||||
    {% if has_cover|default_if_none:True %}
 | 
			
		||||
    <div class="media-left">
 | 
			
		||||
        <img src="{% thumbnail object.cover|default:station.default_cover 128x128 crop=scale %}"
 | 
			
		||||
            class="cover is-small">
 | 
			
		||||
    </div>
 | 
			
		||||
    {% endif %}
 | 
			
		||||
    <div class="media-content">
 | 
			
		||||
        <h5 class="title is-5 has-text-weight-normal">
 | 
			
		||||
            {% block title %}
 | 
			
		||||
            {% if object.is_published %}
 | 
			
		||||
            <a href="{{ object.get_absolute_url }}">{{ object.title }}</a>
 | 
			
		||||
            {% else %}
 | 
			
		||||
            {{ object.title }}
 | 
			
		||||
            {% endif %}
 | 
			
		||||
            {% endblock %}
 | 
			
		||||
        </h5>
 | 
			
		||||
        <div class="subtitle is-6 has-text-weight-light">
 | 
			
		||||
            {% block subtitle %}
 | 
			
		||||
            {% if object.category %}{{ object.category.title }}{% endif %}
 | 
			
		||||
            {% endblock %}
 | 
			
		||||
        </div>
 | 
			
		||||
 | 
			
		||||
        {% if has_headline|default_if_none:True %}
 | 
			
		||||
        <div class="headline">
 | 
			
		||||
        {% block headline %}{{ object.headline }}{% endblock %}
 | 
			
		||||
        </div>
 | 
			
		||||
        {% endif %}
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    {% block actions %}{% endblock %}
 | 
			
		||||
</article>
 | 
			
		||||
{% endif %}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -13,7 +13,11 @@ Context variables:
 | 
			
		||||
{% block title %}
 | 
			
		||||
{% if not object.is_published and object.program.is_published %}
 | 
			
		||||
<a href="{{ object.program.get_absolute_url }}">
 | 
			
		||||
    {{ object.title }}
 | 
			
		||||
    {{ object.program.title }}
 | 
			
		||||
    {% if diffusion %}
 | 
			
		||||
    —
 | 
			
		||||
    {{ diffusion.start|date:"d F" }}
 | 
			
		||||
    {% endif %}
 | 
			
		||||
</a>
 | 
			
		||||
{% else %}
 | 
			
		||||
{{ block.super }}
 | 
			
		||||
 | 
			
		||||
@ -1,62 +1,6 @@
 | 
			
		||||
{% load i18n easy_thumbnails_tags aircox %}
 | 
			
		||||
{% comment %}
 | 
			
		||||
List item for a page
 | 
			
		||||
{% extends "aircox/widgets/basepage_item.html" %}
 | 
			
		||||
 | 
			
		||||
Context variables:
 | 
			
		||||
- object: the object to render
 | 
			
		||||
- render_card: render as card
 | 
			
		||||
- is-primary: render as primary
 | 
			
		||||
- has_headline (=False): if True, display headline
 | 
			
		||||
- has_cover (=True): hide page cover
 | 
			
		||||
{% endcomment %}
 | 
			
		||||
 | 
			
		||||
{% if render_card %}
 | 
			
		||||
<article class="card {% if is_primary %}is-primary{% endif %}">
 | 
			
		||||
    <header class="card-image">
 | 
			
		||||
        <figure class="image is-4by3">
 | 
			
		||||
            <img src="{% thumbnail object.cover|default:station.default_cover 480x480 %}">
 | 
			
		||||
        </figure>
 | 
			
		||||
    </header>
 | 
			
		||||
    <div class="card-header">
 | 
			
		||||
        <h4 class="title">
 | 
			
		||||
            <a href="{{ object.get_absolute_url }}">{{ object.title }}</a>
 | 
			
		||||
        </h4>
 | 
			
		||||
    </div>
 | 
			
		||||
</article>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
{% else %}
 | 
			
		||||
<article class="media item {% block css %}{% endblock%}">
 | 
			
		||||
    {% if has_cover|default_if_none:True %}
 | 
			
		||||
    <div class="media-left">
 | 
			
		||||
        <img src="{% thumbnail object.cover|default:station.default_cover 128x128 crop=scale %}"
 | 
			
		||||
            class="cover is-small">
 | 
			
		||||
    </div>
 | 
			
		||||
    {% endif %}
 | 
			
		||||
    <div class="media-content">
 | 
			
		||||
        <h5 class="title is-5 has-text-weight-normal">
 | 
			
		||||
            {% block title %}
 | 
			
		||||
            {% if object.is_published %}
 | 
			
		||||
            <a href="{{ object.get_absolute_url }}">{{ object.title }}</a>
 | 
			
		||||
            {% else %}
 | 
			
		||||
            {{ object.title }}
 | 
			
		||||
            {% endif %}
 | 
			
		||||
            {% endblock %}
 | 
			
		||||
        </h5>
 | 
			
		||||
        <div class="subtitle is-6 has-text-weight-light">
 | 
			
		||||
            {% block subtitle %}
 | 
			
		||||
            {% if object.category %}{{ object.category.title }}{% endif %}
 | 
			
		||||
            {% endblock %}
 | 
			
		||||
        </div>
 | 
			
		||||
 | 
			
		||||
        {% if has_headline|default_if_none:True %}
 | 
			
		||||
        <div class="headline">
 | 
			
		||||
        {% block headline %}{{ object.headline }}{% endblock %}
 | 
			
		||||
        </div>
 | 
			
		||||
        {% endif %}
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    {% block actions %}{% endblock %}
 | 
			
		||||
</article>
 | 
			
		||||
{% endif %}
 | 
			
		||||
{% block card_title %}
 | 
			
		||||
{% block title %}{{ block.super }}{% endblock %}
 | 
			
		||||
{% endblock %}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -2,6 +2,8 @@ import random
 | 
			
		||||
import json
 | 
			
		||||
 | 
			
		||||
from django import template
 | 
			
		||||
from django.contrib.admin.templatetags.admin_urls import admin_urlname
 | 
			
		||||
from django.urls import reverse
 | 
			
		||||
from django.utils.safestring import mark_safe
 | 
			
		||||
 | 
			
		||||
from aircox.models import Page, Diffusion, Log
 | 
			
		||||
@ -10,6 +12,12 @@ random.seed()
 | 
			
		||||
register = template.Library()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@register.filter(name='admin_url')
 | 
			
		||||
def do_admin_url(obj, arg, pass_id=True):
 | 
			
		||||
    """ Reverse admin url for object """
 | 
			
		||||
    name = admin_urlname(obj._meta, arg)
 | 
			
		||||
    return reverse(name, args=(obj.id,)) if pass_id else reverse(name)
 | 
			
		||||
    
 | 
			
		||||
@register.filter(name='get_tracks')
 | 
			
		||||
def do_get_tracks(obj):
 | 
			
		||||
    """ Get a list of track for the provided log, diffusion, or episode """
 | 
			
		||||
@ -20,6 +28,14 @@ def do_get_tracks(obj):
 | 
			
		||||
        obj = obj.episode
 | 
			
		||||
    return obj.track_set.all()
 | 
			
		||||
 | 
			
		||||
@register.simple_tag(name='has_perm', takes_context=True)
 | 
			
		||||
def do_has_perm(context, obj, perm, user=None):
 | 
			
		||||
    """ Return True if ``user.has_perm('[APP].[perm]_[MODEL]')`` """
 | 
			
		||||
    if user is None:
 | 
			
		||||
        user = context['request'].user
 | 
			
		||||
    return user.has_perm('{}.{}_{}'.format(
 | 
			
		||||
        obj._meta.app_label, perm, obj._meta.model_name))
 | 
			
		||||
 | 
			
		||||
@register.filter(name='is_diffusion')
 | 
			
		||||
def do_is_diffusion(obj):
 | 
			
		||||
    """ Return True if object is a Diffusion. """
 | 
			
		||||
 | 
			
		||||
@ -118,6 +118,8 @@ except:
 | 
			
		||||
    )
 | 
			
		||||
    pass
 | 
			
		||||
 | 
			
		||||
#-- django-taggit
 | 
			
		||||
TAGGIT_CASE_INSENSITIVE = True
 | 
			
		||||
 | 
			
		||||
#-- django-CKEditor
 | 
			
		||||
CKEDITOR_CONFIGS = {
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user