mirror of
https://github.com/fergalmoran/dss.git
synced 2025-12-24 02:27:34 +00:00
Fixed update user profile
This commit is contained in:
@@ -33,8 +33,20 @@ DATABASES = {
|
|||||||
'USER': localsettings.DATABASE_USER if hasattr(localsettings, 'DATABASE_USER') else 'deepsouthsounds',
|
'USER': localsettings.DATABASE_USER if hasattr(localsettings, 'DATABASE_USER') else 'deepsouthsounds',
|
||||||
'PASSWORD': localsettings.DATABASE_PASSWORD if hasattr(localsettings, 'DATABASE_PASSWORD') else '',
|
'PASSWORD': localsettings.DATABASE_PASSWORD if hasattr(localsettings, 'DATABASE_PASSWORD') else '',
|
||||||
'HOST': localsettings.DATABASE_HOST if hasattr(localsettings, 'DATABASE_HOST') else 'localhost',
|
'HOST': localsettings.DATABASE_HOST if hasattr(localsettings, 'DATABASE_HOST') else 'localhost',
|
||||||
|
},
|
||||||
|
'test': {
|
||||||
|
'ENGINE': 'django.db.backends.postgresql_psycopg2',
|
||||||
|
'NAME': 'test_deepsouthsounds',
|
||||||
|
'ADMINUSER': 'postgres',
|
||||||
|
'USER': localsettings.DATABASE_USER if hasattr(localsettings, 'DATABASE_USER') else 'deepsouthsounds',
|
||||||
|
'PASSWORD': localsettings.DATABASE_PASSWORD if hasattr(localsettings, 'DATABASE_PASSWORD') else '',
|
||||||
|
'HOST': localsettings.DATABASE_HOST if hasattr(localsettings, 'DATABASE_HOST') else 'localhost',
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
import sys
|
||||||
|
if 'test' in sys.argv or 'test_coverage' in sys.argv: #Covers regular testing and django-coverage
|
||||||
|
print "Testing"
|
||||||
|
DATABASES['default']['ENGINE'] = 'django.db.backends.sqlite3'
|
||||||
|
|
||||||
ROOT_URLCONF = 'dss.urls'
|
ROOT_URLCONF = 'dss.urls'
|
||||||
TIME_ZONE = 'Europe/Dublin'
|
TIME_ZONE = 'Europe/Dublin'
|
||||||
@@ -107,10 +119,10 @@ STATICFILES_DIRS = (
|
|||||||
SECRET_KEY = localsettings.SECRET_KEY
|
SECRET_KEY = localsettings.SECRET_KEY
|
||||||
|
|
||||||
TEMPLATE_LOADERS = (
|
TEMPLATE_LOADERS = (
|
||||||
'django.template.loaders.filesystem.Loader',
|
('django.template.loaders.cached.Loader', (
|
||||||
'django.template.loaders.app_directories.Loader',
|
'django.template.loaders.filesystem.Loader',
|
||||||
'django.template.loaders.eggs.Loader',
|
'django.template.loaders.app_directories.Loader',
|
||||||
#'django.template.loaders.app_directories.load_template_source',
|
)),
|
||||||
)
|
)
|
||||||
TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + (
|
TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + (
|
||||||
'django_facebook.context_processors.facebook',
|
'django_facebook.context_processors.facebook',
|
||||||
@@ -140,7 +152,7 @@ MIDDLEWARE_CLASSES = (
|
|||||||
'htmlmin.middleware.HtmlMinifyMiddleware',
|
'htmlmin.middleware.HtmlMinifyMiddleware',
|
||||||
'django_user_agents.middleware.UserAgentMiddleware',
|
'django_user_agents.middleware.UserAgentMiddleware',
|
||||||
#'spa.middleware.uploadify.SWFUploadMiddleware',
|
#'spa.middleware.uploadify.SWFUploadMiddleware',
|
||||||
#'spa.middleware.sqlprinter.SqlPrintingMiddleware' if DEBUG else None,
|
'spa.middleware.sqlprinter.SqlPrintingMiddleware' if DEBUG else None,
|
||||||
#'debug_toolbar.middleware.DebugToolbarMiddleware',
|
#'debug_toolbar.middleware.DebugToolbarMiddleware',
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -159,6 +171,7 @@ INSTALLED_APPS = (
|
|||||||
'django_facebook',
|
'django_facebook',
|
||||||
'django_extensions',
|
'django_extensions',
|
||||||
'django_gravatar',
|
'django_gravatar',
|
||||||
|
'schedule',
|
||||||
'compressor',
|
'compressor',
|
||||||
'notification',
|
'notification',
|
||||||
'djcelery',
|
'djcelery',
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
from spa.models import Show
|
||||||
from spa.models.genre import Genre
|
from spa.models.genre import Genre
|
||||||
from spa.models.userprofile import UserProfile
|
from spa.models.userprofile import UserProfile
|
||||||
from spa.models.chatmessage import ChatMessage
|
from spa.models.chatmessage import ChatMessage
|
||||||
from spa.models.recurrence import Recurrence
|
from spa.models.recurrence import Recurrence
|
||||||
from spa.models.release import Release
|
from spa.models.release import Release
|
||||||
from spa.models.event import Event
|
#from spa.models.event import Event
|
||||||
from spa.models.label import Label
|
from spa.models.label import Label
|
||||||
from spa.models.mix import Mix
|
from spa.models.mix import Mix
|
||||||
from spa.models.release import ReleaseAudio
|
from spa.models.release import ReleaseAudio
|
||||||
@@ -23,7 +24,8 @@ admin.site.register(Label)
|
|||||||
admin.site.register(Release, DefaultAdmin)
|
admin.site.register(Release, DefaultAdmin)
|
||||||
admin.site.register(ReleaseAudio)
|
admin.site.register(ReleaseAudio)
|
||||||
admin.site.register(Venue)
|
admin.site.register(Venue)
|
||||||
admin.site.register(Event)
|
#admin.site.register(Event)
|
||||||
admin.site.register(UserProfile)
|
admin.site.register(UserProfile)
|
||||||
admin.site.register(Recurrence)
|
admin.site.register(Recurrence)
|
||||||
admin.site.register(ChatMessage)
|
admin.site.register(ChatMessage)
|
||||||
|
admin.site.register(Show)
|
||||||
|
|||||||
@@ -3,9 +3,9 @@ import humanize
|
|||||||
from tastypie.authorization import Authorization
|
from tastypie.authorization import Authorization
|
||||||
from spa.api.v1.BackboneCompatibleResource import BackboneCompatibleResource
|
from spa.api.v1.BackboneCompatibleResource import BackboneCompatibleResource
|
||||||
from spa.models.recurrence import Recurrence
|
from spa.models.recurrence import Recurrence
|
||||||
|
"""
|
||||||
from spa.models.venue import Venue
|
from spa.models.venue import Venue
|
||||||
from spa.models.event import Event
|
from spa.models.event import Event
|
||||||
|
|
||||||
class EventResource(BackboneCompatibleResource):
|
class EventResource(BackboneCompatibleResource):
|
||||||
class Meta:
|
class Meta:
|
||||||
queryset = Event.objects.all()
|
queryset = Event.objects.all()
|
||||||
@@ -37,4 +37,5 @@ class EventResource(BackboneCompatibleResource):
|
|||||||
if recurrence != None:
|
if recurrence != None:
|
||||||
bundle.obj.event_recurrence = recurrence
|
bundle.obj.event_recurrence = recurrence
|
||||||
|
|
||||||
return bundle
|
return bundle
|
||||||
|
"""
|
||||||
|
|||||||
26
spa/api/v1/ShowResource.py
Normal file
26
spa/api/v1/ShowResource.py
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
from tastypie.authorization import Authorization
|
||||||
|
from tastypie.exceptions import ImmediateHttpResponse
|
||||||
|
from tastypie.http import HttpBadRequest
|
||||||
|
|
||||||
|
from spa.api.v1.BackboneCompatibleResource import BackboneCompatibleResource
|
||||||
|
|
||||||
|
from spa.models import Show
|
||||||
|
from spa.models.show import ShowOverlapException
|
||||||
|
|
||||||
|
DATE_FORMAT = '%d/%m/%Y %H:%M:%S'
|
||||||
|
|
||||||
|
|
||||||
|
class ShowResource(BackboneCompatibleResource):
|
||||||
|
class Meta:
|
||||||
|
queryset = Show.objects.all()
|
||||||
|
authorization = Authorization()
|
||||||
|
resource_name = 'schedules'
|
||||||
|
|
||||||
|
def obj_create(self, bundle, **kwargs):
|
||||||
|
try:
|
||||||
|
return super(ShowResource, self).obj_create(bundle, **kwargs)
|
||||||
|
except ShowOverlapException:
|
||||||
|
raise ImmediateHttpResponse(
|
||||||
|
HttpBadRequest("This event overlaps with an existing event")
|
||||||
|
)
|
||||||
|
|
||||||
@@ -76,8 +76,10 @@ class UserResource(BackboneCompatibleResource):
|
|||||||
|
|
||||||
ret = super(UserResource, self).obj_update(bundle, skip_errors, **kwargs)
|
ret = super(UserResource, self).obj_update(bundle, skip_errors, **kwargs)
|
||||||
|
|
||||||
|
"""
|
||||||
bundle.obj.update_follower(bundle.request.user,
|
bundle.obj.update_follower(bundle.request.user,
|
||||||
bundle.data['favourited'])
|
bundle.data['favourited'])
|
||||||
|
"""
|
||||||
|
|
||||||
update_geo_info_task.delay(ip_address=bundle.request.META['REMOTE_ADDR'],
|
update_geo_info_task.delay(ip_address=bundle.request.META['REMOTE_ADDR'],
|
||||||
profile_id=bundle.request.user.get_profile().id)
|
profile_id=bundle.request.user.get_profile().id)
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ class SqlPrintingMiddleware(object):
|
|||||||
|
|
||||||
indentation = 2
|
indentation = 2
|
||||||
if len(connection.queries) > 0 and settings.DEBUG:
|
if len(connection.queries) > 0 and settings.DEBUG:
|
||||||
width = terminal_width()
|
width = 10000 #terminal_width()
|
||||||
total_time = 0.0
|
total_time = 0.0
|
||||||
for query in connection.queries:
|
for query in connection.queries:
|
||||||
nice_sql = query['sql'].replace('"', '').replace(',', ', ')
|
nice_sql = query['sql'].replace('"', '').replace(',', ', ')
|
||||||
|
|||||||
@@ -0,0 +1,457 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from south.utils import datetime_utils as datetime
|
||||||
|
from south.db import db
|
||||||
|
from south.v2 import SchemaMigration
|
||||||
|
from django.db import models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(SchemaMigration):
|
||||||
|
|
||||||
|
def forwards(self, orm):
|
||||||
|
# Deleting field 'Label.object_updated'
|
||||||
|
db.delete_column(u'spa_label', 'object_updated')
|
||||||
|
|
||||||
|
# Deleting field 'Label.object_created'
|
||||||
|
db.delete_column(u'spa_label', 'object_created')
|
||||||
|
|
||||||
|
# Deleting field 'Mix.object_updated'
|
||||||
|
db.delete_column(u'spa_mix', 'object_updated')
|
||||||
|
|
||||||
|
# Deleting field 'Mix.object_created'
|
||||||
|
db.delete_column(u'spa_mix', 'object_created')
|
||||||
|
|
||||||
|
# Deleting field 'Tracklist.object_updated'
|
||||||
|
db.delete_column(u'spa_tracklist', 'object_updated')
|
||||||
|
|
||||||
|
# Deleting field 'Tracklist.object_created'
|
||||||
|
db.delete_column(u'spa_tracklist', 'object_created')
|
||||||
|
|
||||||
|
# Deleting field 'ReleaseAudio.object_updated'
|
||||||
|
db.delete_column(u'spa_releaseaudio', 'object_updated')
|
||||||
|
|
||||||
|
# Deleting field 'ReleaseAudio.object_created'
|
||||||
|
db.delete_column(u'spa_releaseaudio', 'object_created')
|
||||||
|
|
||||||
|
# Deleting field 'Genre.object_updated'
|
||||||
|
db.delete_column(u'spa_genre', 'object_updated')
|
||||||
|
|
||||||
|
# Deleting field 'Genre.object_created'
|
||||||
|
db.delete_column(u'spa_genre', 'object_created')
|
||||||
|
|
||||||
|
# Deleting field 'UserProfile.object_created'
|
||||||
|
db.delete_column(u'spa_userprofile', 'object_created')
|
||||||
|
|
||||||
|
# Deleting field 'UserProfile.object_updated'
|
||||||
|
db.delete_column(u'spa_userprofile', 'object_updated')
|
||||||
|
|
||||||
|
# Deleting field 'Venue.object_updated'
|
||||||
|
db.delete_column(u'spa_venue', 'object_updated')
|
||||||
|
|
||||||
|
# Deleting field 'Venue.object_created'
|
||||||
|
db.delete_column(u'spa_venue', 'object_created')
|
||||||
|
|
||||||
|
# Deleting field '_Lookup.object_updated'
|
||||||
|
db.delete_column(u'spa__lookup', 'object_updated')
|
||||||
|
|
||||||
|
# Deleting field '_Lookup.object_created'
|
||||||
|
db.delete_column(u'spa__lookup', 'object_created')
|
||||||
|
|
||||||
|
# Deleting field 'Activity.object_updated'
|
||||||
|
db.delete_column(u'spa_activity', 'object_updated')
|
||||||
|
|
||||||
|
# Deleting field 'Activity.object_created'
|
||||||
|
db.delete_column(u'spa_activity', 'object_created')
|
||||||
|
|
||||||
|
# Deleting field 'Release.object_updated'
|
||||||
|
db.delete_column(u'spa_release', 'object_updated')
|
||||||
|
|
||||||
|
# Deleting field 'Release.object_created'
|
||||||
|
db.delete_column(u'spa_release', 'object_created')
|
||||||
|
|
||||||
|
# Deleting field 'PurchaseLink.object_updated'
|
||||||
|
db.delete_column(u'spa_purchaselink', 'object_updated')
|
||||||
|
|
||||||
|
# Deleting field 'PurchaseLink.object_created'
|
||||||
|
db.delete_column(u'spa_purchaselink', 'object_created')
|
||||||
|
|
||||||
|
# Deleting field 'ChatMessage.object_updated'
|
||||||
|
db.delete_column(u'spa_chatmessage', 'object_updated')
|
||||||
|
|
||||||
|
# Deleting field 'ChatMessage.object_created'
|
||||||
|
db.delete_column(u'spa_chatmessage', 'object_created')
|
||||||
|
|
||||||
|
# Deleting field 'Comment.object_updated'
|
||||||
|
db.delete_column(u'spa_comment', 'object_updated')
|
||||||
|
|
||||||
|
# Deleting field 'Comment.object_created'
|
||||||
|
db.delete_column(u'spa_comment', 'object_created')
|
||||||
|
|
||||||
|
# Deleting field 'Notification.object_updated'
|
||||||
|
db.delete_column(u'spa_notification', 'object_updated')
|
||||||
|
|
||||||
|
# Deleting field 'Notification.object_created'
|
||||||
|
db.delete_column(u'spa_notification', 'object_created')
|
||||||
|
|
||||||
|
|
||||||
|
def backwards(self, orm):
|
||||||
|
# Adding field 'Label.object_updated'
|
||||||
|
db.add_column(u'spa_label', 'object_updated',
|
||||||
|
self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime(2014, 3, 11, 0, 0), auto_now=True, blank=True, db_index=True),
|
||||||
|
keep_default=False)
|
||||||
|
|
||||||
|
# Adding field 'Label.object_created'
|
||||||
|
db.add_column(u'spa_label', 'object_created',
|
||||||
|
self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime(2014, 3, 11, 0, 0), auto_now_add=True, blank=True),
|
||||||
|
keep_default=False)
|
||||||
|
|
||||||
|
# Adding field 'Mix.object_updated'
|
||||||
|
db.add_column(u'spa_mix', 'object_updated',
|
||||||
|
self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime(2014, 3, 11, 0, 0), auto_now=True, blank=True, db_index=True),
|
||||||
|
keep_default=False)
|
||||||
|
|
||||||
|
# Adding field 'Mix.object_created'
|
||||||
|
db.add_column(u'spa_mix', 'object_created',
|
||||||
|
self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime(2014, 3, 11, 0, 0), auto_now_add=True, blank=True),
|
||||||
|
keep_default=False)
|
||||||
|
|
||||||
|
# Adding field 'Tracklist.object_updated'
|
||||||
|
db.add_column(u'spa_tracklist', 'object_updated',
|
||||||
|
self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime(2014, 3, 11, 0, 0), auto_now=True, blank=True, db_index=True),
|
||||||
|
keep_default=False)
|
||||||
|
|
||||||
|
# Adding field 'Tracklist.object_created'
|
||||||
|
db.add_column(u'spa_tracklist', 'object_created',
|
||||||
|
self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime(2014, 3, 11, 0, 0), auto_now_add=True, blank=True),
|
||||||
|
keep_default=False)
|
||||||
|
|
||||||
|
# Adding field 'ReleaseAudio.object_updated'
|
||||||
|
db.add_column(u'spa_releaseaudio', 'object_updated',
|
||||||
|
self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime(2014, 3, 11, 0, 0), auto_now=True, blank=True, db_index=True),
|
||||||
|
keep_default=False)
|
||||||
|
|
||||||
|
# Adding field 'ReleaseAudio.object_created'
|
||||||
|
db.add_column(u'spa_releaseaudio', 'object_created',
|
||||||
|
self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime(2014, 3, 11, 0, 0), auto_now_add=True, blank=True),
|
||||||
|
keep_default=False)
|
||||||
|
|
||||||
|
# Adding field 'Genre.object_updated'
|
||||||
|
db.add_column(u'spa_genre', 'object_updated',
|
||||||
|
self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime(2014, 3, 11, 0, 0), auto_now=True, blank=True, db_index=True),
|
||||||
|
keep_default=False)
|
||||||
|
|
||||||
|
# Adding field 'Genre.object_created'
|
||||||
|
db.add_column(u'spa_genre', 'object_created',
|
||||||
|
self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime(2014, 3, 11, 0, 0), auto_now_add=True, blank=True),
|
||||||
|
keep_default=False)
|
||||||
|
|
||||||
|
# Adding field 'UserProfile.object_created'
|
||||||
|
db.add_column(u'spa_userprofile', 'object_created',
|
||||||
|
self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime(2014, 3, 11, 0, 0), auto_now_add=True, blank=True),
|
||||||
|
keep_default=False)
|
||||||
|
|
||||||
|
# Adding field 'UserProfile.object_updated'
|
||||||
|
db.add_column(u'spa_userprofile', 'object_updated',
|
||||||
|
self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime(2014, 3, 11, 0, 0), auto_now=True, blank=True, db_index=True),
|
||||||
|
keep_default=False)
|
||||||
|
|
||||||
|
# Adding field 'Venue.object_updated'
|
||||||
|
db.add_column(u'spa_venue', 'object_updated',
|
||||||
|
self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime(2014, 3, 11, 0, 0), auto_now=True, blank=True, db_index=True),
|
||||||
|
keep_default=False)
|
||||||
|
|
||||||
|
# Adding field 'Venue.object_created'
|
||||||
|
db.add_column(u'spa_venue', 'object_created',
|
||||||
|
self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime(2014, 3, 11, 0, 0), auto_now_add=True, blank=True),
|
||||||
|
keep_default=False)
|
||||||
|
|
||||||
|
# Adding field '_Lookup.object_updated'
|
||||||
|
db.add_column(u'spa__lookup', 'object_updated',
|
||||||
|
self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime(2014, 3, 11, 0, 0), auto_now=True, blank=True, db_index=True),
|
||||||
|
keep_default=False)
|
||||||
|
|
||||||
|
# Adding field '_Lookup.object_created'
|
||||||
|
db.add_column(u'spa__lookup', 'object_created',
|
||||||
|
self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime(2014, 3, 11, 0, 0), auto_now_add=True, blank=True),
|
||||||
|
keep_default=False)
|
||||||
|
|
||||||
|
# Adding field 'Activity.object_updated'
|
||||||
|
db.add_column(u'spa_activity', 'object_updated',
|
||||||
|
self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime(2014, 3, 11, 0, 0), auto_now=True, blank=True, db_index=True),
|
||||||
|
keep_default=False)
|
||||||
|
|
||||||
|
# Adding field 'Activity.object_created'
|
||||||
|
db.add_column(u'spa_activity', 'object_created',
|
||||||
|
self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime(2014, 3, 11, 0, 0), auto_now_add=True, blank=True),
|
||||||
|
keep_default=False)
|
||||||
|
|
||||||
|
# Adding field 'Release.object_updated'
|
||||||
|
db.add_column(u'spa_release', 'object_updated',
|
||||||
|
self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime(2014, 3, 11, 0, 0), auto_now=True, blank=True, db_index=True),
|
||||||
|
keep_default=False)
|
||||||
|
|
||||||
|
# Adding field 'Release.object_created'
|
||||||
|
db.add_column(u'spa_release', 'object_created',
|
||||||
|
self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime(2014, 3, 11, 0, 0), auto_now_add=True, blank=True),
|
||||||
|
keep_default=False)
|
||||||
|
|
||||||
|
# Adding field 'PurchaseLink.object_updated'
|
||||||
|
db.add_column(u'spa_purchaselink', 'object_updated',
|
||||||
|
self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime(2014, 3, 11, 0, 0), auto_now=True, blank=True, db_index=True),
|
||||||
|
keep_default=False)
|
||||||
|
|
||||||
|
# Adding field 'PurchaseLink.object_created'
|
||||||
|
db.add_column(u'spa_purchaselink', 'object_created',
|
||||||
|
self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime(2014, 3, 11, 0, 0), auto_now_add=True, blank=True),
|
||||||
|
keep_default=False)
|
||||||
|
|
||||||
|
# Adding field 'ChatMessage.object_updated'
|
||||||
|
db.add_column(u'spa_chatmessage', 'object_updated',
|
||||||
|
self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime(2014, 3, 11, 0, 0), auto_now=True, blank=True, db_index=True),
|
||||||
|
keep_default=False)
|
||||||
|
|
||||||
|
# Adding field 'ChatMessage.object_created'
|
||||||
|
db.add_column(u'spa_chatmessage', 'object_created',
|
||||||
|
self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime(2014, 3, 11, 0, 0), auto_now_add=True, blank=True),
|
||||||
|
keep_default=False)
|
||||||
|
|
||||||
|
# Adding field 'Comment.object_updated'
|
||||||
|
db.add_column(u'spa_comment', 'object_updated',
|
||||||
|
self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime(2014, 3, 11, 0, 0), auto_now=True, blank=True, db_index=True),
|
||||||
|
keep_default=False)
|
||||||
|
|
||||||
|
# Adding field 'Comment.object_created'
|
||||||
|
db.add_column(u'spa_comment', 'object_created',
|
||||||
|
self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime(2014, 3, 11, 0, 0), auto_now_add=True, blank=True),
|
||||||
|
keep_default=False)
|
||||||
|
|
||||||
|
# Adding field 'Notification.object_updated'
|
||||||
|
db.add_column(u'spa_notification', 'object_updated',
|
||||||
|
self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime(2014, 3, 11, 0, 0), auto_now=True, blank=True, db_index=True),
|
||||||
|
keep_default=False)
|
||||||
|
|
||||||
|
# Adding field 'Notification.object_created'
|
||||||
|
db.add_column(u'spa_notification', 'object_created',
|
||||||
|
self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime(2014, 3, 11, 0, 0), auto_now_add=True, blank=True),
|
||||||
|
keep_default=False)
|
||||||
|
|
||||||
|
|
||||||
|
models = {
|
||||||
|
u'auth.group': {
|
||||||
|
'Meta': {'object_name': 'Group'},
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
|
||||||
|
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
|
||||||
|
},
|
||||||
|
u'auth.permission': {
|
||||||
|
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
|
||||||
|
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||||
|
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
|
||||||
|
},
|
||||||
|
u'auth.user': {
|
||||||
|
'Meta': {'object_name': 'User'},
|
||||||
|
'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
|
||||||
|
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
|
||||||
|
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
|
||||||
|
'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
|
||||||
|
'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||||
|
'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||||
|
'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
|
||||||
|
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
|
||||||
|
'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
|
||||||
|
'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),
|
||||||
|
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
|
||||||
|
},
|
||||||
|
u'contenttypes.contenttype': {
|
||||||
|
'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
|
||||||
|
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||||
|
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
|
||||||
|
},
|
||||||
|
'spa._lookup': {
|
||||||
|
'Meta': {'object_name': '_Lookup'},
|
||||||
|
'description': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
|
||||||
|
},
|
||||||
|
'spa.activity': {
|
||||||
|
'Meta': {'object_name': 'Activity'},
|
||||||
|
'date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['spa.UserProfile']", 'null': 'True', 'blank': 'True'})
|
||||||
|
},
|
||||||
|
'spa.activitycomment': {
|
||||||
|
'Meta': {'object_name': 'ActivityComment', '_ormbases': ['spa.Activity']},
|
||||||
|
u'activity_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['spa.Activity']", 'unique': 'True', 'primary_key': 'True'}),
|
||||||
|
'mix': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'activity_comments'", 'to': "orm['spa.Mix']"})
|
||||||
|
},
|
||||||
|
'spa.activitydownload': {
|
||||||
|
'Meta': {'object_name': 'ActivityDownload', '_ormbases': ['spa.Activity']},
|
||||||
|
u'activity_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['spa.Activity']", 'unique': 'True', 'primary_key': 'True'}),
|
||||||
|
'mix': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'activity_downloads'", 'to': "orm['spa.Mix']"})
|
||||||
|
},
|
||||||
|
'spa.activityfavourite': {
|
||||||
|
'Meta': {'object_name': 'ActivityFavourite', '_ormbases': ['spa.Activity']},
|
||||||
|
u'activity_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['spa.Activity']", 'unique': 'True', 'primary_key': 'True'}),
|
||||||
|
'mix': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'activity_favourites'", 'to': "orm['spa.Mix']"})
|
||||||
|
},
|
||||||
|
'spa.activityfollow': {
|
||||||
|
'Meta': {'object_name': 'ActivityFollow', '_ormbases': ['spa.Activity']},
|
||||||
|
u'activity_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['spa.Activity']", 'unique': 'True', 'primary_key': 'True'}),
|
||||||
|
'to_user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'activity_follow'", 'to': "orm['spa.UserProfile']"})
|
||||||
|
},
|
||||||
|
'spa.activitylike': {
|
||||||
|
'Meta': {'object_name': 'ActivityLike', '_ormbases': ['spa.Activity']},
|
||||||
|
u'activity_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['spa.Activity']", 'unique': 'True', 'primary_key': 'True'}),
|
||||||
|
'mix': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'activity_likes'", 'to': "orm['spa.Mix']"})
|
||||||
|
},
|
||||||
|
'spa.activityplay': {
|
||||||
|
'Meta': {'object_name': 'ActivityPlay', '_ormbases': ['spa.Activity']},
|
||||||
|
u'activity_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['spa.Activity']", 'unique': 'True', 'primary_key': 'True'}),
|
||||||
|
'mix': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'activity_plays'", 'to': "orm['spa.Mix']"})
|
||||||
|
},
|
||||||
|
'spa.chatmessage': {
|
||||||
|
'Meta': {'object_name': 'ChatMessage'},
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'message': ('django.db.models.fields.TextField', [], {}),
|
||||||
|
'timestamp': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||||
|
'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'chat_messages'", 'null': 'True', 'to': "orm['spa.UserProfile']"})
|
||||||
|
},
|
||||||
|
'spa.comment': {
|
||||||
|
'Meta': {'object_name': 'Comment'},
|
||||||
|
'comment': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
|
||||||
|
'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'mix': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'comments'", 'null': 'True', 'to': "orm['spa.Mix']"}),
|
||||||
|
'time_index': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
||||||
|
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']", 'null': 'True', 'blank': 'True'})
|
||||||
|
},
|
||||||
|
'spa.event': {
|
||||||
|
'Meta': {'object_name': 'Event'},
|
||||||
|
'attendees': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'attendees'", 'symmetrical': 'False', 'to': u"orm['auth.User']"}),
|
||||||
|
'date_created': ('django.db.models.fields.DateField', [], {'default': 'datetime.datetime(2014, 4, 28, 0, 0)'}),
|
||||||
|
'event_date': ('django.db.models.fields.DateField', [], {'default': 'datetime.datetime(2014, 4, 28, 0, 0)'}),
|
||||||
|
'event_description': ('django.db.models.fields.TextField', [], {}),
|
||||||
|
'event_recurrence': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['spa.Recurrence']"}),
|
||||||
|
'event_time': ('django.db.models.fields.TimeField', [], {'default': 'datetime.datetime(2014, 4, 28, 0, 0)'}),
|
||||||
|
'event_title': ('django.db.models.fields.CharField', [], {'max_length': '250'}),
|
||||||
|
'event_venue': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['spa.Venue']"}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
|
||||||
|
},
|
||||||
|
'spa.genre': {
|
||||||
|
'Meta': {'object_name': 'Genre'},
|
||||||
|
'description': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'slug': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'})
|
||||||
|
},
|
||||||
|
'spa.label': {
|
||||||
|
'Meta': {'object_name': 'Label'},
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
|
||||||
|
},
|
||||||
|
'spa.mix': {
|
||||||
|
'Meta': {'object_name': 'Mix'},
|
||||||
|
'description': ('django.db.models.fields.TextField', [], {}),
|
||||||
|
'download_allowed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||||
|
'duration': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||||
|
'favourites': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'favourites'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['spa.UserProfile']"}),
|
||||||
|
'filetype': ('django.db.models.fields.CharField', [], {'default': "'mp3'", 'max_length': '10'}),
|
||||||
|
'genres': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['spa.Genre']", 'symmetrical': 'False'}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
|
||||||
|
'is_featured': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
|
||||||
|
'likes': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'likes'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['spa.UserProfile']"}),
|
||||||
|
'mix_image': ('django.db.models.fields.files.ImageField', [], {'max_length': '1024', 'blank': 'True'}),
|
||||||
|
'mp3tags_updated': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||||
|
'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50'}),
|
||||||
|
'title': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
|
||||||
|
'uid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '38', 'blank': 'True'}),
|
||||||
|
'upload_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2014, 4, 28, 0, 0)'}),
|
||||||
|
'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'mixes'", 'to': "orm['spa.UserProfile']"}),
|
||||||
|
'waveform_generated': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
|
||||||
|
},
|
||||||
|
'spa.notification': {
|
||||||
|
'Meta': {'object_name': 'Notification'},
|
||||||
|
'accepted_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
|
||||||
|
'date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
|
||||||
|
'from_user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'notifications'", 'null': 'True', 'to': "orm['spa.UserProfile']"}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'notification_html': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
|
||||||
|
'notification_text': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
|
||||||
|
'notification_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True'}),
|
||||||
|
'target': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}),
|
||||||
|
'to_user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'to_notications'", 'to': "orm['spa.UserProfile']"}),
|
||||||
|
'verb': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'})
|
||||||
|
},
|
||||||
|
'spa.purchaselink': {
|
||||||
|
'Meta': {'object_name': 'PurchaseLink'},
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'provider': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||||
|
'track': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'purchase_link'", 'to': "orm['spa.Tracklist']"}),
|
||||||
|
'url': ('django.db.models.fields.URLField', [], {'max_length': '200'})
|
||||||
|
},
|
||||||
|
'spa.recurrence': {
|
||||||
|
'Meta': {'object_name': 'Recurrence', '_ormbases': ['spa._Lookup']},
|
||||||
|
u'_lookup_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['spa._Lookup']", 'unique': 'True', 'primary_key': 'True'})
|
||||||
|
},
|
||||||
|
'spa.release': {
|
||||||
|
'Meta': {'object_name': 'Release'},
|
||||||
|
'embed_code': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
|
||||||
|
'release_artist': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||||
|
'release_date': ('django.db.models.fields.DateField', [], {'default': 'datetime.datetime(2014, 4, 28, 0, 0)'}),
|
||||||
|
'release_description': ('django.db.models.fields.TextField', [], {}),
|
||||||
|
'release_image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'blank': 'True'}),
|
||||||
|
'release_label': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['spa.Label']"}),
|
||||||
|
'release_title': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||||
|
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['spa.UserProfile']"})
|
||||||
|
},
|
||||||
|
'spa.releaseaudio': {
|
||||||
|
'Meta': {'object_name': 'ReleaseAudio'},
|
||||||
|
'description': ('django.db.models.fields.TextField', [], {}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'release': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'release_audio'", 'null': 'True', 'to': "orm['spa.Release']"})
|
||||||
|
},
|
||||||
|
'spa.tracklist': {
|
||||||
|
'Meta': {'object_name': 'Tracklist'},
|
||||||
|
'artist': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||||
|
'description': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'index': ('django.db.models.fields.SmallIntegerField', [], {}),
|
||||||
|
'label': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||||
|
'mix': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'tracklist'", 'to': "orm['spa.Mix']"}),
|
||||||
|
'remixer': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||||
|
'timeindex': ('django.db.models.fields.TimeField', [], {'null': 'True'}),
|
||||||
|
'title': ('django.db.models.fields.CharField', [], {'max_length': '255'})
|
||||||
|
},
|
||||||
|
'spa.userprofile': {
|
||||||
|
'Meta': {'object_name': 'UserProfile'},
|
||||||
|
'activity_sharing': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
||||||
|
'activity_sharing_networks': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
||||||
|
'avatar_image': ('django.db.models.fields.files.ImageField', [], {'max_length': '1024', 'blank': 'True'}),
|
||||||
|
'avatar_type': ('django.db.models.fields.CharField', [], {'default': "'social'", 'max_length': '15'}),
|
||||||
|
'city': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
|
||||||
|
'country': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
|
||||||
|
'description': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'blank': 'True'}),
|
||||||
|
'display_name': ('django.db.models.fields.CharField', [], {'max_length': '35', 'blank': 'True'}),
|
||||||
|
'following': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'followers'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['spa.UserProfile']"}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'last_known_session': ('django.db.models.fields.CharField', [], {'max_length': '250', 'null': 'True', 'blank': 'True'}),
|
||||||
|
'slug': ('django.db.models.fields.SlugField', [], {'default': 'None', 'max_length': '50', 'null': 'True', 'blank': 'True'}),
|
||||||
|
'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'userprofile'", 'unique': 'True', 'to': u"orm['auth.User']"})
|
||||||
|
},
|
||||||
|
'spa.venue': {
|
||||||
|
'Meta': {'object_name': 'Venue'},
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"}),
|
||||||
|
'venue_address': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
|
||||||
|
'venue_image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'blank': 'True'}),
|
||||||
|
'venue_name': ('django.db.models.fields.CharField', [], {'max_length': '250'})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
complete_apps = ['spa']
|
||||||
249
spa/migrations/0048_auto__del_event.py
Normal file
249
spa/migrations/0048_auto__del_event.py
Normal file
@@ -0,0 +1,249 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from south.utils import datetime_utils as datetime
|
||||||
|
from south.db import db
|
||||||
|
from south.v2 import SchemaMigration
|
||||||
|
from django.db import models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(SchemaMigration):
|
||||||
|
|
||||||
|
def forwards(self, orm):
|
||||||
|
# Deleting model 'Event'
|
||||||
|
db.delete_table(u'spa_event')
|
||||||
|
|
||||||
|
# Removing M2M table for field attendees on 'Event'
|
||||||
|
db.delete_table(db.shorten_name(u'spa_event_attendees'))
|
||||||
|
|
||||||
|
|
||||||
|
def backwards(self, orm):
|
||||||
|
# Adding model 'Event'
|
||||||
|
db.create_table(u'spa_event', (
|
||||||
|
('event_description', self.gf('django.db.models.fields.TextField')()),
|
||||||
|
('event_recurrence', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['spa.Recurrence'])),
|
||||||
|
('event_time', self.gf('django.db.models.fields.TimeField')(default=datetime.datetime(2014, 4, 28, 0, 0))),
|
||||||
|
('event_date', self.gf('django.db.models.fields.DateField')(default=datetime.datetime(2014, 4, 28, 0, 0))),
|
||||||
|
('event_title', self.gf('django.db.models.fields.CharField')(max_length=250)),
|
||||||
|
('date_created', self.gf('django.db.models.fields.DateField')(default=datetime.datetime(2014, 4, 28, 0, 0))),
|
||||||
|
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
|
||||||
|
('event_venue', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['spa.Venue'])),
|
||||||
|
))
|
||||||
|
db.send_create_signal('spa', ['Event'])
|
||||||
|
|
||||||
|
# Adding M2M table for field attendees on 'Event'
|
||||||
|
m2m_table_name = db.shorten_name(u'spa_event_attendees')
|
||||||
|
db.create_table(m2m_table_name, (
|
||||||
|
('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
|
||||||
|
('event', models.ForeignKey(orm['spa.event'], null=False)),
|
||||||
|
('user', models.ForeignKey(orm[u'auth.user'], null=False))
|
||||||
|
))
|
||||||
|
db.create_unique(m2m_table_name, ['event_id', 'user_id'])
|
||||||
|
|
||||||
|
|
||||||
|
models = {
|
||||||
|
u'auth.group': {
|
||||||
|
'Meta': {'object_name': 'Group'},
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
|
||||||
|
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
|
||||||
|
},
|
||||||
|
u'auth.permission': {
|
||||||
|
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
|
||||||
|
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||||
|
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
|
||||||
|
},
|
||||||
|
u'auth.user': {
|
||||||
|
'Meta': {'object_name': 'User'},
|
||||||
|
'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
|
||||||
|
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
|
||||||
|
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
|
||||||
|
'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
|
||||||
|
'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||||
|
'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||||
|
'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
|
||||||
|
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
|
||||||
|
'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
|
||||||
|
'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),
|
||||||
|
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
|
||||||
|
},
|
||||||
|
u'contenttypes.contenttype': {
|
||||||
|
'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
|
||||||
|
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||||
|
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
|
||||||
|
},
|
||||||
|
'spa._lookup': {
|
||||||
|
'Meta': {'object_name': '_Lookup'},
|
||||||
|
'description': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
|
||||||
|
},
|
||||||
|
'spa.activity': {
|
||||||
|
'Meta': {'object_name': 'Activity'},
|
||||||
|
'date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['spa.UserProfile']", 'null': 'True', 'blank': 'True'})
|
||||||
|
},
|
||||||
|
'spa.activitycomment': {
|
||||||
|
'Meta': {'object_name': 'ActivityComment', '_ormbases': ['spa.Activity']},
|
||||||
|
u'activity_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['spa.Activity']", 'unique': 'True', 'primary_key': 'True'}),
|
||||||
|
'mix': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'activity_comments'", 'to': "orm['spa.Mix']"})
|
||||||
|
},
|
||||||
|
'spa.activitydownload': {
|
||||||
|
'Meta': {'object_name': 'ActivityDownload', '_ormbases': ['spa.Activity']},
|
||||||
|
u'activity_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['spa.Activity']", 'unique': 'True', 'primary_key': 'True'}),
|
||||||
|
'mix': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'activity_downloads'", 'to': "orm['spa.Mix']"})
|
||||||
|
},
|
||||||
|
'spa.activityfavourite': {
|
||||||
|
'Meta': {'object_name': 'ActivityFavourite', '_ormbases': ['spa.Activity']},
|
||||||
|
u'activity_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['spa.Activity']", 'unique': 'True', 'primary_key': 'True'}),
|
||||||
|
'mix': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'activity_favourites'", 'to': "orm['spa.Mix']"})
|
||||||
|
},
|
||||||
|
'spa.activityfollow': {
|
||||||
|
'Meta': {'object_name': 'ActivityFollow', '_ormbases': ['spa.Activity']},
|
||||||
|
u'activity_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['spa.Activity']", 'unique': 'True', 'primary_key': 'True'}),
|
||||||
|
'to_user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'activity_follow'", 'to': "orm['spa.UserProfile']"})
|
||||||
|
},
|
||||||
|
'spa.activitylike': {
|
||||||
|
'Meta': {'object_name': 'ActivityLike', '_ormbases': ['spa.Activity']},
|
||||||
|
u'activity_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['spa.Activity']", 'unique': 'True', 'primary_key': 'True'}),
|
||||||
|
'mix': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'activity_likes'", 'to': "orm['spa.Mix']"})
|
||||||
|
},
|
||||||
|
'spa.activityplay': {
|
||||||
|
'Meta': {'object_name': 'ActivityPlay', '_ormbases': ['spa.Activity']},
|
||||||
|
u'activity_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['spa.Activity']", 'unique': 'True', 'primary_key': 'True'}),
|
||||||
|
'mix': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'activity_plays'", 'to': "orm['spa.Mix']"})
|
||||||
|
},
|
||||||
|
'spa.chatmessage': {
|
||||||
|
'Meta': {'object_name': 'ChatMessage'},
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'message': ('django.db.models.fields.TextField', [], {}),
|
||||||
|
'timestamp': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||||
|
'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'chat_messages'", 'null': 'True', 'to': "orm['spa.UserProfile']"})
|
||||||
|
},
|
||||||
|
'spa.comment': {
|
||||||
|
'Meta': {'object_name': 'Comment'},
|
||||||
|
'comment': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
|
||||||
|
'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'mix': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'comments'", 'null': 'True', 'to': "orm['spa.Mix']"}),
|
||||||
|
'time_index': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
||||||
|
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']", 'null': 'True', 'blank': 'True'})
|
||||||
|
},
|
||||||
|
'spa.genre': {
|
||||||
|
'Meta': {'object_name': 'Genre'},
|
||||||
|
'description': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'slug': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'})
|
||||||
|
},
|
||||||
|
'spa.label': {
|
||||||
|
'Meta': {'object_name': 'Label'},
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
|
||||||
|
},
|
||||||
|
'spa.mix': {
|
||||||
|
'Meta': {'object_name': 'Mix'},
|
||||||
|
'description': ('django.db.models.fields.TextField', [], {}),
|
||||||
|
'download_allowed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||||
|
'duration': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||||
|
'favourites': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'favourites'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['spa.UserProfile']"}),
|
||||||
|
'filetype': ('django.db.models.fields.CharField', [], {'default': "'mp3'", 'max_length': '10'}),
|
||||||
|
'genres': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['spa.Genre']", 'symmetrical': 'False'}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
|
||||||
|
'is_featured': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
|
||||||
|
'likes': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'likes'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['spa.UserProfile']"}),
|
||||||
|
'mix_image': ('django.db.models.fields.files.ImageField', [], {'max_length': '1024', 'blank': 'True'}),
|
||||||
|
'mp3tags_updated': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||||
|
'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50'}),
|
||||||
|
'title': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
|
||||||
|
'uid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '38', 'blank': 'True'}),
|
||||||
|
'upload_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2014, 4, 29, 0, 0)'}),
|
||||||
|
'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'mixes'", 'to': "orm['spa.UserProfile']"}),
|
||||||
|
'waveform_generated': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
|
||||||
|
},
|
||||||
|
'spa.notification': {
|
||||||
|
'Meta': {'object_name': 'Notification'},
|
||||||
|
'accepted_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
|
||||||
|
'date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
|
||||||
|
'from_user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'notifications'", 'null': 'True', 'to': "orm['spa.UserProfile']"}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'notification_html': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
|
||||||
|
'notification_text': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
|
||||||
|
'notification_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True'}),
|
||||||
|
'target': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}),
|
||||||
|
'to_user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'to_notications'", 'to': "orm['spa.UserProfile']"}),
|
||||||
|
'verb': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'})
|
||||||
|
},
|
||||||
|
'spa.purchaselink': {
|
||||||
|
'Meta': {'object_name': 'PurchaseLink'},
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'provider': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||||
|
'track': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'purchase_link'", 'to': "orm['spa.Tracklist']"}),
|
||||||
|
'url': ('django.db.models.fields.URLField', [], {'max_length': '200'})
|
||||||
|
},
|
||||||
|
'spa.recurrence': {
|
||||||
|
'Meta': {'object_name': 'Recurrence', '_ormbases': ['spa._Lookup']},
|
||||||
|
u'_lookup_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['spa._Lookup']", 'unique': 'True', 'primary_key': 'True'})
|
||||||
|
},
|
||||||
|
'spa.release': {
|
||||||
|
'Meta': {'object_name': 'Release'},
|
||||||
|
'embed_code': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
|
||||||
|
'release_artist': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||||
|
'release_date': ('django.db.models.fields.DateField', [], {'default': 'datetime.datetime(2014, 4, 29, 0, 0)'}),
|
||||||
|
'release_description': ('django.db.models.fields.TextField', [], {}),
|
||||||
|
'release_image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'blank': 'True'}),
|
||||||
|
'release_label': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['spa.Label']"}),
|
||||||
|
'release_title': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||||
|
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['spa.UserProfile']"})
|
||||||
|
},
|
||||||
|
'spa.releaseaudio': {
|
||||||
|
'Meta': {'object_name': 'ReleaseAudio'},
|
||||||
|
'description': ('django.db.models.fields.TextField', [], {}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'release': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'release_audio'", 'null': 'True', 'to': "orm['spa.Release']"})
|
||||||
|
},
|
||||||
|
'spa.tracklist': {
|
||||||
|
'Meta': {'object_name': 'Tracklist'},
|
||||||
|
'artist': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||||
|
'description': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'index': ('django.db.models.fields.SmallIntegerField', [], {}),
|
||||||
|
'label': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||||
|
'mix': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'tracklist'", 'to': "orm['spa.Mix']"}),
|
||||||
|
'remixer': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||||
|
'timeindex': ('django.db.models.fields.TimeField', [], {'null': 'True'}),
|
||||||
|
'title': ('django.db.models.fields.CharField', [], {'max_length': '255'})
|
||||||
|
},
|
||||||
|
'spa.userprofile': {
|
||||||
|
'Meta': {'object_name': 'UserProfile'},
|
||||||
|
'activity_sharing': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
||||||
|
'activity_sharing_networks': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
||||||
|
'avatar_image': ('django.db.models.fields.files.ImageField', [], {'max_length': '1024', 'blank': 'True'}),
|
||||||
|
'avatar_type': ('django.db.models.fields.CharField', [], {'default': "'social'", 'max_length': '15'}),
|
||||||
|
'city': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
|
||||||
|
'country': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
|
||||||
|
'description': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'blank': 'True'}),
|
||||||
|
'display_name': ('django.db.models.fields.CharField', [], {'max_length': '35', 'blank': 'True'}),
|
||||||
|
'following': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'followers'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['spa.UserProfile']"}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'last_known_session': ('django.db.models.fields.CharField', [], {'max_length': '250', 'null': 'True', 'blank': 'True'}),
|
||||||
|
'slug': ('django.db.models.fields.SlugField', [], {'default': 'None', 'max_length': '50', 'null': 'True', 'blank': 'True'}),
|
||||||
|
'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'userprofile'", 'unique': 'True', 'to': u"orm['auth.User']"})
|
||||||
|
},
|
||||||
|
'spa.venue': {
|
||||||
|
'Meta': {'object_name': 'Venue'},
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"}),
|
||||||
|
'venue_address': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
|
||||||
|
'venue_image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'blank': 'True'}),
|
||||||
|
'venue_name': ('django.db.models.fields.CharField', [], {'max_length': '250'})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
complete_apps = ['spa']
|
||||||
262
spa/migrations/0049_auto__add_show.py
Normal file
262
spa/migrations/0049_auto__add_show.py
Normal file
@@ -0,0 +1,262 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from south.utils import datetime_utils as datetime
|
||||||
|
from south.db import db
|
||||||
|
from south.v2 import SchemaMigration
|
||||||
|
from django.db import models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(SchemaMigration):
|
||||||
|
|
||||||
|
def forwards(self, orm):
|
||||||
|
# Adding model 'Show'
|
||||||
|
db.create_table(u'spa_show', (
|
||||||
|
(u'event_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['schedule.Event'], unique=True, primary_key=True)),
|
||||||
|
))
|
||||||
|
db.send_create_signal('spa', ['Show'])
|
||||||
|
|
||||||
|
|
||||||
|
def backwards(self, orm):
|
||||||
|
# Deleting model 'Show'
|
||||||
|
db.delete_table(u'spa_show')
|
||||||
|
|
||||||
|
|
||||||
|
models = {
|
||||||
|
u'auth.group': {
|
||||||
|
'Meta': {'object_name': 'Group'},
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
|
||||||
|
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
|
||||||
|
},
|
||||||
|
u'auth.permission': {
|
||||||
|
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
|
||||||
|
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||||
|
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
|
||||||
|
},
|
||||||
|
u'auth.user': {
|
||||||
|
'Meta': {'object_name': 'User'},
|
||||||
|
'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
|
||||||
|
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
|
||||||
|
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
|
||||||
|
'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
|
||||||
|
'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||||
|
'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||||
|
'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
|
||||||
|
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
|
||||||
|
'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
|
||||||
|
'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),
|
||||||
|
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
|
||||||
|
},
|
||||||
|
u'contenttypes.contenttype': {
|
||||||
|
'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
|
||||||
|
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||||
|
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
|
||||||
|
},
|
||||||
|
'schedule.calendar': {
|
||||||
|
'Meta': {'object_name': 'Calendar'},
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
|
||||||
|
'slug': ('django.db.models.fields.SlugField', [], {'max_length': '200'})
|
||||||
|
},
|
||||||
|
'schedule.event': {
|
||||||
|
'Meta': {'object_name': 'Event'},
|
||||||
|
'calendar': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Calendar']", 'null': 'True', 'blank': 'True'}),
|
||||||
|
'created_on': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||||
|
'creator': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'creator'", 'null': 'True', 'to': u"orm['auth.User']"}),
|
||||||
|
'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
|
||||||
|
'end': ('django.db.models.fields.DateTimeField', [], {}),
|
||||||
|
'end_recurring_period': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'rule': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['schedule.Rule']", 'null': 'True', 'blank': 'True'}),
|
||||||
|
'start': ('django.db.models.fields.DateTimeField', [], {}),
|
||||||
|
'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||||
|
'updated_on': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'})
|
||||||
|
},
|
||||||
|
'schedule.rule': {
|
||||||
|
'Meta': {'object_name': 'Rule'},
|
||||||
|
'description': ('django.db.models.fields.TextField', [], {}),
|
||||||
|
'frequency': ('django.db.models.fields.CharField', [], {'max_length': '10'}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
|
||||||
|
'params': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
|
||||||
|
},
|
||||||
|
'spa._lookup': {
|
||||||
|
'Meta': {'object_name': '_Lookup'},
|
||||||
|
'description': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
|
||||||
|
},
|
||||||
|
'spa.activity': {
|
||||||
|
'Meta': {'object_name': 'Activity'},
|
||||||
|
'date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['spa.UserProfile']", 'null': 'True', 'blank': 'True'})
|
||||||
|
},
|
||||||
|
'spa.activitycomment': {
|
||||||
|
'Meta': {'object_name': 'ActivityComment', '_ormbases': ['spa.Activity']},
|
||||||
|
u'activity_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['spa.Activity']", 'unique': 'True', 'primary_key': 'True'}),
|
||||||
|
'mix': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'activity_comments'", 'to': "orm['spa.Mix']"})
|
||||||
|
},
|
||||||
|
'spa.activitydownload': {
|
||||||
|
'Meta': {'object_name': 'ActivityDownload', '_ormbases': ['spa.Activity']},
|
||||||
|
u'activity_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['spa.Activity']", 'unique': 'True', 'primary_key': 'True'}),
|
||||||
|
'mix': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'activity_downloads'", 'to': "orm['spa.Mix']"})
|
||||||
|
},
|
||||||
|
'spa.activityfavourite': {
|
||||||
|
'Meta': {'object_name': 'ActivityFavourite', '_ormbases': ['spa.Activity']},
|
||||||
|
u'activity_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['spa.Activity']", 'unique': 'True', 'primary_key': 'True'}),
|
||||||
|
'mix': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'activity_favourites'", 'to': "orm['spa.Mix']"})
|
||||||
|
},
|
||||||
|
'spa.activityfollow': {
|
||||||
|
'Meta': {'object_name': 'ActivityFollow', '_ormbases': ['spa.Activity']},
|
||||||
|
u'activity_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['spa.Activity']", 'unique': 'True', 'primary_key': 'True'}),
|
||||||
|
'to_user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'activity_follow'", 'to': "orm['spa.UserProfile']"})
|
||||||
|
},
|
||||||
|
'spa.activitylike': {
|
||||||
|
'Meta': {'object_name': 'ActivityLike', '_ormbases': ['spa.Activity']},
|
||||||
|
u'activity_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['spa.Activity']", 'unique': 'True', 'primary_key': 'True'}),
|
||||||
|
'mix': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'activity_likes'", 'to': "orm['spa.Mix']"})
|
||||||
|
},
|
||||||
|
'spa.activityplay': {
|
||||||
|
'Meta': {'object_name': 'ActivityPlay', '_ormbases': ['spa.Activity']},
|
||||||
|
u'activity_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['spa.Activity']", 'unique': 'True', 'primary_key': 'True'}),
|
||||||
|
'mix': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'activity_plays'", 'to': "orm['spa.Mix']"})
|
||||||
|
},
|
||||||
|
'spa.chatmessage': {
|
||||||
|
'Meta': {'object_name': 'ChatMessage'},
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'message': ('django.db.models.fields.TextField', [], {}),
|
||||||
|
'timestamp': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||||
|
'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'chat_messages'", 'null': 'True', 'to': "orm['spa.UserProfile']"})
|
||||||
|
},
|
||||||
|
'spa.comment': {
|
||||||
|
'Meta': {'object_name': 'Comment'},
|
||||||
|
'comment': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
|
||||||
|
'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'mix': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'comments'", 'null': 'True', 'to': "orm['spa.Mix']"}),
|
||||||
|
'time_index': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
||||||
|
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']", 'null': 'True', 'blank': 'True'})
|
||||||
|
},
|
||||||
|
'spa.genre': {
|
||||||
|
'Meta': {'object_name': 'Genre'},
|
||||||
|
'description': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'slug': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'})
|
||||||
|
},
|
||||||
|
'spa.label': {
|
||||||
|
'Meta': {'object_name': 'Label'},
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
|
||||||
|
},
|
||||||
|
'spa.mix': {
|
||||||
|
'Meta': {'object_name': 'Mix'},
|
||||||
|
'description': ('django.db.models.fields.TextField', [], {}),
|
||||||
|
'download_allowed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||||
|
'duration': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||||
|
'favourites': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'favourites'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['spa.UserProfile']"}),
|
||||||
|
'filetype': ('django.db.models.fields.CharField', [], {'default': "'mp3'", 'max_length': '10'}),
|
||||||
|
'genres': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['spa.Genre']", 'symmetrical': 'False'}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
|
||||||
|
'is_featured': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
|
||||||
|
'likes': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'likes'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['spa.UserProfile']"}),
|
||||||
|
'mix_image': ('django.db.models.fields.files.ImageField', [], {'max_length': '1024', 'blank': 'True'}),
|
||||||
|
'mp3tags_updated': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
|
||||||
|
'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50'}),
|
||||||
|
'title': ('django.db.models.fields.CharField', [], {'max_length': '150'}),
|
||||||
|
'uid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '38', 'blank': 'True'}),
|
||||||
|
'upload_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2014, 4, 29, 0, 0)'}),
|
||||||
|
'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'mixes'", 'to': "orm['spa.UserProfile']"}),
|
||||||
|
'waveform_generated': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
|
||||||
|
},
|
||||||
|
'spa.notification': {
|
||||||
|
'Meta': {'object_name': 'Notification'},
|
||||||
|
'accepted_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
|
||||||
|
'date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
|
||||||
|
'from_user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'notifications'", 'null': 'True', 'to': "orm['spa.UserProfile']"}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'notification_html': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
|
||||||
|
'notification_text': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
|
||||||
|
'notification_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True'}),
|
||||||
|
'target': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'}),
|
||||||
|
'to_user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'to_notications'", 'to': "orm['spa.UserProfile']"}),
|
||||||
|
'verb': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True'})
|
||||||
|
},
|
||||||
|
'spa.purchaselink': {
|
||||||
|
'Meta': {'object_name': 'PurchaseLink'},
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'provider': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||||
|
'track': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'purchase_link'", 'to': "orm['spa.Tracklist']"}),
|
||||||
|
'url': ('django.db.models.fields.URLField', [], {'max_length': '200'})
|
||||||
|
},
|
||||||
|
'spa.recurrence': {
|
||||||
|
'Meta': {'object_name': 'Recurrence', '_ormbases': ['spa._Lookup']},
|
||||||
|
u'_lookup_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['spa._Lookup']", 'unique': 'True', 'primary_key': 'True'})
|
||||||
|
},
|
||||||
|
'spa.release': {
|
||||||
|
'Meta': {'object_name': 'Release'},
|
||||||
|
'embed_code': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
|
||||||
|
'release_artist': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||||
|
'release_date': ('django.db.models.fields.DateField', [], {'default': 'datetime.datetime(2014, 4, 29, 0, 0)'}),
|
||||||
|
'release_description': ('django.db.models.fields.TextField', [], {}),
|
||||||
|
'release_image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'blank': 'True'}),
|
||||||
|
'release_label': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['spa.Label']"}),
|
||||||
|
'release_title': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||||
|
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['spa.UserProfile']"})
|
||||||
|
},
|
||||||
|
'spa.releaseaudio': {
|
||||||
|
'Meta': {'object_name': 'ReleaseAudio'},
|
||||||
|
'description': ('django.db.models.fields.TextField', [], {}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'release': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'release_audio'", 'null': 'True', 'to': "orm['spa.Release']"})
|
||||||
|
},
|
||||||
|
'spa.show': {
|
||||||
|
'Meta': {'object_name': 'Show', '_ormbases': ['schedule.Event']},
|
||||||
|
u'event_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['schedule.Event']", 'unique': 'True', 'primary_key': 'True'})
|
||||||
|
},
|
||||||
|
'spa.tracklist': {
|
||||||
|
'Meta': {'object_name': 'Tracklist'},
|
||||||
|
'artist': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||||
|
'description': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'index': ('django.db.models.fields.SmallIntegerField', [], {}),
|
||||||
|
'label': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||||
|
'mix': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'tracklist'", 'to': "orm['spa.Mix']"}),
|
||||||
|
'remixer': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||||
|
'timeindex': ('django.db.models.fields.TimeField', [], {'null': 'True'}),
|
||||||
|
'title': ('django.db.models.fields.CharField', [], {'max_length': '255'})
|
||||||
|
},
|
||||||
|
'spa.userprofile': {
|
||||||
|
'Meta': {'object_name': 'UserProfile'},
|
||||||
|
'activity_sharing': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
||||||
|
'activity_sharing_networks': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
|
||||||
|
'avatar_image': ('django.db.models.fields.files.ImageField', [], {'max_length': '1024', 'blank': 'True'}),
|
||||||
|
'avatar_type': ('django.db.models.fields.CharField', [], {'default': "'social'", 'max_length': '15'}),
|
||||||
|
'city': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
|
||||||
|
'country': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
|
||||||
|
'description': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'blank': 'True'}),
|
||||||
|
'display_name': ('django.db.models.fields.CharField', [], {'max_length': '35', 'blank': 'True'}),
|
||||||
|
'following': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'followers'", 'null': 'True', 'symmetrical': 'False', 'to': "orm['spa.UserProfile']"}),
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'last_known_session': ('django.db.models.fields.CharField', [], {'max_length': '250', 'null': 'True', 'blank': 'True'}),
|
||||||
|
'slug': ('django.db.models.fields.SlugField', [], {'default': 'None', 'max_length': '50', 'null': 'True', 'blank': 'True'}),
|
||||||
|
'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'userprofile'", 'unique': 'True', 'to': u"orm['auth.User']"})
|
||||||
|
},
|
||||||
|
'spa.venue': {
|
||||||
|
'Meta': {'object_name': 'Venue'},
|
||||||
|
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"}),
|
||||||
|
'venue_address': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
|
||||||
|
'venue_image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100', 'blank': 'True'}),
|
||||||
|
'venue_name': ('django.db.models.fields.CharField', [], {'max_length': '250'})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
complete_apps = ['spa']
|
||||||
@@ -4,7 +4,6 @@ from chatmessage import ChatMessage
|
|||||||
from recurrence import Recurrence
|
from recurrence import Recurrence
|
||||||
from comment import Comment
|
from comment import Comment
|
||||||
from venue import Venue
|
from venue import Venue
|
||||||
from event import Event
|
|
||||||
from label import Label
|
from label import Label
|
||||||
from mix import Mix
|
from mix import Mix
|
||||||
from activity import Activity
|
from activity import Activity
|
||||||
@@ -13,3 +12,4 @@ from genre import Genre
|
|||||||
from tracklist import Tracklist
|
from tracklist import Tracklist
|
||||||
from purchaselink import PurchaseLink
|
from purchaselink import PurchaseLink
|
||||||
from release import Release
|
from release import Release
|
||||||
|
from show import Show
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ from django.db import models
|
|||||||
from spa.models import Recurrence
|
from spa.models import Recurrence
|
||||||
from spa.models.venue import Venue
|
from spa.models.venue import Venue
|
||||||
|
|
||||||
|
"""
|
||||||
class Event(models.Model):
|
class Event(models.Model):
|
||||||
class Meta:
|
class Meta:
|
||||||
app_label = 'spa'
|
app_label = 'spa'
|
||||||
@@ -25,4 +25,5 @@ class Event(models.Model):
|
|||||||
return '/event/%i' % self.id
|
return '/event/%i' % self.id
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return self.event_title
|
return self.event_title
|
||||||
|
"""
|
||||||
|
|||||||
23
spa/models/show.py
Normal file
23
spa/models/show.py
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
from django.db.models import Q
|
||||||
|
from schedule.models import Event
|
||||||
|
|
||||||
|
class ShowOverlapException(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
class Show(Event):
|
||||||
|
class Meta:
|
||||||
|
app_label = 'spa'
|
||||||
|
|
||||||
|
def save(self, force_insert=False, force_update=False, using=None,
|
||||||
|
update_fields=None):
|
||||||
|
"""
|
||||||
|
throw an exception if event overlaps with another event
|
||||||
|
"""
|
||||||
|
overlaps = Show.objects.filter(
|
||||||
|
Q(start__gte=self.start, end__lte=self.start) |
|
||||||
|
Q(start__gte=self.end, end__lte=self.end)
|
||||||
|
)
|
||||||
|
if len(overlaps) != 0:
|
||||||
|
raise ShowOverlapException()
|
||||||
|
|
||||||
|
return super(Show, self).save(force_insert, force_update, using, update_fields)
|
||||||
@@ -12,9 +12,8 @@ from sorl import thumbnail
|
|||||||
from sorl.thumbnail.helpers import ThumbnailError
|
from sorl.thumbnail.helpers import ThumbnailError
|
||||||
|
|
||||||
from core.utils.file import generate_save_file_name
|
from core.utils.file import generate_save_file_name
|
||||||
from core.utils.url import unique_slugify, wrap_full
|
from core.utils.url import unique_slugify
|
||||||
from dss import settings
|
from dss import settings
|
||||||
from spa.models.notification import Notification
|
|
||||||
from spa.models._basemodel import _BaseModel
|
from spa.models._basemodel import _BaseModel
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
60
spa/tests/schedule.py
Normal file
60
spa/tests/schedule.py
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
from datetime import datetime
|
||||||
|
from django.test import TestCase
|
||||||
|
from spa.models import Show
|
||||||
|
from spa.models.show import ShowOverlapException
|
||||||
|
|
||||||
|
DATE_FORMAT = '%d/%m/%Y %H:%M:%S'
|
||||||
|
START_DATE = datetime.strptime("28/04/2013 12:00:00", DATE_FORMAT)
|
||||||
|
END_DATE = datetime.strptime("28/04/2013 13:00:00", DATE_FORMAT)
|
||||||
|
|
||||||
|
|
||||||
|
class TestScheduleOverlaps(TestCase):
|
||||||
|
def setUp(self):
|
||||||
|
Show.objects.all().delete()
|
||||||
|
Show(description="Test event one", start=START_DATE, end=END_DATE).save()
|
||||||
|
|
||||||
|
def test_first_show_saved(self):
|
||||||
|
self.assertEqual(len(Show.objects.all()), 1)
|
||||||
|
|
||||||
|
def test_same_event_overlap(self):
|
||||||
|
try:
|
||||||
|
Show(description="Test overlapping event", start=START_DATE, end=END_DATE).save()
|
||||||
|
self.fail("Shows cannot overlap each other")
|
||||||
|
except ShowOverlapException:
|
||||||
|
pass
|
||||||
|
except Exception, ex:
|
||||||
|
self.fail(ex.message)
|
||||||
|
|
||||||
|
def test_two_events_flush(self):
|
||||||
|
try:
|
||||||
|
start = datetime.strptime("28/04/2013 13:00:00", DATE_FORMAT)
|
||||||
|
end = datetime.strptime("28/04/2013 14:00:00", DATE_FORMAT)
|
||||||
|
Show(description="Another show begins in middle of this show", start=start, end=end).save()
|
||||||
|
except ShowOverlapException:
|
||||||
|
self.fail("These events do not overlap, they are flush")
|
||||||
|
except Exception, ex:
|
||||||
|
self.fail(ex.message)
|
||||||
|
|
||||||
|
def test_event_straddle_start_end(self):
|
||||||
|
try:
|
||||||
|
start = datetime.strptime("28/04/2013 11:30:00", DATE_FORMAT)
|
||||||
|
end = datetime.strptime("28/04/2013 12:30:00", DATE_FORMAT)
|
||||||
|
Show(description="Another show begins in middle of this show", start=start, end=end).save()
|
||||||
|
self.fail("Should not be able to save a show straddling another show")
|
||||||
|
except ShowOverlapException:
|
||||||
|
pass
|
||||||
|
except Exception, ex:
|
||||||
|
self.fail(ex.message)
|
||||||
|
|
||||||
|
def test_event_straddle_end_start(self):
|
||||||
|
try:
|
||||||
|
start = datetime.strptime("28/04/2013 12:30:00", DATE_FORMAT)
|
||||||
|
end = datetime.strptime("28/04/2013 13:30:00", DATE_FORMAT)
|
||||||
|
s = Show(description="Show begins in middle of another show", start=start, end=end)
|
||||||
|
s.save()
|
||||||
|
import ipdb; ipdb.set_trace()
|
||||||
|
self.fail("Should not be able to save a show straddling another show")
|
||||||
|
except ShowOverlapException:
|
||||||
|
pass
|
||||||
|
except Exception, ex:
|
||||||
|
self.fail(ex.message)
|
||||||
@@ -7,12 +7,13 @@ from spa.api.v1.NotificationResource import NotificationResource
|
|||||||
from spa.audio import AudioHandler
|
from spa.audio import AudioHandler
|
||||||
from spa.api.v1.ChatResource import ChatResource
|
from spa.api.v1.ChatResource import ChatResource
|
||||||
from spa.api.v1.CommentResource import CommentResource
|
from spa.api.v1.CommentResource import CommentResource
|
||||||
from spa.api.v1.EventResource import EventResource
|
#from spa.api.v1.EventResource import EventResource
|
||||||
from spa.api.v1.MixResource import MixResource
|
from spa.api.v1.MixResource import MixResource
|
||||||
from spa.api.v1.ReleaseAudioResource import ReleaseAudioResource
|
from spa.api.v1.ReleaseAudioResource import ReleaseAudioResource
|
||||||
from spa.api.v1.ReleaseResource import ReleaseResource
|
from spa.api.v1.ReleaseResource import ReleaseResource
|
||||||
from spa.api.v1.UserResource import UserResource
|
from spa.api.v1.UserResource import UserResource
|
||||||
from spa.api.v1.ActivityResource import ActivityResource
|
from spa.api.v1.ActivityResource import ActivityResource
|
||||||
|
from spa.api.v1.ShowResource import ShowResource
|
||||||
|
|
||||||
api = Api(api_name='v1')
|
api = Api(api_name='v1')
|
||||||
api.register(ChatResource())
|
api.register(ChatResource())
|
||||||
@@ -20,10 +21,11 @@ api.register(CommentResource())
|
|||||||
api.register(MixResource())
|
api.register(MixResource())
|
||||||
api.register(ReleaseResource())
|
api.register(ReleaseResource())
|
||||||
api.register(ReleaseAudioResource())
|
api.register(ReleaseAudioResource())
|
||||||
api.register(EventResource())
|
#api.register(EventResource())
|
||||||
api.register(UserResource())
|
api.register(UserResource())
|
||||||
api.register(ActivityResource())
|
api.register(ActivityResource())
|
||||||
api.register(NotificationResource())
|
api.register(NotificationResource())
|
||||||
|
api.register(ShowResource())
|
||||||
api.register(DebugResource())
|
api.register(DebugResource())
|
||||||
|
|
||||||
ajax = AjaxHandler()
|
ajax = AjaxHandler()
|
||||||
@@ -35,7 +37,6 @@ urlpatterns = patterns(
|
|||||||
url(r'^tpl/(?P<template_name>\w+)/$', 'spa.templates.get_template'),
|
url(r'^tpl/(?P<template_name>\w+)/$', 'spa.templates.get_template'),
|
||||||
url(r'^dlg/(?P<dialog_name>\w+)/$', 'spa.templates.get_dialog'),
|
url(r'^dlg/(?P<dialog_name>\w+)/$', 'spa.templates.get_dialog'),
|
||||||
url(r'^dlg/embed/(?P<slug>[\w\d_.-]+)/$', 'spa.templates.get_embed_codes_dialog'),
|
url(r'^dlg/embed/(?P<slug>[\w\d_.-]+)/$', 'spa.templates.get_embed_codes_dialog'),
|
||||||
|
|
||||||
url(r'^js/(?P<template_name>\w+)/$', 'spa.templates.get_javascript'),
|
url(r'^js/(?P<template_name>\w+)/$', 'spa.templates.get_javascript'),
|
||||||
url(r'^tplex/(?P<template_name>\w+)/$', 'spa.templates.get_template_ex'),
|
url(r'^tplex/(?P<template_name>\w+)/$', 'spa.templates.get_template_ex'),
|
||||||
url(r'^podcast', 'spa.podcast.get_default_podcast'),
|
url(r'^podcast', 'spa.podcast.get_default_podcast'),
|
||||||
@@ -51,5 +52,3 @@ urlpatterns = patterns(
|
|||||||
url(r'^comments/', include('django.contrib.comments.urls')),
|
url(r'^comments/', include('django.contrib.comments.urls')),
|
||||||
(r'^.*/$', 'spa.views.default')
|
(r'^.*/$', 'spa.views.default')
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ def app(request):
|
|||||||
'bust': uuid.uuid1()
|
'bust': uuid.uuid1()
|
||||||
}
|
}
|
||||||
|
|
||||||
if request.user_agent.browser.family == 'Firefox':
|
if request.user_agent.browser.family == '___Firefox___':
|
||||||
context['ua_html'] = \
|
context['ua_html'] = \
|
||||||
"""<div class="alert alert-block alert-warning">
|
"""<div class="alert alert-block alert-warning">
|
||||||
<button type="button" class="close" data-dismiss="alert">
|
<button type="button" class="close" data-dismiss="alert">
|
||||||
|
|||||||
@@ -1,15 +1,17 @@
|
|||||||
define ['app', 'marionette', 'vent', 'utils'
|
define ['app', 'marionette', 'vent', 'utils',
|
||||||
'views/mix/mixListLayout', 'views/mix/mixListView', 'views/mix/mixDetailView'
|
'views/mix/mixListLayout', 'views/mix/mixListView', 'views/mix/mixDetailView',
|
||||||
|
'views/schedule/scheduleView',
|
||||||
'views/mix/mixEditView', 'views/user/userProfileView', 'views/user/userListView', 'views/user/userEditView',
|
'views/mix/mixEditView', 'views/user/userProfileView', 'views/user/userListView', 'views/user/userEditView',
|
||||||
'models/mix/mixCollection', 'models/mix/mixItem', 'models/user/userItem'],
|
'models/mix/mixCollection', 'models/mix/mixItem', 'models/user/userItem'],
|
||||||
(App, Marionette, vent, utils,
|
(App, Marionette, vent, utils,
|
||||||
MixListLayout, MixListView, MixDetailView,
|
MixListLayout, MixListView, MixDetailView,
|
||||||
|
ScheduleView,
|
||||||
MixEditView, UserProfileView, UserListView, UserEditView,
|
MixEditView, UserProfileView, UserListView, UserEditView,
|
||||||
MixCollection, MixItem, UserItem)->
|
MixCollection, MixItem, UserItem)->
|
||||||
class DssController extends Marionette.Controller
|
class DssController extends Marionette.Controller
|
||||||
|
|
||||||
initialize: ->
|
initialize: ->
|
||||||
@listenTo(vent, "mix:random", @showRandomMix)
|
@listenTo(vent, "mix:random", @showRandomMix)
|
||||||
|
|
||||||
home: ->
|
home: ->
|
||||||
console.log "Controller: home"
|
console.log "Controller: home"
|
||||||
@@ -18,13 +20,18 @@ define ['app', 'marionette', 'vent', 'utils'
|
|||||||
doLogin: ->
|
doLogin: ->
|
||||||
vent.trigger('app:login')
|
vent.trigger('app:login')
|
||||||
|
|
||||||
showMixList: (options) ->
|
showSchedule: ->
|
||||||
app = require('app')
|
app = require('app')
|
||||||
app.contentRegion.show(new MixListLayout(options or {order_by: 'latest'}))
|
app.contentRegion.show(new ScheduleView())
|
||||||
|
vent.trigger('schedule:show')
|
||||||
|
|
||||||
|
showMixList: (options, emptyTemplate) ->
|
||||||
|
app = require('app')
|
||||||
|
app.contentRegion.show(new MixListLayout(options or {order_by: 'latest'}, emptyTemplate))
|
||||||
vent.trigger('mix:showlist', options or {order_by: 'latest'})
|
vent.trigger('mix:showlist', options or {order_by: 'latest'})
|
||||||
|
|
||||||
showStreamList: () ->
|
showStreamList: () ->
|
||||||
@showMixList({stream: true})
|
@showMixList({stream: true}, '/tpl/EmptyTemplate')
|
||||||
|
|
||||||
showMixListType: (type) ->
|
showMixListType: (type) ->
|
||||||
@showMixList({order_by: type})
|
@showMixList({order_by: type})
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
var __hasProp = {}.hasOwnProperty,
|
var __hasProp = {}.hasOwnProperty,
|
||||||
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
|
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
|
||||||
|
|
||||||
define(['app', 'marionette', 'vent', 'utils', 'views/mix/mixListLayout', 'views/mix/mixListView', 'views/mix/mixDetailView', 'views/mix/mixEditView', 'views/user/userProfileView', 'views/user/userListView', 'views/user/userEditView', 'models/mix/mixCollection', 'models/mix/mixItem', 'models/user/userItem'], function(App, Marionette, vent, utils, MixListLayout, MixListView, MixDetailView, MixEditView, UserProfileView, UserListView, UserEditView, MixCollection, MixItem, UserItem) {
|
define(['app', 'marionette', 'vent', 'utils', 'views/mix/mixListLayout', 'views/mix/mixListView', 'views/mix/mixDetailView', 'views/schedule/scheduleView', 'views/mix/mixEditView', 'views/user/userProfileView', 'views/user/userListView', 'views/user/userEditView', 'models/mix/mixCollection', 'models/mix/mixItem', 'models/user/userItem'], function(App, Marionette, vent, utils, MixListLayout, MixListView, MixDetailView, ScheduleView, MixEditView, UserProfileView, UserListView, UserEditView, MixCollection, MixItem, UserItem) {
|
||||||
var DssController;
|
var DssController;
|
||||||
DssController = (function(_super) {
|
DssController = (function(_super) {
|
||||||
|
|
||||||
@@ -26,12 +26,19 @@
|
|||||||
return vent.trigger('app:login');
|
return vent.trigger('app:login');
|
||||||
};
|
};
|
||||||
|
|
||||||
DssController.prototype.showMixList = function(options) {
|
DssController.prototype.showSchedule = function() {
|
||||||
|
var app;
|
||||||
|
app = require('app');
|
||||||
|
app.contentRegion.show(new ScheduleView());
|
||||||
|
return vent.trigger('schedule:show');
|
||||||
|
};
|
||||||
|
|
||||||
|
DssController.prototype.showMixList = function(options, emptyTemplate) {
|
||||||
var app;
|
var app;
|
||||||
app = require('app');
|
app = require('app');
|
||||||
app.contentRegion.show(new MixListLayout(options || {
|
app.contentRegion.show(new MixListLayout(options || {
|
||||||
order_by: 'latest'
|
order_by: 'latest'
|
||||||
}));
|
}, emptyTemplate));
|
||||||
return vent.trigger('mix:showlist', options || {
|
return vent.trigger('mix:showlist', options || {
|
||||||
order_by: 'latest'
|
order_by: 'latest'
|
||||||
});
|
});
|
||||||
@@ -40,7 +47,7 @@
|
|||||||
DssController.prototype.showStreamList = function() {
|
DssController.prototype.showStreamList = function() {
|
||||||
return this.showMixList({
|
return this.showMixList({
|
||||||
stream: true
|
stream: true
|
||||||
});
|
}, '/tpl/EmptyTemplate');
|
||||||
};
|
};
|
||||||
|
|
||||||
DssController.prototype.showMixListType = function(type) {
|
DssController.prototype.showMixListType = function(type) {
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ define ['marionette', 'vent', 'app.lib/controller'],
|
|||||||
"chat": "showChat",
|
"chat": "showChat",
|
||||||
"random": "showRandomMix",
|
"random": "showRandomMix",
|
||||||
"stream": "showStreamList",
|
"stream": "showStreamList",
|
||||||
|
"schedule": "showSchedule",
|
||||||
|
|
||||||
"login": "doLogin"
|
"login": "doLogin"
|
||||||
|
|
||||||
|
|||||||
@@ -27,6 +27,7 @@
|
|||||||
"chat": "showChat",
|
"chat": "showChat",
|
||||||
"random": "showRandomMix",
|
"random": "showRandomMix",
|
||||||
"stream": "showStreamList",
|
"stream": "showStreamList",
|
||||||
|
"schedule": "showSchedule",
|
||||||
"login": "doLogin",
|
"login": "doLogin",
|
||||||
"users": "showUserList",
|
"users": "showUserList",
|
||||||
"user/:slug/favourites": "showUserFavourites",
|
"user/:slug/favourites": "showUserFavourites",
|
||||||
|
|||||||
7
static/js/app/views/genericView.coffee
Normal file
7
static/js/app/views/genericView.coffee
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
define ['marionette'],
|
||||||
|
(Marionette)->
|
||||||
|
class GenericView extends Marionette.ItemView
|
||||||
|
initialize: (options)->
|
||||||
|
@template = _.template(options.template)
|
||||||
|
|
||||||
|
true
|
||||||
27
static/js/app/views/genericView.js
Normal file
27
static/js/app/views/genericView.js
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
// Generated by CoffeeScript 1.4.0
|
||||||
|
(function() {
|
||||||
|
var __hasProp = {}.hasOwnProperty,
|
||||||
|
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
|
||||||
|
|
||||||
|
define(['marionette'], function(Marionette) {
|
||||||
|
var GenericView;
|
||||||
|
return GenericView = (function(_super) {
|
||||||
|
|
||||||
|
__extends(GenericView, _super);
|
||||||
|
|
||||||
|
function GenericView() {
|
||||||
|
return GenericView.__super__.constructor.apply(this, arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
GenericView.prototype.initialize = function(options) {
|
||||||
|
return this.template = _.template(options.template);
|
||||||
|
};
|
||||||
|
|
||||||
|
true;
|
||||||
|
|
||||||
|
return GenericView;
|
||||||
|
|
||||||
|
})(Marionette.ItemView);
|
||||||
|
});
|
||||||
|
|
||||||
|
}).call(this);
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
define [
|
define [
|
||||||
'marionette', 'vent',
|
'marionette', 'vent',
|
||||||
'models/user/userItem', 'models/mix/mixCollection'
|
'models/user/userItem', 'models/mix/mixCollection'
|
||||||
'views/widgets/mixTabHeaderView', 'views/user/userItemView', 'views/mix/mixListView',
|
'views/widgets/mixTabHeaderView', 'views/user/userItemView', 'views/mix/mixListView', 'views/genericView',
|
||||||
'text!/tpl/MixListLayoutView'],
|
'text!/tpl/MixListLayoutView'],
|
||||||
(Marionette, vent,
|
(Marionette, vent,
|
||||||
UserItem, MixCollection,
|
UserItem, MixCollection,
|
||||||
MixTabHeaderView, UserItemView, MixListView,
|
MixTabHeaderView, UserItemView, MixListView, GenericView,
|
||||||
Template) ->
|
Template) ->
|
||||||
class MixListLayout extends Marionette.Layout
|
class MixListLayout extends Marionette.Layout
|
||||||
template: _.template(Template)
|
template: _.template(Template)
|
||||||
@@ -14,21 +14,24 @@ define [
|
|||||||
bodyRegion: "#mix-list-body"
|
bodyRegion: "#mix-list-body"
|
||||||
}
|
}
|
||||||
|
|
||||||
initialize: (options)->
|
initialize: (options, emptyTemplate)->
|
||||||
@listenTo(vent, "mix:showlist", @showMixList)
|
@listenTo(vent, "mix:showlist", @showMixList)
|
||||||
@listenTo(vent, "user:showdetail", @showUserView)
|
@listenTo(vent, "user:showdetail", @showUserView)
|
||||||
@showMixList(options)
|
@showMixList(options, emptyTemplate)
|
||||||
|
|
||||||
onShow: ->
|
onShow: ->
|
||||||
@headerRegion.show(new MixTabHeaderView())
|
@headerRegion.show(new MixTabHeaderView())
|
||||||
|
|
||||||
showMixList: (options) ->
|
showMixList: (options, emptyTemplate) ->
|
||||||
@collection = new MixCollection()
|
@collection = new MixCollection()
|
||||||
@collection.fetch
|
@collection.fetch
|
||||||
data: options
|
data: options
|
||||||
success: (collection)=>
|
success: (collection)=>
|
||||||
@bodyRegion.show(new MixListView({collection: collection}))
|
if collection.length > 0
|
||||||
|
@bodyRegion.show(new MixListView({collection: collection}))
|
||||||
|
else
|
||||||
|
$.get emptyTemplate, (data) =>
|
||||||
|
@bodyRegion.show(new GenericView({template: data}))
|
||||||
showUserView: (options) ->
|
showUserView: (options) ->
|
||||||
@bodyRegion.show(new MixListView(options))
|
@bodyRegion.show(new MixListView(options))
|
||||||
user = new UserItem({id: options.user})
|
user = new UserItem({id: options.user})
|
||||||
@@ -37,4 +40,4 @@ define [
|
|||||||
@headerRegion.show(new UserItemView({model: user}))
|
@headerRegion.show(new UserItemView({model: user}))
|
||||||
)
|
)
|
||||||
|
|
||||||
MixListLayout
|
MixListLayout
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
var __hasProp = {}.hasOwnProperty,
|
var __hasProp = {}.hasOwnProperty,
|
||||||
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
|
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
|
||||||
|
|
||||||
define(['marionette', 'vent', 'models/user/userItem', 'models/mix/mixCollection', 'views/widgets/mixTabHeaderView', 'views/user/userItemView', 'views/mix/mixListView', 'text!/tpl/MixListLayoutView'], function(Marionette, vent, UserItem, MixCollection, MixTabHeaderView, UserItemView, MixListView, Template) {
|
define(['marionette', 'vent', 'models/user/userItem', 'models/mix/mixCollection', 'views/widgets/mixTabHeaderView', 'views/user/userItemView', 'views/mix/mixListView', 'views/genericView', 'text!/tpl/MixListLayoutView'], function(Marionette, vent, UserItem, MixCollection, MixTabHeaderView, UserItemView, MixListView, GenericView, Template) {
|
||||||
var MixListLayout;
|
var MixListLayout;
|
||||||
MixListLayout = (function(_super) {
|
MixListLayout = (function(_super) {
|
||||||
|
|
||||||
@@ -20,25 +20,33 @@
|
|||||||
bodyRegion: "#mix-list-body"
|
bodyRegion: "#mix-list-body"
|
||||||
};
|
};
|
||||||
|
|
||||||
MixListLayout.prototype.initialize = function(options) {
|
MixListLayout.prototype.initialize = function(options, emptyTemplate) {
|
||||||
this.listenTo(vent, "mix:showlist", this.showMixList);
|
this.listenTo(vent, "mix:showlist", this.showMixList);
|
||||||
this.listenTo(vent, "user:showdetail", this.showUserView);
|
this.listenTo(vent, "user:showdetail", this.showUserView);
|
||||||
return this.showMixList(options);
|
return this.showMixList(options, emptyTemplate);
|
||||||
};
|
};
|
||||||
|
|
||||||
MixListLayout.prototype.onShow = function() {
|
MixListLayout.prototype.onShow = function() {
|
||||||
return this.headerRegion.show(new MixTabHeaderView());
|
return this.headerRegion.show(new MixTabHeaderView());
|
||||||
};
|
};
|
||||||
|
|
||||||
MixListLayout.prototype.showMixList = function(options) {
|
MixListLayout.prototype.showMixList = function(options, emptyTemplate) {
|
||||||
var _this = this;
|
var _this = this;
|
||||||
this.collection = new MixCollection();
|
this.collection = new MixCollection();
|
||||||
return this.collection.fetch({
|
return this.collection.fetch({
|
||||||
data: options,
|
data: options,
|
||||||
success: function(collection) {
|
success: function(collection) {
|
||||||
return _this.bodyRegion.show(new MixListView({
|
if (collection.length > 0) {
|
||||||
collection: collection
|
return _this.bodyRegion.show(new MixListView({
|
||||||
}));
|
collection: collection
|
||||||
|
}));
|
||||||
|
} else {
|
||||||
|
return $.get(emptyTemplate, function(data) {
|
||||||
|
return _this.bodyRegion.show(new GenericView({
|
||||||
|
template: data
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ define ['marionette', 'vent', 'models/mix/mixCollection', 'views/mix/mixItemView
|
|||||||
|
|
||||||
template: _.template(Template)
|
template: _.template(Template)
|
||||||
className: "mix-listing audio-listing"
|
className: "mix-listing audio-listing"
|
||||||
emptyView: Marionette.ItemView.extend(template: "#mix-empty-view")
|
|
||||||
itemView: MixItemView
|
itemView: MixItemView
|
||||||
itemViewContainer: "#mix-list-container-ul"
|
itemViewContainer: "#mix-list-container-ul"
|
||||||
|
|
||||||
|
|||||||
@@ -18,10 +18,6 @@
|
|||||||
|
|
||||||
MixListView.prototype.className = "mix-listing audio-listing";
|
MixListView.prototype.className = "mix-listing audio-listing";
|
||||||
|
|
||||||
MixListView.prototype.emptyView = Marionette.ItemView.extend({
|
|
||||||
template: "#mix-empty-view"
|
|
||||||
});
|
|
||||||
|
|
||||||
MixListView.prototype.itemView = MixItemView;
|
MixListView.prototype.itemView = MixItemView;
|
||||||
|
|
||||||
MixListView.prototype.itemViewContainer = "#mix-list-container-ul";
|
MixListView.prototype.itemViewContainer = "#mix-list-container-ul";
|
||||||
|
|||||||
130
static/js/app/views/schedule/scheduleView.coffee
Normal file
130
static/js/app/views/schedule/scheduleView.coffee
Normal file
@@ -0,0 +1,130 @@
|
|||||||
|
define ['app', 'vent', 'marionette', 'fullcalendar', 'text!/tpl/ScheduleView'],
|
||||||
|
(App, vent, Marionette, fullcalendar, Template)->
|
||||||
|
class ScheduleView extends Marionette.ItemView
|
||||||
|
template: _.template(Template)
|
||||||
|
|
||||||
|
onShow: ->
|
||||||
|
|
||||||
|
$("#external-events div.external-event").each ->
|
||||||
|
|
||||||
|
# create an Event Object (http://arshaw.com/fullcalendar/docs/event_data/Event_Object/)
|
||||||
|
# it doesn't need to have a start or end
|
||||||
|
eventObject =
|
||||||
|
title: $.trim($(this).text()) # use the element's text as the event title
|
||||||
|
|
||||||
|
# store the Event Object in the DOM element so we can get to it later
|
||||||
|
$(this).data "eventObject", eventObject
|
||||||
|
|
||||||
|
# make the event draggable using jQuery UI
|
||||||
|
$(this).draggable
|
||||||
|
zIndex: 999
|
||||||
|
revert: true # will cause the event to go back to its
|
||||||
|
revertDuration: 0 # original position after the drag
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
date = new Date()
|
||||||
|
d = date.getDate()
|
||||||
|
m = date.getMonth()
|
||||||
|
y = date.getFullYear()
|
||||||
|
calendar = $("#calendar").fullCalendar(
|
||||||
|
#isRTL: true,
|
||||||
|
buttonText:
|
||||||
|
prev: "<i class=\"ace-icon fa fa-chevron-left\"></i>"
|
||||||
|
next: "<i class=\"ace-icon fa fa-chevron-right\"></i>"
|
||||||
|
|
||||||
|
header:
|
||||||
|
left: "prev,next today"
|
||||||
|
center: "title"
|
||||||
|
right: "month,agendaWeek,agendaDay"
|
||||||
|
|
||||||
|
events: [
|
||||||
|
{
|
||||||
|
title: "All Day Event"
|
||||||
|
start: new Date(y, m, 1)
|
||||||
|
className: "label-important"
|
||||||
|
}
|
||||||
|
{
|
||||||
|
title: "Long Event"
|
||||||
|
start: new Date(y, m, d - 5)
|
||||||
|
end: new Date(y, m, d - 2)
|
||||||
|
className: "label-success"
|
||||||
|
}
|
||||||
|
{
|
||||||
|
title: "Some Event"
|
||||||
|
start: new Date(y, m, d - 3, 16, 0)
|
||||||
|
allDay: false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
editable: true
|
||||||
|
droppable: true # this allows things to be dropped onto the calendar !!!
|
||||||
|
drop: (date, allDay) -> # this function is called when something is dropped
|
||||||
|
|
||||||
|
# retrieve the dropped element's stored Event Object
|
||||||
|
originalEventObject = $(this).data("eventObject")
|
||||||
|
$extraEventClass = $(this).attr("data-class")
|
||||||
|
|
||||||
|
# we need to copy it, so that multiple events don't have a reference to the same object
|
||||||
|
copiedEventObject = $.extend({}, originalEventObject)
|
||||||
|
|
||||||
|
# assign it the date that was reported
|
||||||
|
copiedEventObject.start = date
|
||||||
|
copiedEventObject.allDay = allDay
|
||||||
|
copiedEventObject["className"] = [$extraEventClass] if $extraEventClass
|
||||||
|
|
||||||
|
# render the event on the calendar
|
||||||
|
# the last `true` argument determines if the event "sticks" (http://arshaw.com/fullcalendar/docs/event_rendering/renderEvent/)
|
||||||
|
$("#calendar").fullCalendar "renderEvent", copiedEventObject, true
|
||||||
|
|
||||||
|
# is the "remove after drop" checkbox checked?
|
||||||
|
|
||||||
|
# if so, remove the element from the "Draggable Events" list
|
||||||
|
$(this).remove() if $("#drop-remove").is(":checked")
|
||||||
|
return
|
||||||
|
|
||||||
|
selectable: true
|
||||||
|
selectHelper: true
|
||||||
|
select: (start, end, allDay) ->
|
||||||
|
bootbox.prompt "New Event Title:", (title) ->
|
||||||
|
if title isnt null
|
||||||
|
calendar.fullCalendar "renderEvent",
|
||||||
|
title: title
|
||||||
|
start: start
|
||||||
|
end: end
|
||||||
|
allDay: allDay
|
||||||
|
, true # make the event "stick"
|
||||||
|
return
|
||||||
|
|
||||||
|
calendar.fullCalendar "unselect"
|
||||||
|
return
|
||||||
|
|
||||||
|
eventClick: (calEvent, jsEvent, view) ->
|
||||||
|
|
||||||
|
#display a modal
|
||||||
|
modal = "<div class=\"modal fade\">\t\t\t <div class=\"modal-dialog\">\t\t\t <div class=\"modal-content\">\t\t\t\t <div class=\"modal-body\">\t\t\t\t <button type=\"button\" class=\"close\" data-dismiss=\"modal\" style=\"margin-top:-10px;\">×</button>\t\t\t\t <form class=\"no-margin\">\t\t\t\t\t <label>Change event name </label>\t\t\t\t\t <input class=\"middle\" autocomplete=\"off\" type=\"text\" value=\"" + calEvent.title + "\" />\t\t\t\t\t <button type=\"submit\" class=\"btn btn-sm btn-success\"><i class=\"ace-icon fa fa-check\"></i> Save</button>\t\t\t\t </form>\t\t\t\t </div>\t\t\t\t <div class=\"modal-footer\">\t\t\t\t\t<button type=\"button\" class=\"btn btn-sm btn-danger\" data-action=\"delete\"><i class=\"ace-icon fa fa-trash-o\"></i> Delete Event</button>\t\t\t\t\t<button type=\"button\" class=\"btn btn-sm\" data-dismiss=\"modal\"><i class=\"ace-icon fa fa-times\"></i> Cancel</button>\t\t\t\t </div>\t\t\t </div>\t\t\t </div>\t\t\t</div>"
|
||||||
|
modal = $(modal).appendTo("body")
|
||||||
|
modal.find("form").on "submit", (ev) ->
|
||||||
|
ev.preventDefault()
|
||||||
|
calEvent.title = $(this).find("input[type=text]").val()
|
||||||
|
calendar.fullCalendar "updateEvent", calEvent
|
||||||
|
modal.modal "hide"
|
||||||
|
return
|
||||||
|
|
||||||
|
modal.find("button[data-action=delete]").on "click", ->
|
||||||
|
calendar.fullCalendar "removeEvents", (ev) ->
|
||||||
|
ev._id is calEvent._id
|
||||||
|
|
||||||
|
modal.modal "hide"
|
||||||
|
return
|
||||||
|
|
||||||
|
modal.modal("show").on "hidden", ->
|
||||||
|
modal.remove()
|
||||||
|
return
|
||||||
|
|
||||||
|
return
|
||||||
|
)
|
||||||
|
true
|
||||||
|
|
||||||
|
ScheduleView
|
||||||
|
|
||||||
|
|
||||||
125
static/js/app/views/schedule/scheduleView.js
Normal file
125
static/js/app/views/schedule/scheduleView.js
Normal file
@@ -0,0 +1,125 @@
|
|||||||
|
// Generated by CoffeeScript 1.4.0
|
||||||
|
(function() {
|
||||||
|
var __hasProp = {}.hasOwnProperty,
|
||||||
|
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
|
||||||
|
|
||||||
|
define(['app', 'vent', 'marionette', 'fullcalendar', 'text!/tpl/ScheduleView'], function(App, vent, Marionette, fullcalendar, Template) {
|
||||||
|
var ScheduleView;
|
||||||
|
ScheduleView = (function(_super) {
|
||||||
|
|
||||||
|
__extends(ScheduleView, _super);
|
||||||
|
|
||||||
|
function ScheduleView() {
|
||||||
|
return ScheduleView.__super__.constructor.apply(this, arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
ScheduleView.prototype.template = _.template(Template);
|
||||||
|
|
||||||
|
ScheduleView.prototype.onShow = function() {
|
||||||
|
var calendar, d, date, m, y;
|
||||||
|
$("#external-events div.external-event").each(function() {
|
||||||
|
var eventObject;
|
||||||
|
eventObject = {
|
||||||
|
title: $.trim($(this).text())
|
||||||
|
};
|
||||||
|
$(this).data("eventObject", eventObject);
|
||||||
|
$(this).draggable({
|
||||||
|
zIndex: 999,
|
||||||
|
revert: true,
|
||||||
|
revertDuration: 0
|
||||||
|
});
|
||||||
|
});
|
||||||
|
date = new Date();
|
||||||
|
d = date.getDate();
|
||||||
|
m = date.getMonth();
|
||||||
|
y = date.getFullYear();
|
||||||
|
return calendar = $("#calendar").fullCalendar({
|
||||||
|
buttonText: {
|
||||||
|
prev: "<i class=\"ace-icon fa fa-chevron-left\"></i>",
|
||||||
|
next: "<i class=\"ace-icon fa fa-chevron-right\"></i>"
|
||||||
|
},
|
||||||
|
header: {
|
||||||
|
left: "prev,next today",
|
||||||
|
center: "title",
|
||||||
|
right: "month,agendaWeek,agendaDay"
|
||||||
|
},
|
||||||
|
events: [
|
||||||
|
{
|
||||||
|
title: "All Day Event",
|
||||||
|
start: new Date(y, m, 1),
|
||||||
|
className: "label-important"
|
||||||
|
}, {
|
||||||
|
title: "Long Event",
|
||||||
|
start: new Date(y, m, d - 5),
|
||||||
|
end: new Date(y, m, d - 2),
|
||||||
|
className: "label-success"
|
||||||
|
}, {
|
||||||
|
title: "Some Event",
|
||||||
|
start: new Date(y, m, d - 3, 16, 0),
|
||||||
|
allDay: false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
editable: true,
|
||||||
|
droppable: true,
|
||||||
|
drop: function(date, allDay) {
|
||||||
|
var $extraEventClass, copiedEventObject, originalEventObject;
|
||||||
|
originalEventObject = $(this).data("eventObject");
|
||||||
|
$extraEventClass = $(this).attr("data-class");
|
||||||
|
copiedEventObject = $.extend({}, originalEventObject);
|
||||||
|
copiedEventObject.start = date;
|
||||||
|
copiedEventObject.allDay = allDay;
|
||||||
|
if ($extraEventClass) {
|
||||||
|
copiedEventObject["className"] = [$extraEventClass];
|
||||||
|
}
|
||||||
|
$("#calendar").fullCalendar("renderEvent", copiedEventObject, true);
|
||||||
|
if ($("#drop-remove").is(":checked")) {
|
||||||
|
$(this).remove();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
selectable: true,
|
||||||
|
selectHelper: true,
|
||||||
|
select: function(start, end, allDay) {
|
||||||
|
bootbox.prompt("New Event Title:", function(title) {
|
||||||
|
if (title !== null) {
|
||||||
|
calendar.fullCalendar("renderEvent", {
|
||||||
|
title: title,
|
||||||
|
start: start,
|
||||||
|
end: end,
|
||||||
|
allDay: allDay
|
||||||
|
}, true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
calendar.fullCalendar("unselect");
|
||||||
|
},
|
||||||
|
eventClick: function(calEvent, jsEvent, view) {
|
||||||
|
var modal;
|
||||||
|
modal = "<div class=\"modal fade\">\t\t\t <div class=\"modal-dialog\">\t\t\t <div class=\"modal-content\">\t\t\t\t <div class=\"modal-body\">\t\t\t\t <button type=\"button\" class=\"close\" data-dismiss=\"modal\" style=\"margin-top:-10px;\">×</button>\t\t\t\t <form class=\"no-margin\">\t\t\t\t\t <label>Change event name </label>\t\t\t\t\t <input class=\"middle\" autocomplete=\"off\" type=\"text\" value=\"" + calEvent.title + "\" />\t\t\t\t\t <button type=\"submit\" class=\"btn btn-sm btn-success\"><i class=\"ace-icon fa fa-check\"></i> Save</button>\t\t\t\t </form>\t\t\t\t </div>\t\t\t\t <div class=\"modal-footer\">\t\t\t\t\t<button type=\"button\" class=\"btn btn-sm btn-danger\" data-action=\"delete\"><i class=\"ace-icon fa fa-trash-o\"></i> Delete Event</button>\t\t\t\t\t<button type=\"button\" class=\"btn btn-sm\" data-dismiss=\"modal\"><i class=\"ace-icon fa fa-times\"></i> Cancel</button>\t\t\t\t </div>\t\t\t </div>\t\t\t </div>\t\t\t</div>";
|
||||||
|
modal = $(modal).appendTo("body");
|
||||||
|
modal.find("form").on("submit", function(ev) {
|
||||||
|
ev.preventDefault();
|
||||||
|
calEvent.title = $(this).find("input[type=text]").val();
|
||||||
|
calendar.fullCalendar("updateEvent", calEvent);
|
||||||
|
modal.modal("hide");
|
||||||
|
});
|
||||||
|
modal.find("button[data-action=delete]").on("click", function() {
|
||||||
|
calendar.fullCalendar("removeEvents", function(ev) {
|
||||||
|
return ev._id === calEvent._id;
|
||||||
|
});
|
||||||
|
modal.modal("hide");
|
||||||
|
});
|
||||||
|
modal.modal("show").on("hidden", function() {
|
||||||
|
modal.remove();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
true;
|
||||||
|
|
||||||
|
return ScheduleView;
|
||||||
|
|
||||||
|
})(Marionette.ItemView);
|
||||||
|
return ScheduleView;
|
||||||
|
});
|
||||||
|
|
||||||
|
}).call(this);
|
||||||
@@ -5,6 +5,7 @@ requirejs.config({
|
|||||||
paths: {
|
paths: {
|
||||||
site: 'app/site',
|
site: 'app/site',
|
||||||
jquery: 'lib/jquery',
|
jquery: 'lib/jquery',
|
||||||
|
'jquery-ui': 'lib/ace/uncompressed/jquery-ui-1.10.3.custom',
|
||||||
backbone: 'lib/backbone',
|
backbone: 'lib/backbone',
|
||||||
'backbone-associations': 'lib/backbone.associations',
|
'backbone-associations': 'lib/backbone.associations',
|
||||||
'backbone.syphon': 'lib/backbone.syphon',
|
'backbone.syphon': 'lib/backbone.syphon',
|
||||||
@@ -26,6 +27,7 @@ requirejs.config({
|
|||||||
wysiwyg: 'lib/ace/uncompressed/bootstrap-wysiwyg',
|
wysiwyg: 'lib/ace/uncompressed/bootstrap-wysiwyg',
|
||||||
wizard: 'lib/ace/uncompressed/fuelux/fuelux.wizard',
|
wizard: 'lib/ace/uncompressed/fuelux/fuelux.wizard',
|
||||||
dropzone: 'lib/ace/uncompressed/dropzone',
|
dropzone: 'lib/ace/uncompressed/dropzone',
|
||||||
|
fullcalendar: 'lib/ace/uncompressed/fullcalendar',
|
||||||
'ace-editable': 'lib/ace/uncompressed/x-editable/ace-editable',
|
'ace-editable': 'lib/ace/uncompressed/x-editable/ace-editable',
|
||||||
'bootstrap-editable': 'lib/ace/uncompressed/x-editable/bootstrap-editable',
|
'bootstrap-editable': 'lib/ace/uncompressed/x-editable/bootstrap-editable',
|
||||||
'facebook': '//connect.facebook.net/en_US/all',
|
'facebook': '//connect.facebook.net/en_US/all',
|
||||||
@@ -82,6 +84,10 @@ requirejs.config({
|
|||||||
'facebook': {
|
'facebook': {
|
||||||
exports: 'FB'
|
exports: 'FB'
|
||||||
},
|
},
|
||||||
|
'fullcalendar': {
|
||||||
|
exports: 'fullCalendar',
|
||||||
|
deps: ['jquery', 'jquery-ui']
|
||||||
|
},
|
||||||
'ace': {
|
'ace': {
|
||||||
exports: 'ace',
|
exports: 'ace',
|
||||||
deps: ['jquery', 'lib/ace/uncompressed/ace-elements', 'lib/ace/uncompressed/ace-extra']
|
deps: ['jquery', 'lib/ace/uncompressed/ace-elements', 'lib/ace/uncompressed/ace-extra']
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
<link rel="stylesheet" href="{% static "css/bootstrap.css" %}"/>
|
<link rel="stylesheet" href="{% static "css/bootstrap.css" %}"/>
|
||||||
<link rel="stylesheet" href="{% static "css/jasny-bootstrap.css" %}">
|
<link rel="stylesheet" href="{% static "css/jasny-bootstrap.css" %}">
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="{% static "css/ace/fullcalendar.css" %}"/>
|
||||||
<link rel="stylesheet" href="{% static "css/ace/dropzone.css" %}"/>
|
<link rel="stylesheet" href="{% static "css/ace/dropzone.css" %}"/>
|
||||||
<link rel="stylesheet" href="{% static "css/ace/uncompressed/ace.css" %}"/>
|
<link rel="stylesheet" href="{% static "css/ace/uncompressed/ace.css" %}"/>
|
||||||
<link rel="stylesheet" href="{% static "css/ace/uncompressed/ace-skins.css" %}"/>
|
<link rel="stylesheet" href="{% static "css/ace/uncompressed/ace-skins.css" %}"/>
|
||||||
|
|||||||
1
templates/views/EmptyTemplate.html
Normal file
1
templates/views/EmptyTemplate.html
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<h1>Add some stuff!!</h1>
|
||||||
@@ -1,2 +1 @@
|
|||||||
<ul id="mix-list-container-ul" class="mix-listing audio-listing"></ul>
|
<ul id="mix-list-container-ul" class="mix-listing audio-listing"></ul>
|
||||||
<div id="#mix-empty-view">No items to display</div>
|
|
||||||
61
templates/views/ScheduleView.html
Normal file
61
templates/views/ScheduleView.html
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<div class="space"></div>
|
||||||
|
|
||||||
|
<div id="calendar"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-sm-3">
|
||||||
|
<div class="widget-box transparent">
|
||||||
|
<div class="widget-header">
|
||||||
|
<h4>Draggable events</h4>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="widget-body">
|
||||||
|
<div class="widget-main no-padding">
|
||||||
|
<div id="external-events">
|
||||||
|
<div class="external-event label-grey" data-class="label-grey">
|
||||||
|
<i class="ace-icon fa fa-arrows"></i>
|
||||||
|
My Event 1
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="external-event label-success" data-class="label-success">
|
||||||
|
<i class="ace-icon fa fa-arrows"></i>
|
||||||
|
My Event 2
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="external-event label-danger" data-class="label-danger">
|
||||||
|
<i class="ace-icon fa fa-arrows"></i>
|
||||||
|
My Event 3
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="external-event label-purple" data-class="label-purple">
|
||||||
|
<i class="ace-icon fa fa-arrows"></i>
|
||||||
|
My Event 4
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="external-event label-yellow" data-class="label-yellow">
|
||||||
|
<i class="ace-icon fa fa-arrows"></i>
|
||||||
|
My Event 5
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="external-event label-pink" data-class="label-pink">
|
||||||
|
<i class="ace-icon fa fa-arrows"></i>
|
||||||
|
My Event 6
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="external-event label-info" data-class="label-info">
|
||||||
|
<i class="ace-icon fa fa-arrows"></i>
|
||||||
|
My Event 7
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<label>
|
||||||
|
<input type="checkbox" class="ace ace-checkbox" id="drop-remove"/>
|
||||||
|
<span class="lbl"> Remove after drop</span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
Reference in New Issue
Block a user