From 254c6924a644a3fa4c39d28a06d836bbad4c4a63 Mon Sep 17 00:00:00 2001 From: Sanj Date: Fri, 31 Aug 2012 15:57:50 +0530 Subject: [PATCH] add imagestore code / model modification / form --- itf/imagestore/__init__.py | 0 itf/imagestore/admin.py | 36 ++ itf/imagestore/context_processors.py | 29 ++ itf/imagestore/forms.py | 36 ++ itf/imagestore/imagestore_cms/__init__.py | 5 + itf/imagestore/imagestore_cms/cms_app.py | 15 + itf/imagestore/imagestore_cms/cms_plugins.py | 53 +++ .../imagestore_cms/migrations/0001_initial.py | 112 +++++++ .../migrations/0002_add_carusel.py | 121 +++++++ .../migrations/0003_more_carousel_options.py | 137 ++++++++ .../migrations/0004_add_carousel_sizes.py | 135 ++++++++ ...d_imagestorealbumcarousel_template_file.py | 210 ++++++++++++ .../imagestore_cms/migrations/__init__.py | 0 itf/imagestore/imagestore_cms/models.py | 21 ++ itf/imagestore/imagestore_cms/urls.py | 11 + .../locale/pt/LC_MESSAGES/django.mo | Bin 0 -> 3268 bytes .../locale/pt/LC_MESSAGES/django.po | 293 ++++++++++++++++ .../locale/ru/LC_MESSAGES/django.mo | Bin 0 -> 4123 bytes .../locale/ru/LC_MESSAGES/django.po | 312 ++++++++++++++++++ itf/imagestore/migrations/0001_initial.py | 78 +++++ itf/imagestore/migrations/0002_removeslug.py | 48 +++ itf/imagestore/migrations/0003_adduser.py | 85 +++++ itf/imagestore/migrations/0004_nonullorder.py | 85 +++++ itf/imagestore/migrations/0005_addalbum.py | 98 ++++++ .../migrations/0006_addcreatedupdated.py | 106 ++++++ itf/imagestore/migrations/0007_albumfix.py | 131 ++++++++ itf/imagestore/migrations/0008_permissions.py | 93 ++++++ itf/imagestore/migrations/0009_limits.py | 89 +++++ itf/imagestore/migrations/0010_addplace.py | 172 ++++++++++ .../migrations/0011_add_mass_upload.py | 98 ++++++ itf/imagestore/migrations/0012_add_order.py | 92 ++++++ .../migrations/0013_fix_album_title_length.py | 92 ++++++ .../migrations/0014_fix_album_name_length.py | 92 ++++++ itf/imagestore/migrations/__init__.py | 5 + itf/imagestore/models/__init__.py | 19 ++ itf/imagestore/models/album.py | 21 ++ itf/imagestore/models/bases/__init__.py | 5 + itf/imagestore/models/bases/album.py | 73 ++++ itf/imagestore/models/bases/image.py | 100 ++++++ itf/imagestore/models/image.py | 15 + itf/imagestore/models/upload.py | 87 +++++ itf/imagestore/static/imagestore.css | 107 ++++++ .../cms/plugins/imagestore_album.html | 23 ++ .../plugins/imagestore_album_carousel.html | 1 + .../imagestore_album_carousel_base.html | 28 ++ .../templates/imagestore/album_delete.html | 14 + .../templates/imagestore/album_list.html | 70 ++++ itf/imagestore/templates/imagestore/base.html | 43 +++ .../imagestore/forms/album_form.html | 33 ++ .../imagestore/forms/image_form.html | 32 ++ .../templates/imagestore/image-href.html | 9 + .../templates/imagestore/image-list.html | 15 + .../templates/imagestore/image-scope.html | 16 + .../templates/imagestore/image.html | 88 +++++ .../imagestore/image_confirm_delete.html | 14 + .../templates/imagestore/image_delete.html | 14 + .../templates/imagestore/image_list.html | 60 ++++ .../templates/imagestore/pagination.html | 26 ++ .../templates/imagestore/pphoto.html | 20 ++ .../templates/imagestore/tag-cloud.html | 12 + itf/imagestore/templates/imagestore/tag.html | 21 ++ .../templates/imagestore/user_info.html | 19 ++ itf/imagestore/tests.py | 178 ++++++++++ itf/imagestore/urls.py | 43 +++ itf/imagestore/utils.py | 68 ++++ itf/imagestore/views.py | 241 ++++++++++++++ itf/itfprofiles/forms.py | 7 +- itf/itfprofiles/models.py | 11 +- itf/settings.py | 1 + 69 files changed, 4416 insertions(+), 8 deletions(-) create mode 100644 itf/imagestore/__init__.py create mode 100644 itf/imagestore/admin.py create mode 100644 itf/imagestore/context_processors.py create mode 100644 itf/imagestore/forms.py create mode 100644 itf/imagestore/imagestore_cms/__init__.py create mode 100644 itf/imagestore/imagestore_cms/cms_app.py create mode 100644 itf/imagestore/imagestore_cms/cms_plugins.py create mode 100644 itf/imagestore/imagestore_cms/migrations/0001_initial.py create mode 100644 itf/imagestore/imagestore_cms/migrations/0002_add_carusel.py create mode 100644 itf/imagestore/imagestore_cms/migrations/0003_more_carousel_options.py create mode 100644 itf/imagestore/imagestore_cms/migrations/0004_add_carousel_sizes.py create mode 100644 itf/imagestore/imagestore_cms/migrations/0005_auto__add_field_imagestorealbumcarousel_template_file.py create mode 100644 itf/imagestore/imagestore_cms/migrations/__init__.py create mode 100644 itf/imagestore/imagestore_cms/models.py create mode 100644 itf/imagestore/imagestore_cms/urls.py create mode 100644 itf/imagestore/locale/pt/LC_MESSAGES/django.mo create mode 100644 itf/imagestore/locale/pt/LC_MESSAGES/django.po create mode 100644 itf/imagestore/locale/ru/LC_MESSAGES/django.mo create mode 100644 itf/imagestore/locale/ru/LC_MESSAGES/django.po create mode 100644 itf/imagestore/migrations/0001_initial.py create mode 100644 itf/imagestore/migrations/0002_removeslug.py create mode 100644 itf/imagestore/migrations/0003_adduser.py create mode 100644 itf/imagestore/migrations/0004_nonullorder.py create mode 100644 itf/imagestore/migrations/0005_addalbum.py create mode 100644 itf/imagestore/migrations/0006_addcreatedupdated.py create mode 100644 itf/imagestore/migrations/0007_albumfix.py create mode 100644 itf/imagestore/migrations/0008_permissions.py create mode 100644 itf/imagestore/migrations/0009_limits.py create mode 100644 itf/imagestore/migrations/0010_addplace.py create mode 100644 itf/imagestore/migrations/0011_add_mass_upload.py create mode 100644 itf/imagestore/migrations/0012_add_order.py create mode 100644 itf/imagestore/migrations/0013_fix_album_title_length.py create mode 100644 itf/imagestore/migrations/0014_fix_album_name_length.py create mode 100644 itf/imagestore/migrations/__init__.py create mode 100644 itf/imagestore/models/__init__.py create mode 100644 itf/imagestore/models/album.py create mode 100644 itf/imagestore/models/bases/__init__.py create mode 100644 itf/imagestore/models/bases/album.py create mode 100644 itf/imagestore/models/bases/image.py create mode 100644 itf/imagestore/models/image.py create mode 100644 itf/imagestore/models/upload.py create mode 100644 itf/imagestore/static/imagestore.css create mode 100644 itf/imagestore/templates/cms/plugins/imagestore_album.html create mode 100644 itf/imagestore/templates/cms/plugins/imagestore_album_carousel.html create mode 100644 itf/imagestore/templates/cms/plugins/imagestore_album_carousel_base.html create mode 100644 itf/imagestore/templates/imagestore/album_delete.html create mode 100644 itf/imagestore/templates/imagestore/album_list.html create mode 100644 itf/imagestore/templates/imagestore/base.html create mode 100644 itf/imagestore/templates/imagestore/forms/album_form.html create mode 100644 itf/imagestore/templates/imagestore/forms/image_form.html create mode 100644 itf/imagestore/templates/imagestore/image-href.html create mode 100644 itf/imagestore/templates/imagestore/image-list.html create mode 100644 itf/imagestore/templates/imagestore/image-scope.html create mode 100644 itf/imagestore/templates/imagestore/image.html create mode 100644 itf/imagestore/templates/imagestore/image_confirm_delete.html create mode 100644 itf/imagestore/templates/imagestore/image_delete.html create mode 100644 itf/imagestore/templates/imagestore/image_list.html create mode 100644 itf/imagestore/templates/imagestore/pagination.html create mode 100644 itf/imagestore/templates/imagestore/pphoto.html create mode 100644 itf/imagestore/templates/imagestore/tag-cloud.html create mode 100644 itf/imagestore/templates/imagestore/tag.html create mode 100644 itf/imagestore/templates/imagestore/user_info.html create mode 100644 itf/imagestore/tests.py create mode 100644 itf/imagestore/urls.py create mode 100644 itf/imagestore/utils.py create mode 100644 itf/imagestore/views.py diff --git a/itf/imagestore/__init__.py b/itf/imagestore/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/itf/imagestore/admin.py b/itf/imagestore/admin.py new file mode 100644 index 0000000..ecdb334 --- /dev/null +++ b/itf/imagestore/admin.py @@ -0,0 +1,36 @@ +from django.contrib import admin +from imagestore.models import Image, Album, AlbumUpload +from sorl.thumbnail.admin import AdminImageMixin, AdminInlineImageMixin +from django.conf import settings + +class InlineImageAdmin(AdminInlineImageMixin, admin.TabularInline): + model = Image + fieldsets = ((None, {'fields': ['image', 'user', 'title', 'order', 'tags', 'album']}),) + raw_id_fields = ('user', ) + extra = 0 + +class AlbumAdmin(admin.ModelAdmin): + fieldsets = ((None, {'fields': ['name', 'user', 'is_public', 'order']}),) + list_display = ('name', 'admin_thumbnail','user', 'created', 'updated', 'is_public', 'order') + list_editable = ('order', ) + inlines = [InlineImageAdmin] + +admin.site.register(Album, AlbumAdmin) + +class ImageAdmin(admin.ModelAdmin): + fieldsets = ((None, {'fields': ['user', 'title', 'image', 'description', 'order', 'tags', 'album']}),) + list_display = ('admin_thumbnail', 'user', 'order', 'album', 'title') + raw_id_fields = ('user', ) + list_filter = ('album', ) + +class AlbumUploadAdmin(admin.ModelAdmin): + def has_change_permission(self, request, obj=None): + return False + +IMAGE_MODEL = getattr(settings, 'IMAGESTORE_IMAGE_MODEL', None) +if not IMAGE_MODEL: + admin.site.register(Image, ImageAdmin) + +ALBUM_MODEL = getattr(settings, 'IMAGESTORE_ALBUM_MODEL', None) +if not ALBUM_MODEL: + admin.site.register(AlbumUpload, AlbumUploadAdmin) diff --git a/itf/imagestore/context_processors.py b/itf/imagestore/context_processors.py new file mode 100644 index 0000000..089d180 --- /dev/null +++ b/itf/imagestore/context_processors.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python +# vim:fileencoding=utf-8 +from django.core.urlresolvers import reverse, NoReverseMatch +from django.conf import settings +from utils import get_model_string +from imagestore.models import image_applabel, image_classname +from imagestore.models import album_applabel, album_classname + +def imagestore_processor(request): + template = getattr(settings, 'IMAGESTORE_TEMPLATE', False) + ret = { + 'IMAGESTORE_SHOW_USER': getattr(settings, 'IMAGESTORE_SHOW_USER', True), + 'IMAGESTORE_SHOW_TAGS': getattr(settings, 'IMAGESTORE_SHOW_TAGS', True), + 'IMAGESTORE_MODEL_STRING': get_model_string('Image'), + 'IMAGESTORE_LOAD_CSS': getattr(settings, 'IMAGESTORE_LOAD_CSS', True), + } + try: + ret['imagestore_index_url'] = reverse('imagestore:index') + except NoReverseMatch: #Bastard django-cms from hell!!!!111 + pass + if template: + ret['IMAGESTORE_TEMPLATE'] = template + ret['imagestore_perms'] = { + 'add_image': request.user.has_perm('%s.add_%s' % (image_applabel, image_classname)), + 'add_album': request.user.has_perm('%s.add_%s' % (album_applabel, album_classname)), + } + return ret + + \ No newline at end of file diff --git a/itf/imagestore/forms.py b/itf/imagestore/forms.py new file mode 100644 index 0000000..2081f32 --- /dev/null +++ b/itf/imagestore/forms.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python +# vim:fileencoding=utf-8 + +__author__ = 'zeus' + +from django import forms +from models import Image, Album +from django.utils.translation import ugettext_lazy as _ +from utils import load_class +from django.conf import settings + +class ImageForm(forms.ModelForm): + class Meta(object): + model = Image + exclude = ('user', 'order') + + description = forms.CharField(widget=forms.Textarea(attrs={'rows': 2, 'cols': 19}), required=False, + label=_('Description')) + + def __init__(self, user, *args, **kwargs): + super(ImageForm, self).__init__(*args, **kwargs) + self.fields['album'].queryset = Album.objects.filter(user=user) + self.fields['album'].required = True + + +class AlbumForm(forms.ModelForm): + class Meta(object): + model = Album + exclude = ('user', 'created', 'updated') + + def __init__(self, *args, **kwargs): + super(AlbumForm, self).__init__(*args, **kwargs) + if 'instance' in kwargs and kwargs['instance']: + self.fields['head'].queryset = Image.objects.filter(album=kwargs['instance']) + else: + self.fields['head'].widget = forms.HiddenInput() diff --git a/itf/imagestore/imagestore_cms/__init__.py b/itf/imagestore/imagestore_cms/__init__.py new file mode 100644 index 0000000..04ccd4b --- /dev/null +++ b/itf/imagestore/imagestore_cms/__init__.py @@ -0,0 +1,5 @@ +#!/usr/bin/env python +# vim:fileencoding=utf-8 + +__author__ = 'zeus' + \ No newline at end of file diff --git a/itf/imagestore/imagestore_cms/cms_app.py b/itf/imagestore/imagestore_cms/cms_app.py new file mode 100644 index 0000000..0b81e01 --- /dev/null +++ b/itf/imagestore/imagestore_cms/cms_app.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python +# vim:fileencoding=utf-8 + +__author__ = 'zeus' + +from cms.app_base import CMSApp +from cms.apphook_pool import apphook_pool +from django.utils.translation import ugettext_lazy as _ + +class ImagestoreApp(CMSApp): + name = _("Imagestore App") # give your app a name, this is required + urls = ["imagestore.imagestore_cms.urls"] # link your app to url configuration(s) + +apphook_pool.register(ImagestoreApp) # register your app + \ No newline at end of file diff --git a/itf/imagestore/imagestore_cms/cms_plugins.py b/itf/imagestore/imagestore_cms/cms_plugins.py new file mode 100644 index 0000000..c4b97b2 --- /dev/null +++ b/itf/imagestore/imagestore_cms/cms_plugins.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python +# vim:fileencoding=utf-8 + +__author__ = 'zeus' + +from cms.plugin_base import CMSPluginBase +from cms.plugin_pool import plugin_pool +from models import ImagestoreAlbumPtr, ImagestoreAlbumCarousel +from django.utils.translation import ugettext_lazy as _ +from django.conf import settings + +class AlbumPlugin(CMSPluginBase): + model = ImagestoreAlbumPtr + name = _('Album') + render_template = "cms/plugins/imagestore_album.html" + text_enabled = True + + def render(self, context, instance, placeholder): + context.update({'album': instance.album}) + return context + + +class AlbumCarouselPlugin(CMSPluginBase): + model = ImagestoreAlbumCarousel + name = _('Album as carousel') + render_template = "cms/plugins/imagestore_album_carousel.html" + text_enabled = True + + def render(self, context, instance, placeholder): + + # default carousel template in the settings file + carousel_template = getattr(settings, 'IMAGESTORE_CAROUSEL_TEMPLATE', None) + + if carousel_template: + self.render_template = carousel_template + + if instance.template_file: + self.render_template = instance.template_file + else: + if carousel_template: + instance.template_file = carousel_template + else: + instance.template_file = self.render_template + instance.save() + + images = instance.album.images.all() + if instance.limit: + images = images[:instance.limit] + context.update({'images': images, 'carousel': instance}) + return context + +plugin_pool.register_plugin(AlbumCarouselPlugin) +plugin_pool.register_plugin(AlbumPlugin) \ No newline at end of file diff --git a/itf/imagestore/imagestore_cms/migrations/0001_initial.py b/itf/imagestore/imagestore_cms/migrations/0001_initial.py new file mode 100644 index 0000000..d3be993 --- /dev/null +++ b/itf/imagestore/imagestore_cms/migrations/0001_initial.py @@ -0,0 +1,112 @@ +# encoding: utf-8 +import 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 'ImagestoreAlbumPtr' + db.create_table('cmsplugin_imagestorealbumptr', ( + ('cmsplugin_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['cms.CMSPlugin'], unique=True, primary_key=True)), + ('album', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['imagestore.Album'])), + )) + db.send_create_signal('imagestore_cms', ['ImagestoreAlbumPtr']) + + + def backwards(self, orm): + + # Deleting model 'ImagestoreAlbumPtr' + db.delete_table('cmsplugin_imagestorealbumptr') + + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + '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': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + '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', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + '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', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'cms.cmsplugin': { + 'Meta': {'object_name': 'CMSPlugin'}, + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'language': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}), + 'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.CMSPlugin']", 'null': 'True', 'blank': 'True'}), + 'placeholder': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.Placeholder']", 'null': 'True'}), + 'plugin_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}), + 'position': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}) + }, + 'cms.placeholder': { + 'Meta': {'object_name': 'Placeholder'}, + 'default_width': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}) + }, + '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'}), + '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'}) + }, + 'imagestore.album': { + 'Meta': {'ordering': "('created', 'name')", 'object_name': 'Album'}, + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'head': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'head_of'", 'null': 'True', 'to': "orm['imagestore.Image']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '20'}), + 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'albums'", 'null': 'True', 'to': "orm['auth.User']"}) + }, + 'imagestore.image': { + 'Meta': {'ordering': "('order', 'id')", 'object_name': 'Image'}, + 'album': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'images'", 'null': 'True', 'to': "orm['imagestore.Album']"}), + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'image': ('sorl.thumbnail.fields.ImageField', [], {'max_length': '100'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'tags': ('tagging.fields.TagField', [], {}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}), + 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'null': 'True', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'images'", 'null': 'True', 'to': "orm['auth.User']"}) + }, + 'imagestore_cms.imagestorealbumptr': { + 'Meta': {'object_name': 'ImagestoreAlbumPtr', 'db_table': "'cmsplugin_imagestorealbumptr'", '_ormbases': ['cms.CMSPlugin']}, + 'album': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['imagestore.Album']"}), + 'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}) + } + } + + complete_apps = ['imagestore_cms'] diff --git a/itf/imagestore/imagestore_cms/migrations/0002_add_carusel.py b/itf/imagestore/imagestore_cms/migrations/0002_add_carusel.py new file mode 100644 index 0000000..5cdd9c5 --- /dev/null +++ b/itf/imagestore/imagestore_cms/migrations/0002_add_carusel.py @@ -0,0 +1,121 @@ +# encoding: utf-8 +import 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 'ImagestoreAlbumCarusel' + db.create_table('cmsplugin_imagestorealbumcarusel', ( + ('cmsplugin_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['cms.CMSPlugin'], unique=True, primary_key=True)), + ('album', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['imagestore.Album'])), + ('width', self.gf('django.db.models.fields.IntegerField')(default=200)), + ('limit', self.gf('django.db.models.fields.IntegerField')(null=True, blank=True)), + )) + db.send_create_signal('imagestore_cms', ['ImagestoreAlbumCarusel']) + + + def backwards(self, orm): + + # Deleting model 'ImagestoreAlbumCarusel' + db.delete_table('cmsplugin_imagestorealbumcarusel') + + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + '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': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + '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', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + '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', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'cms.cmsplugin': { + 'Meta': {'object_name': 'CMSPlugin'}, + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'language': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}), + 'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.CMSPlugin']", 'null': 'True', 'blank': 'True'}), + 'placeholder': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.Placeholder']", 'null': 'True'}), + 'plugin_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}), + 'position': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}) + }, + 'cms.placeholder': { + 'Meta': {'object_name': 'Placeholder'}, + 'default_width': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}) + }, + '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'}), + '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'}) + }, + 'imagestore.album': { + 'Meta': {'ordering': "('created', 'name')", 'object_name': 'Album'}, + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'head': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'head_of'", 'null': 'True', 'to': "orm['imagestore.Image']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '20'}), + 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'albums'", 'null': 'True', 'to': "orm['auth.User']"}) + }, + 'imagestore.image': { + 'Meta': {'ordering': "('order', 'id')", 'object_name': 'Image'}, + 'album': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'images'", 'null': 'True', 'to': "orm['imagestore.Album']"}), + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'image': ('sorl.thumbnail.fields.ImageField', [], {'max_length': '100'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'tags': ('tagging.fields.TagField', [], {}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}), + 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'null': 'True', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'images'", 'null': 'True', 'to': "orm['auth.User']"}) + }, + 'imagestore_cms.imagestorealbumcarusel': { + 'Meta': {'object_name': 'ImagestoreAlbumCarusel', 'db_table': "'cmsplugin_imagestorealbumcarusel'", '_ormbases': ['cms.CMSPlugin']}, + 'album': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['imagestore.Album']"}), + 'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}), + 'limit': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'width': ('django.db.models.fields.IntegerField', [], {'default': '200'}) + }, + 'imagestore_cms.imagestorealbumptr': { + 'Meta': {'object_name': 'ImagestoreAlbumPtr', 'db_table': "'cmsplugin_imagestorealbumptr'", '_ormbases': ['cms.CMSPlugin']}, + 'album': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['imagestore.Album']"}), + 'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}) + } + } + + complete_apps = ['imagestore_cms'] diff --git a/itf/imagestore/imagestore_cms/migrations/0003_more_carousel_options.py b/itf/imagestore/imagestore_cms/migrations/0003_more_carousel_options.py new file mode 100644 index 0000000..1b09fc1 --- /dev/null +++ b/itf/imagestore/imagestore_cms/migrations/0003_more_carousel_options.py @@ -0,0 +1,137 @@ +# encoding: utf-8 +import 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 'ImagestoreAlbumCarusel' + db.delete_table('cmsplugin_imagestorealbumcarusel') + + # Adding model 'ImagestoreAlbumCarousel' + db.create_table('cmsplugin_imagestorealbumcarousel', ( + ('cmsplugin_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['cms.CMSPlugin'], unique=True, primary_key=True)), + ('album', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['imagestore.Album'])), + ('width', self.gf('django.db.models.fields.IntegerField')(default=200)), + ('height', self.gf('django.db.models.fields.IntegerField')(default=200)), + ('skin', self.gf('django.db.models.fields.CharField')(default='jcarousel-skin-tango', max_length=100)), + ('limit', self.gf('django.db.models.fields.IntegerField')(null=True, blank=True)), + )) + db.send_create_signal('imagestore_cms', ['ImagestoreAlbumCarousel']) + + + def backwards(self, orm): + + # Adding model 'ImagestoreAlbumCarusel' + db.create_table('cmsplugin_imagestorealbumcarusel', ( + ('album', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['imagestore.Album'])), + ('limit', self.gf('django.db.models.fields.IntegerField')(null=True, blank=True)), + ('cmsplugin_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['cms.CMSPlugin'], unique=True, primary_key=True)), + ('width', self.gf('django.db.models.fields.IntegerField')(default=200)), + )) + db.send_create_signal('imagestore_cms', ['ImagestoreAlbumCarusel']) + + # Deleting model 'ImagestoreAlbumCarousel' + db.delete_table('cmsplugin_imagestorealbumcarousel') + + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + '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': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + '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', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + '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', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'cms.cmsplugin': { + 'Meta': {'object_name': 'CMSPlugin'}, + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'language': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}), + 'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.CMSPlugin']", 'null': 'True', 'blank': 'True'}), + 'placeholder': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.Placeholder']", 'null': 'True'}), + 'plugin_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}), + 'position': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}) + }, + 'cms.placeholder': { + 'Meta': {'object_name': 'Placeholder'}, + 'default_width': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}) + }, + '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'}), + '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'}) + }, + 'imagestore.album': { + 'Meta': {'ordering': "('created', 'name')", 'object_name': 'Album'}, + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'head': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'head_of'", 'null': 'True', 'to': "orm['imagestore.Image']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '20'}), + 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'albums'", 'null': 'True', 'to': "orm['auth.User']"}) + }, + 'imagestore.image': { + 'Meta': {'ordering': "('order', 'id')", 'object_name': 'Image'}, + 'album': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'images'", 'null': 'True', 'to': "orm['imagestore.Album']"}), + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'image': ('sorl.thumbnail.fields.ImageField', [], {'max_length': '100'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'tags': ('tagging.fields.TagField', [], {}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}), + 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'null': 'True', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'images'", 'null': 'True', 'to': "orm['auth.User']"}) + }, + 'imagestore_cms.imagestorealbumcarousel': { + 'Meta': {'object_name': 'ImagestoreAlbumCarousel', 'db_table': "'cmsplugin_imagestorealbumcarousel'", '_ormbases': ['cms.CMSPlugin']}, + 'album': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['imagestore.Album']"}), + 'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}), + 'height': ('django.db.models.fields.IntegerField', [], {'default': '200'}), + 'limit': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'skin': ('django.db.models.fields.CharField', [], {'default': "'jcarousel-skin-tango'", 'max_length': '100'}), + 'width': ('django.db.models.fields.IntegerField', [], {'default': '200'}) + }, + 'imagestore_cms.imagestorealbumptr': { + 'Meta': {'object_name': 'ImagestoreAlbumPtr', 'db_table': "'cmsplugin_imagestorealbumptr'", '_ormbases': ['cms.CMSPlugin']}, + 'album': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['imagestore.Album']"}), + 'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}) + } + } + + complete_apps = ['imagestore_cms'] diff --git a/itf/imagestore/imagestore_cms/migrations/0004_add_carousel_sizes.py b/itf/imagestore/imagestore_cms/migrations/0004_add_carousel_sizes.py new file mode 100644 index 0000000..43cb76c --- /dev/null +++ b/itf/imagestore/imagestore_cms/migrations/0004_add_carousel_sizes.py @@ -0,0 +1,135 @@ +# encoding: utf-8 +import 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 'ImagestoreAlbumCarousel.height' + db.delete_column('cmsplugin_imagestorealbumcarousel', 'height') + + # Deleting field 'ImagestoreAlbumCarousel.width' + db.delete_column('cmsplugin_imagestorealbumcarousel', 'width') + + # Adding field 'ImagestoreAlbumCarousel.size' + db.add_column('cmsplugin_imagestorealbumcarousel', 'size', self.gf('django.db.models.fields.CharField')(default='72x72', max_length=20), keep_default=False) + + # Adding field 'ImagestoreAlbumCarousel.full_size' + db.add_column('cmsplugin_imagestorealbumcarousel', 'full_size', self.gf('django.db.models.fields.CharField')(default='600x600', max_length=20), keep_default=False) + + + def backwards(self, orm): + + # Adding field 'ImagestoreAlbumCarousel.height' + db.add_column('cmsplugin_imagestorealbumcarousel', 'height', self.gf('django.db.models.fields.IntegerField')(default=200), keep_default=False) + + # Adding field 'ImagestoreAlbumCarousel.width' + db.add_column('cmsplugin_imagestorealbumcarousel', 'width', self.gf('django.db.models.fields.IntegerField')(default=200), keep_default=False) + + # Deleting field 'ImagestoreAlbumCarousel.size' + db.delete_column('cmsplugin_imagestorealbumcarousel', 'size') + + # Deleting field 'ImagestoreAlbumCarousel.full_size' + db.delete_column('cmsplugin_imagestorealbumcarousel', 'full_size') + + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + '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': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + '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', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + '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', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'cms.cmsplugin': { + 'Meta': {'object_name': 'CMSPlugin'}, + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'language': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}), + 'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.CMSPlugin']", 'null': 'True', 'blank': 'True'}), + 'placeholder': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.Placeholder']", 'null': 'True'}), + 'plugin_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}), + 'position': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}) + }, + 'cms.placeholder': { + 'Meta': {'object_name': 'Placeholder'}, + 'default_width': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}) + }, + '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'}), + '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'}) + }, + 'imagestore.album': { + 'Meta': {'ordering': "('created', 'name')", 'object_name': 'Album'}, + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'head': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'head_of'", 'null': 'True', 'to': "orm['imagestore.Image']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '20'}), + 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'albums'", 'null': 'True', 'to': "orm['auth.User']"}) + }, + 'imagestore.image': { + 'Meta': {'ordering': "('order', 'id')", 'object_name': 'Image'}, + 'album': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'images'", 'null': 'True', 'to': "orm['imagestore.Album']"}), + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'image': ('sorl.thumbnail.fields.ImageField', [], {'max_length': '100'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'tags': ('tagging.fields.TagField', [], {}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}), + 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'null': 'True', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'images'", 'null': 'True', 'to': "orm['auth.User']"}) + }, + 'imagestore_cms.imagestorealbumcarousel': { + 'Meta': {'object_name': 'ImagestoreAlbumCarousel', 'db_table': "'cmsplugin_imagestorealbumcarousel'", '_ormbases': ['cms.CMSPlugin']}, + 'album': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['imagestore.Album']"}), + 'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}), + 'full_size': ('django.db.models.fields.CharField', [], {'default': "'600x600'", 'max_length': '20'}), + 'limit': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'size': ('django.db.models.fields.CharField', [], {'default': "'72x72'", 'max_length': '20'}), + 'skin': ('django.db.models.fields.CharField', [], {'default': "'jcarousel-skin-tango'", 'max_length': '100'}) + }, + 'imagestore_cms.imagestorealbumptr': { + 'Meta': {'object_name': 'ImagestoreAlbumPtr', 'db_table': "'cmsplugin_imagestorealbumptr'", '_ormbases': ['cms.CMSPlugin']}, + 'album': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['imagestore.Album']"}), + 'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}) + } + } + + complete_apps = ['imagestore_cms'] diff --git a/itf/imagestore/imagestore_cms/migrations/0005_auto__add_field_imagestorealbumcarousel_template_file.py b/itf/imagestore/imagestore_cms/migrations/0005_auto__add_field_imagestorealbumcarousel_template_file.py new file mode 100644 index 0000000..232f475 --- /dev/null +++ b/itf/imagestore/imagestore_cms/migrations/0005_auto__add_field_imagestorealbumcarousel_template_file.py @@ -0,0 +1,210 @@ +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + +class Migration(SchemaMigration): + + def forwards(self, orm): + + # Adding field 'ImagestoreAlbumCarousel.template_file' + db.add_column('cmsplugin_imagestorealbumcarousel', 'template_file', self.gf('django.db.models.fields.CharField')(default='cms/plugins/imagestore_album_carousel.html', max_length=100), keep_default=False) + + + def backwards(self, orm): + + # Deleting field 'ImagestoreAlbumCarousel.template_file' + db.delete_column('cmsplugin_imagestorealbumcarousel', 'template_file') + + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + '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': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + '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', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + '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', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'cms.cmsplugin': { + 'Meta': {'object_name': 'CMSPlugin'}, + 'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'language': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}), + 'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.CMSPlugin']", 'null': 'True', 'blank': 'True'}), + 'placeholder': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.Placeholder']", 'null': 'True'}), + 'plugin_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}), + 'position': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}) + }, + 'cms.placeholder': { + 'Meta': {'object_name': 'Placeholder'}, + 'default_width': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}) + }, + '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'}), + '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'}) + }, + 'image.image': { + 'Meta': {'ordering': "('order', 'id')", 'object_name': 'Image', 'db_table': "'imagestore_image'"}, + 'album': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'images'", 'null': 'True', 'to': "orm['imagestore.Album']"}), + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'image': ('sorl.thumbnail.fields.ImageField', [], {'max_length': '100'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'place': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'images'", 'null': 'True', 'to': "orm['places.GeoPlace']"}), + 'tags': ('tagging.fields.TagField', [], {}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'null': 'True', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'images'", 'null': 'True', 'to': "orm['auth.User']"}) + }, + 'imagestore.album': { + 'Meta': {'ordering': "('created', 'name')", 'object_name': 'Album'}, + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'head': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'head_of'", 'null': 'True', 'to': "orm['image.Image']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'albums'", 'null': 'True', 'to': "orm['auth.User']"}) + }, + 'imagestore_cms.imagestorealbumcarousel': { + 'Meta': {'object_name': 'ImagestoreAlbumCarousel', 'db_table': "'cmsplugin_imagestorealbumcarousel'", '_ormbases': ['cms.CMSPlugin']}, + 'album': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['imagestore.Album']"}), + 'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}), + 'full_size': ('django.db.models.fields.CharField', [], {'default': "'600x600'", 'max_length': '20'}), + 'limit': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'size': ('django.db.models.fields.CharField', [], {'default': "'72x72'", 'max_length': '20'}), + 'skin': ('django.db.models.fields.CharField', [], {'default': "'jcarousel-skin-tango'", 'max_length': '100'}), + 'template_file': ('django.db.models.fields.CharField', [], {'default': "'cms/plugins/imagestore_album_carousel.html'", 'max_length': '100'}) + }, + 'imagestore_cms.imagestorealbumptr': { + 'Meta': {'object_name': 'ImagestoreAlbumPtr', 'db_table': "'cmsplugin_imagestorealbumptr'", '_ormbases': ['cms.CMSPlugin']}, + 'album': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['imagestore.Album']"}), + 'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}) + }, + 'places.geoplace': { + 'Meta': {'object_name': 'GeoPlace'}, + 'addional_info': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'address': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'imagestore_tag': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}), + 'latitude': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}), + 'longtitude': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}), + 'metro': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'minuses': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'near_objects': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'near_objects_rel_+'", 'null': 'True', 'to': "orm['places.GeoPlace']"}), + 'near_text': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}), + 'path_to': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'phone': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}), + 'pluses': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'private': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'tags': ('tagging.fields.TagField', [], {}), + 'topic': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['pybb.Topic']", 'null': 'True', 'blank': 'True'}), + 'topic_on_demand': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['places.PlaceType']", 'null': 'None', 'blank': 'None'}), + 'url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), + 'work_time': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}) + }, + 'places.placetype': { + 'Meta': {'object_name': 'PlaceType'}, + 'forum': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['pybb.Forum']", 'null': 'True', 'blank': 'True'}), + 'forum_user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}), + 'icon_style': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'name_plural': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'path_to_image': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}), + 'private': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50', 'db_index': 'True'}) + }, + 'pybb.category': { + 'Meta': {'ordering': "['position']", 'object_name': 'Category'}, + 'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '80'}), + 'position': ('django.db.models.fields.IntegerField', [], {'default': '0', 'blank': 'True'}) + }, + 'pybb.forum': { + 'Meta': {'ordering': "['position']", 'object_name': 'Forum'}, + 'category': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'forums'", 'to': "orm['pybb.Category']"}), + 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'headline': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'moderators': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '80'}), + 'position': ('django.db.models.fields.IntegerField', [], {'default': '0', 'blank': 'True'}), + 'post_count': ('django.db.models.fields.IntegerField', [], {'default': '0', 'blank': 'True'}), + 'readed_by': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'readed_forums'", 'symmetrical': 'False', 'through': "orm['pybb.ForumReadTracker']", 'to': "orm['auth.User']"}), + 'topic_count': ('django.db.models.fields.IntegerField', [], {'default': '0', 'blank': 'True'}), + 'updated': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}) + }, + 'pybb.forumreadtracker': { + 'Meta': {'object_name': 'ForumReadTracker'}, + 'forum': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['pybb.Forum']", 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'time_stamp': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + }, + 'pybb.topic': { + 'Meta': {'ordering': "['-created']", 'object_name': 'Topic'}, + 'closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), + 'forum': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'topics'", 'to': "orm['pybb.Forum']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'on_moderation': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'post_count': ('django.db.models.fields.IntegerField', [], {'default': '0', 'blank': 'True'}), + 'readed_by': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'readed_topics'", 'symmetrical': 'False', 'through': "orm['pybb.TopicReadTracker']", 'to': "orm['auth.User']"}), + 'sticky': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'subscribers': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'subscriptions'", 'blank': 'True', 'to': "orm['auth.User']"}), + 'updated': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}), + 'views': ('django.db.models.fields.IntegerField', [], {'default': '0', 'blank': 'True'}) + }, + 'pybb.topicreadtracker': { + 'Meta': {'object_name': 'TopicReadTracker'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'time_stamp': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'topic': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['pybb.Topic']", 'null': 'True', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + } + } + + complete_apps = ['imagestore_cms'] diff --git a/itf/imagestore/imagestore_cms/migrations/__init__.py b/itf/imagestore/imagestore_cms/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/itf/imagestore/imagestore_cms/models.py b/itf/imagestore/imagestore_cms/models.py new file mode 100644 index 0000000..c4d18d5 --- /dev/null +++ b/itf/imagestore/imagestore_cms/models.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python +# vim:fileencoding=utf-8 + +__author__ = 'zeus' + +from cms.models import CMSPlugin +from django.db import models +from imagestore.models import Album +from django.utils.translation import ugettext_lazy as _ +from django.conf import settings + +class ImagestoreAlbumPtr(CMSPlugin): + album = models.ForeignKey(Album, verbose_name=_('Album'), blank=False, null=False) + +class ImagestoreAlbumCarousel(CMSPlugin): + album = models.ForeignKey(Album, verbose_name=_('Album'), blank=False, null=False) + skin = models.CharField(max_length=100, verbose_name=_('Skin'), default='jcarousel-skin-tango') + limit = models.IntegerField(verbose_name=_('Image limit'), blank=True, null=True) + size = models.CharField(max_length=20, verbose_name=_('Thumbnail size'), default='72x72') + full_size = models.CharField(max_length=20, verbose_name=_('Full size view'), default='600x600') + template_file = models.CharField(max_length=100, verbose_name=_('Template file'), default=getattr(settings,'IMAGESTORE_CAROUSEL_TEMPLATE','cms/plugins/imagestore_album_carousel.html'), blank=True, null=True) \ No newline at end of file diff --git a/itf/imagestore/imagestore_cms/urls.py b/itf/imagestore/imagestore_cms/urls.py new file mode 100644 index 0000000..f386372 --- /dev/null +++ b/itf/imagestore/imagestore_cms/urls.py @@ -0,0 +1,11 @@ +#!/usr/bin/env python +# vim:fileencoding=utf-8 + +__author__ = 'zeus' + +from django.conf.urls.defaults import * +from imagestore.views import AlbumListView + +urlpatterns = patterns('', + url(r'^', include('imagestore.urls', namespace='imagestore')), + ) \ No newline at end of file diff --git a/itf/imagestore/locale/pt/LC_MESSAGES/django.mo b/itf/imagestore/locale/pt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..9e10d05ea503c620a6a2aae8af77400139f55cad GIT binary patch literal 3268 zcmb7_No*WN6o!kiJ1k*`grzWBOlW5&WSzt~6MO6oc#}Pj*rW1v%}gcTU7hM~Z$yd^ zIe-wkuv`!b10f0$i{L`wghql396;O<2yx}a1&Isde_b^*gaZ<#ss6gQS8wY#KVN&% zs|;-?`mN~ST)T_JO~F>%l)j zlD!T>h??F9qLo^B;mF=L_(1@M|~z4uoj-6L=N)D@f;lck_RO zPhtEQh#z|rN|Kxfko1l4pmP~Wa!-OJ@06Q=8C-|)+u$bfG)Qv3bo?5m{ojI3@Ow8d zK?#yK43hjRNar2}@ncWpfvv0olKmk_a#lfd`3dk^@HsdC8c6HZCP(0!Xg z())gp@?jT9_Eg>a3`l-H3|kBt>HQ)|dc5Msr$PMKhj?i497ys8AcW)>K+^XB zNar60@nds%kllwt@|W+%OW=JN9|y_r?>fE@lAMphS@1KE&aa0tFp+HluLn1Rv~Md& zdhG(~-UA@{@ew!w1W55}fVY50K-zZ_q;N=r^I?i+&e6we9HSXY$np=$%Hk zQ`=&}?g6)FO=PDl4|&bF9b@w0&FJLAPP-E?6zkj2??=B8oqSIA51>fqgIbx76wV(s5n(RVijMdTtyAdDq)q<@f28y~Tq2}E78IkAWbd{j@Nq;&%6Bzzxw$wYS4PW2!UBz9YMt^L?&E#!jt ze9W;NQx=3^gG^}#$%Evyo3o^tXr zhx6Ktccsx?=;&-^Ztfv$jhY#9#H&dWmiR<@YJ8ql-ZwF^KTw0(G<$oX z>ST4Y(zCBPSm+zkQ7R)`w-Q6|6kgjJ2SP=AdA%h}BGaMy+L*Vyw~y3nNaIzay7rMo zCBAz>rF}C&W<=nPX%i+T9>w`E8QQj&+t;DZ5x;YY7YF)S`&nB;EO}jrNE=~{PN*u4 z;7vA#;dc4o6cdja-$>XV=%nMy;ZyD`XQ?$0WHsuWkrQhqkan$@U98Zhuboj4D@N z!JtvD0q)H$W>e%4s%h2+WMh;XTug#RT^np9-TS*G4mW2A78}om@xi>x;Zu}kvW*ar zg%PNAs*ZU$S|&-)#6dnP)w1-ob5y>UT!H+vKBH6-Y*Ix^r1%=TQGilmZ?gSCngyDb z(@fZ;?WTD5#d;=W^S!*DQ}_!v$1(*+z(SYJooW}G_NU93V>9lhlRds<0=_p2pGNNH Mke55-e|$B60|Wgk(EtDd literal 0 HcmV?d00001 diff --git a/itf/imagestore/locale/pt/LC_MESSAGES/django.po b/itf/imagestore/locale/pt/LC_MESSAGES/django.po new file mode 100644 index 0000000..719c388 --- /dev/null +++ b/itf/imagestore/locale/pt/LC_MESSAGES/django.po @@ -0,0 +1,293 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-10-14 04:56+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: forms.py:18 models.py:95 models/bases/image.py:40 +msgid "Description" +msgstr "Descrição" + +#: models.py:38 models.py:102 imagestore_cms/cms_plugins.py:13 +#: imagestore_cms/models.py:12 imagestore_cms/models.py:15 models/album.py:14 +#: models/bases/image.py:47 templates/imagestore/image-scope.html:6 +#: templates/imagestore/image_lists/image_list.html:18 +msgid "Album" +msgstr "Álbums" + +#: models.py:39 models/album.py:15 +msgid "Albums" +msgstr "Álbums" + +#: models.py:45 models.py:99 models/bases/album.py:36 models/bases/image.py:44 +#: templates/imagestore/image-scope.html:3 templates/imagestore/user.html:8 +#: templates/imagestore/user.html.py:17 templates/imagestore/user_info.html:5 +#: templates/imagestore/image_lists/image_list.html:15 +msgid "User" +msgstr "Utilizador" + +#: models.py:46 models/bases/album.py:37 +msgid "Name" +msgstr "Nome" + +#: models.py:47 models.py:100 models/bases/album.py:38 +#: models/bases/image.py:45 +msgid "Created" +msgstr "Criado" + +#: models.py:48 models.py:101 models/bases/album.py:39 +#: models/bases/image.py:46 +msgid "Updated" +msgstr "Atualizado" + +#: models.py:49 models/bases/album.py:40 +msgid "Is public" +msgstr "É público" + +#: models.py:52 models.py:97 models/bases/album.py:43 models/bases/image.py:42 +msgid "Order" +msgstr "Ordem" + +#: models.py:79 models/bases/album.py:70 +#: templates/imagestore/album_list.html:50 +msgid "Empty album" +msgstr "Album Vazio" + +#: models.py:81 models/bases/album.py:72 +msgid "Head" +msgstr "Cabeçalho" + +#: models.py:87 models/image.py:13 templates/imagestore/image.html:7 +msgid "Image" +msgstr "Imagem" + +#: models.py:88 models/image.py:14 +msgid "Images" +msgstr "Imagens" + +#: models.py:94 models/bases/image.py:39 +msgid "Title" +msgstr "Título" + +#: models.py:96 models/bases/image.py:41 templates/imagestore/image.html:62 +#: templates/imagestore/tag-cloud.html:6 +msgid "Tags" +msgstr "" + +#: models.py:98 models/bases/image.py:43 +msgid "File" +msgstr "Ficheiro" + +#: models.py:119 models/bases/image.py:64 +msgid "Thumbnail" +msgstr "Miniatura" + +#: models.py:123 templates/imagestore/image.html:70 +msgid "Place" +msgstr "Lugar" + +#: models.py:131 models/upload.py:26 +msgid "images file (.zip)" +msgstr "Arquivo de imagens (.zip)" + +#: models.py:132 models/upload.py:27 +msgid "Select a .zip file of images to upload into a new Gallery." +msgstr "" + +#: models.py:135 models/upload.py:32 +msgid "" +"Select an album to add these images to. leave this empty to create a new " +"album from the supplied title." +msgstr "" +"Selecione um álbum para adicionar essas imagens. Deixe-o vazio para criar um " +"novo" + +#: models.py:137 models/upload.py:37 +msgid "New album name" +msgstr "Novo nome do Album" + +#: models.py:138 models/upload.py:40 +msgid "tags" +msgstr "" + +#: models.py:141 models/upload.py:43 +msgid "Album upload" +msgstr "Carregar Álbum" + +#: models.py:142 models/upload.py:44 +msgid "Album uploads" +msgstr "Carregar Álbums" + +#: views.py:54 +#, python-format +msgid "No Tag found matching \"%s\"." +msgstr "Tag não encontrada de acordo com \"%s\"." + +#: imagestore_cms/cms_app.py:11 +msgid "Imagestore App" +msgstr "Galleria" + +#: imagestore_cms/cms_plugins.py:24 +msgid "Album as carousel" +msgstr "Álbum como carrossel" + +#: imagestore_cms/models.py:16 +msgid "Skin" +msgstr "Tema" + +#: imagestore_cms/models.py:17 +msgid "Image limit" +msgstr "Limite de Imagens" + +#: imagestore_cms/models.py:18 +msgid "Thumbnail size" +msgstr "Tamanho da miniatura" + +#: imagestore_cms/models.py:19 +msgid "Full size view" +msgstr "Tamanho original" + +#: models/upload.py:38 +msgid "" +"If not empty new album with this name will be created and images will be " +"upload to this album" +msgstr "" +"Se não estiver vazio um novo álbum com este nome será criado e as imagens " +"serão carregadas automáticamente" + +#: templates/imagestore/album_delete.html:6 +msgid "Are you sure that you would like to delete this album?" +msgstr "Tem certeza que gostaria de excluir este álbum?" + +#: templates/imagestore/album_delete.html:9 +#: templates/imagestore/image_confirm_delete.html:8 +#: templates/imagestore/image_delete.html:9 +msgid "Yes" +msgstr "Sim" + +#: templates/imagestore/album_delete.html:11 +#: templates/imagestore/image_confirm_delete.html:10 +#: templates/imagestore/image_delete.html:11 +msgid "No" +msgstr "Não" + +#: templates/imagestore/album_list.html:7 +#: templates/imagestore/album_list.html:34 +msgid "Albums for user" +msgstr "Albums por utilizador" + +#: templates/imagestore/album_list.html:9 +#: templates/imagestore/album_list.html:36 +msgid "All albums" +msgstr "Todos os albums" + +#: templates/imagestore/album_list.html:16 +#: templates/imagestore/category.html:9 templates/imagestore/category.html:16 +#: templates/imagestore/category.html:18 templates/imagestore/category.html:29 +#: templates/imagestore/image-form.html:64 templates/imagestore/image.html:12 +#: templates/imagestore/tag.html:7 templates/imagestore/tag.html.py:12 +#: templates/imagestore/user.html:8 templates/imagestore/user.html.py:12 +#: templates/imagestore/forms/album_form.html:13 +#: templates/imagestore/forms/image_form.html:23 +#: templates/imagestore/image_lists/image_list.html:7 +msgid "Gallery" +msgstr "Galleria" + +#: templates/imagestore/album_list.html:58 +msgid "user" +msgstr "utilizador" + +#: templates/imagestore/base.html:17 templates/imagestore/image-form.html:7 +#: templates/imagestore/image-form.html:65 +#: templates/imagestore/forms/image_form.html:7 +#: templates/imagestore/forms/image_form.html:28 +msgid "Upload image" +msgstr "Carregar Imagem" + +#: templates/imagestore/base.html:20 +msgid "Create new album" +msgstr "Criar novo álbum" + +#: templates/imagestore/category.html:31 +msgid "Categories" +msgstr "Categorias" + +#: templates/imagestore/category.html:33 +msgid "All images:" +msgstr "Todas as imagens" + +#: templates/imagestore/image-form.html:71 +#: templates/imagestore/forms/image_form.html:69 +msgid "Upload" +msgstr "Carregar" + +#: templates/imagestore/image-scope.html:9 templates/imagestore/tag.html:7 +#: templates/imagestore/tag.html.py:13 templates/imagestore/tag.html:17 +msgid "Tag" +msgstr "" + +#: templates/imagestore/image.html:41 +msgid "previous image" +msgstr "Imagem Anterior" + +#: templates/imagestore/image.html:44 +msgid "next image" +msgstr "Próxima imagem" + +#: templates/imagestore/image.html:54 +msgid "Edit info" +msgstr "Editar informação" + +#: templates/imagestore/image.html:55 +msgid "Delete image" +msgstr "Remover imagem" + +#: templates/imagestore/image_confirm_delete.html:6 +#: templates/imagestore/image_delete.html:6 +msgid "Are you sure that you would like to delete this image?" +msgstr "Tem certeza que gostaria de apagar esta imagem?" + +#: templates/imagestore/mini-pagination.html:5 +#: templates/imagestore/pagination.html:5 +msgid "previous" +msgstr "anterior" + +#: templates/imagestore/mini-pagination.html:8 +#: templates/imagestore/pagination.html:9 +msgid "next" +msgstr "próxima" + +#: templates/imagestore/pagination.html:7 +msgid "of" +msgstr "de" + +#: templates/imagestore/forms/album_form.html:7 +#: templates/imagestore/forms/album_form.html:17 +msgid "Create album" +msgstr "Criar álbum" + +#: templates/imagestore/forms/album_form.html:21 +msgid "Save" +msgstr "Guardar" + +#: templates/imagestore/image_lists/image_list.html:21 +msgid "Tag:" +msgstr "" + +#: templates/imagestore/image_lists/image_list.html:43 +msgid "Change album" +msgstr "Alterar álbum" diff --git a/itf/imagestore/locale/ru/LC_MESSAGES/django.mo b/itf/imagestore/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d3257d9f53881a50159798f0375cb845ba7d2d4e GIT binary patch literal 4123 zcmcJQUu+y#6^Cz=^3N0~HP99)T+$Sh#_QN_ppny3LSr`u9Ea2)O2x}~cWe*d-C6C- zCb$pawn+=MlOWovAkvTmtprjf$Bi4;aU2OD!3!|M6Mq5~FTB75JRuOO_{Zrt67U)l-+PXe-M6v@iz{|c@I^QV|CrAY5R4?-1GR1+ls*Tb_Vc0k525^i1@dQ(@Pi981EtSXQ1+*x*1rI6 zf@h(0`6-mYU*+#FLGANrD7$~;d>yt^%k^)~{N9YwM|r;yei(ihegsZH?Q;x%44#DV zg+GA@;BRyGu(|Yk63WkuP0Z@9LoM;&R^vG zJ$xVYe}P-zdPLE9D^%S5PwXQ$s=i$waznG6>s64(3mFKsi{QW5B1-O}U0&ju;gwnB{Ls5X6q23>Wx5G!E z@_PYFzZ7c!zeCxtV-w2fYIHYTec|3+icxmD)K}ZM)rZLE`~r9BY~$Lj%ZBck7ID{y zawDj!t^6(yRY0aV-FKhC{@`!?>4+|p0iCT?k{KGUVTcW|pe^c~YVFgwd5jY{@wy~q~5df15k zaz4|jl|!%8GKjKK6LvJLTP*5Km#rsnysGG=~76)O~^p%1*U+W%& z>S$>CDz$hrpY0FIzUgm}UKBj++e3kW*gW8s%YJ>*?DmmocUbYwfP%?>$*~f|*>jX5 z4v}JKt!4%yTWgGzgQD5vVYa6ksI9tTXotNqL~T?{w&KOb@t`_pH{20z=rnu64jX%@ zSMlwLSDY|I^%A=8Eqg`ZJm?+bha8I}V>=%XYIc;kZ8&OO%8@kB%4vft&z_Y=c^;iB zrqwKIt@cVK%Hv1=We=UU?6Xl;HQ#B(!eU+k=h2nHj@HA9jA?;dtsMAx3gWWQJ`+LJ zkfQF$4CAA$;we@$Jl?2`RK1{l`N>IchGlE^*GeocLD!TSve?Xib>Kli>aYXWtGLE9 zdEQQjO;TjDsrp}za|`!aQ_X61|4=~J=Py=$7e9{90I#3xm;EP%3=7F%}hu!(Q9AcWAiaIuwJ#E)wXqJzd>Bg|6;G z_jcRe(|gypEnVBXx>#7)M<8;XuRGYcb6;U_sIY6N-96MhII!iRp*?+VpYx))FkJVl z5z2-2Ub~lyl)`!0vv-PzT4e^`zEDqbdQ zgcBpmR>}}mci7^%SC9Po-u=V9l62EwRic^XU{TFC-Vz=?Km5_FHQg^pv`mb)=s@k@vt_VqL=p)9!ynT7xA@_2cfQWl9IZMOdGf~6wHzw zKIgKbowKDDsJoYwm+4YwTTak(62zj(F}+UaEK+IpMHZ@Yj;CKI{-aFi|5|X5MTgB# zfihIXOFiN^q1_}V)@ZMKr6+K-oGhB;B$lpPuC3CeD-v-;+#w(#ovh5G`^QAdT^+Um z+5)oi!qvuDt)$sJp@rm(zBLNw4DaXiy128sa1HN#la$ds%0AX+P&LXn3_r>lf91yVjUmQ!9PPsP`J5Q)>HkGK(B1T0WlUzpJgy z{~wcxf;@}B>dATa+}fYhRVz8CbdNjx*@1jqTIfv4+qCoehW@TvyS7ITfGZePa_w-{ Izm*yDZ@*TCNdN!< literal 0 HcmV?d00001 diff --git a/itf/imagestore/locale/ru/LC_MESSAGES/django.po b/itf/imagestore/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 0000000..a60b922 --- /dev/null +++ b/itf/imagestore/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,312 @@ +# Copyright (C) 2010 +# This file is distributed under the same license as the imagestore package. +# Pavel Zhukov 2010 +# +msgid "" +msgstr "" +"Project-Id-Version: IMAGESTORE \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-01-18 12:34+0400\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Pavel Zhukov \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: forms.py:18 models.py:95 models/bases/image.py:40 +msgid "Description" +msgstr "Описание" + +#: models.py:38 models.py:102 imagestore_cms/cms_plugins.py:13 +#: imagestore_cms/models.py:12 imagestore_cms/models.py:15 models/album.py:14 +#: models/bases/image.py:47 templates/imagestore/image-scope.html:9 +#: templates/imagestore/image.html:15 +msgid "Album" +msgstr "Альбом" + +#: models.py:39 models/album.py:15 +msgid "Albums" +msgstr "Альбомы" + +#: models.py:45 models.py:99 models/bases/album.py:36 models/bases/image.py:44 +#: templates/imagestore/image-scope.html:4 templates/imagestore/image.html:12 +#: templates/imagestore/user_info.html:5 +msgid "User" +msgstr "Пользователь" + +#: models.py:46 models/bases/album.py:37 +msgid "Name" +msgstr "Имя" + +#: models.py:47 models.py:100 models/bases/album.py:38 +#: models/bases/image.py:45 +msgid "Created" +msgstr "Создано" + +#: models.py:48 models.py:101 models/bases/album.py:39 +#: models/bases/image.py:46 +msgid "Updated" +msgstr "Обновлено" + +#: models.py:49 models/bases/album.py:40 +msgid "Is public" +msgstr "Публичный" + +#: models.py:52 models.py:97 models/bases/album.py:43 models/bases/image.py:42 +msgid "Order" +msgstr "Порядок" + +#: models.py:79 models/bases/album.py:70 +#: templates/imagestore/album_list.html:53 +msgid "Empty album" +msgstr "Пустой альбом" + +#: models.py:81 models/bases/album.py:72 +msgid "Head" +msgstr "Обложка" + +#: models.py:87 models/image.py:13 templates/imagestore/image.html:7 +msgid "Image" +msgstr "Изображение" + +#: models.py:88 models/image.py:14 +msgid "Images" +msgstr "Изображения" + +#: models.py:94 models/bases/image.py:39 +msgid "Title" +msgstr "Название" + +#: models.py:96 models/bases/image.py:41 templates/imagestore/image.html:76 +#: templates/imagestore/tag-cloud.html:6 +msgid "Tags" +msgstr "Метки" + +#: models.py:98 models/bases/image.py:43 +msgid "File" +msgstr "Файл" + +#: models.py:119 models/bases/image.py:64 +msgid "Thumbnail" +msgstr "Эскиз" + +#: models.py:123 templates/imagestore/image.html:84 +msgid "Place" +msgstr "Место" + +#: models.py:131 models/upload.py:26 +msgid "images file (.zip)" +msgstr "файл с изображениями (.zip)" + +#: models.py:132 models/upload.py:27 +msgid "Select a .zip file of images to upload into a new Gallery." +msgstr "Выберите .zip файл с изображениями" + +#: models.py:135 models/upload.py:32 +msgid "" +"Select an album to add these images to. leave this empty to create a new " +"album from the supplied title." +msgstr "Выберите альбом, что-бы добавить эти изображения к нему. Оставьте это поле пустым, что-бы создать новый альбом" + +#: models.py:137 models/upload.py:37 +msgid "New album name" +msgstr "Название нового альбома" + +#: models.py:138 models/upload.py:40 +msgid "tags" +msgstr "метки" + +#: models.py:141 models/upload.py:43 +msgid "Album upload" +msgstr "Загрузка альбома" + +#: models.py:142 models/upload.py:44 +msgid "Album uploads" +msgstr "Загрузка альбомов" + +#: views.py:55 +#, python-format +msgid "No Tag found matching \"%s\"." +msgstr "Нет тэгов совпадающих с \"%s\"." + +#: imagestore_cms/cms_app.py:11 +msgid "Imagestore App" +msgstr "Imagestore приложение" + +#: imagestore_cms/cms_plugins.py:24 +msgid "Album as carousel" +msgstr "Альбомы как карусель" + +#: imagestore_cms/models.py:16 +msgid "Skin" +msgstr "Тема" + +#: imagestore_cms/models.py:17 +msgid "Image limit" +msgstr "Ограничить изображения" + +#: imagestore_cms/models.py:18 +msgid "Thumbnail size" +msgstr "Размер эскиза" + +#: imagestore_cms/models.py:19 +msgid "Full size view" +msgstr "Просмотреть полный размер" + +#: imagestore_cms/models.py:20 +msgid "Template file" +msgstr "Файл шаблона" + +#: models/upload.py:38 +msgid "" +"If not empty new album with this name will be created and images will be " +"upload to this album" +msgstr "" + +#: templates/imagestore/album_delete.html:6 +msgid "Are you sure that you would like to delete this album?" +msgstr "Вы уверенны, что хотите удалить это изображение" + +#: templates/imagestore/album_delete.html:10 +#: templates/imagestore/image_confirm_delete.html:10 +#: templates/imagestore/image_delete.html:10 +msgid "No, take me back" +msgstr "Нет, верните меня назад" + +#: templates/imagestore/album_delete.html:11 +#: templates/imagestore/image_confirm_delete.html:11 +#: templates/imagestore/image_delete.html:11 +msgid "Yes, I am sure" +msgstr "Да, я уверен" + +#: templates/imagestore/album_list.html:7 +#: templates/imagestore/album_list.html:16 +#: templates/imagestore/album_list.html:37 +msgid "Albums for user" +msgstr "Альбомы пользователя" + +#: templates/imagestore/album_list.html:9 +#: templates/imagestore/album_list.html:18 +#: templates/imagestore/album_list.html:39 +msgid "All albums" +msgstr "Все альбомы" + +#: templates/imagestore/album_list.html:60 +msgid "user" +msgstr "пользователь" + +#: templates/imagestore/base.html:13 +msgid "Home" +msgstr "Главная" + +#: templates/imagestore/base.html:16 templates/imagestore/tag.html:7 +msgid "Gallery" +msgstr "Галерея" + +#: templates/imagestore/base.html:32 +#: templates/imagestore/forms/image_form.html:7 +#: templates/imagestore/forms/image_form.html:22 +#: templates/imagestore/forms/image_form.html:26 +msgid "Upload image" +msgstr "Загрузить изображение" + +#: templates/imagestore/base.html:35 +msgid "Create new album" +msgstr "Создать новый альбом" + +#: templates/imagestore/image-scope.html:14 templates/imagestore/image.html:18 +#: templates/imagestore/tag.html:7 templates/imagestore/tag.html.py:11 +#: templates/imagestore/tag.html:15 +msgid "Tag" +msgstr "Метка" + +#: templates/imagestore/image.html:55 +msgid "previous image" +msgstr "предыдущее изображение" + +#: templates/imagestore/image.html:58 +msgid "next image" +msgstr "следующее изображение" + +#: templates/imagestore/image.html:68 +msgid "Edit info" +msgstr "Редактировать информацию" + +#: templates/imagestore/image.html:69 +msgid "Delete image" +msgstr "Удалить изображение" + +#: templates/imagestore/image_confirm_delete.html:6 +#: templates/imagestore/image_delete.html:6 +msgid "Are you sure that you would like to delete this image?" +msgstr "Вы уверенны, что хотите удалить это изображение" + +#: templates/imagestore/image_list.html:33 +#: templates/imagestore/forms/album_form.html:13 +#: templates/imagestore/forms/album_form.html:23 +msgid "Edit album" +msgstr "Редактировать альбом" + +#: templates/imagestore/pagination.html:8 +msgid "previous page" +msgstr "предыдущая страница" + +#: templates/imagestore/pagination.html:22 +msgid "next page" +msgstr "следующая страница" + +#: templates/imagestore/forms/album_form.html:7 +#: templates/imagestore/forms/album_form.html:15 +#: templates/imagestore/forms/album_form.html:25 +msgid "Create album" +msgstr "Создать альбом" + +#: templates/imagestore/forms/album_form.html:31 +msgid "Save" +msgstr "Сохранить" + +#: templates/imagestore/forms/image_form.html:30 +msgid "Upload" +msgstr "Загрузить" + +#~ msgid "Yes" +#~ msgstr "Да" + +#~ msgid "No" +#~ msgstr "Нет" + +#~ msgid "Categories" +#~ msgstr "Категории" + +#~ msgid "All images:" +#~ msgstr "Все изображения:" + +#~ msgid "previous" +#~ msgstr "предыдущие" + +#~ msgid "next" +#~ msgstr "следующие" + +#~ msgid "of" +#~ msgstr "из" + +#~ msgid "Tag:" +#~ msgstr "Метка" + +#~ msgid "Change album" +#~ msgstr "Изменить альбом" + +#~ msgid "Place doesn't found" +#~ msgstr "Место не найдено" + +#~ msgid "Uploaded by" +#~ msgstr "Загружено" + +#~ msgid "Category" +#~ msgstr "Категория" + +#~ msgid "Slug" +#~ msgstr "Метка" + +#~ msgid "Image was created successfully." +#~ msgstr "Изображение загружено успешно" diff --git a/itf/imagestore/migrations/0001_initial.py b/itf/imagestore/migrations/0001_initial.py new file mode 100644 index 0000000..b1b6942 --- /dev/null +++ b/itf/imagestore/migrations/0001_initial.py @@ -0,0 +1,78 @@ +# encoding: utf-8 +import 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 'Category' + db.create_table('imagestore_category', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('parent', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='children', null=True, to=orm['imagestore.Category'])), + ('slug', self.gf('django.db.models.fields.SlugField')(max_length=200, db_index=True)), + ('title', self.gf('django.db.models.fields.CharField')(max_length=200)), + ('order', self.gf('django.db.models.fields.IntegerField')()), + ('is_public', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('lft', self.gf('django.db.models.fields.PositiveIntegerField')(db_index=True)), + ('rght', self.gf('django.db.models.fields.PositiveIntegerField')(db_index=True)), + ('tree_id', self.gf('django.db.models.fields.PositiveIntegerField')(db_index=True)), + ('level', self.gf('django.db.models.fields.PositiveIntegerField')(db_index=True)), + )) + db.send_create_signal('imagestore', ['Category']) + + # Adding model 'Image' + db.create_table('imagestore_image', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('slug', self.gf('django.db.models.fields.SlugField')(db_index=True, max_length=200, null=True, blank=True)), + ('title', self.gf('django.db.models.fields.CharField')(max_length=200, null=True, blank=True)), + ('description', self.gf('django.db.models.fields.TextField')(null=True, blank=True)), + ('tags', self.gf('tagging.fields.TagField')()), + ('category', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['imagestore.Category'])), + ('order', self.gf('django.db.models.fields.IntegerField')(null=True, blank=True)), + ('is_public', self.gf('django.db.models.fields.BooleanField')(default=True)), + ('image', self.gf('sorl.thumbnail.fields.ImageField')(max_length=100)), + )) + db.send_create_signal('imagestore', ['Image']) + + + def backwards(self, orm): + + # Deleting model 'Category' + db.delete_table('imagestore_category') + + # Deleting model 'Image' + db.delete_table('imagestore_image') + + + models = { + 'imagestore.category': { + 'Meta': {'object_name': 'Category'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'order': ('django.db.models.fields.IntegerField', [], {}), + 'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': "orm['imagestore.Category']"}), + 'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '200', 'db_index': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '200'}), + 'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}) + }, + 'imagestore.image': { + 'Meta': {'object_name': 'Image'}, + 'category': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['imagestore.Category']"}), + 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'image': ('sorl.thumbnail.fields.ImageField', [], {'max_length': '100'}), + 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'order': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'db_index': 'True', 'max_length': '200', 'null': 'True', 'blank': 'True'}), + 'tags': ('tagging.fields.TagField', [], {}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}) + } + } + + complete_apps = ['imagestore'] diff --git a/itf/imagestore/migrations/0002_removeslug.py b/itf/imagestore/migrations/0002_removeslug.py new file mode 100644 index 0000000..4d6fe66 --- /dev/null +++ b/itf/imagestore/migrations/0002_removeslug.py @@ -0,0 +1,48 @@ +# encoding: utf-8 +import 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 'Image.slug' + db.delete_column('imagestore_image', 'slug') + + + def backwards(self, orm): + + # Adding field 'Image.slug' + db.add_column('imagestore_image', 'slug', self.gf('django.db.models.fields.SlugField')(blank=True, max_length=200, null=True, db_index=True), keep_default=False) + + + models = { + 'imagestore.category': { + 'Meta': {'ordering': "('order', 'title')", 'object_name': 'Category'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'order': ('django.db.models.fields.IntegerField', [], {}), + 'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': "orm['imagestore.Category']"}), + 'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '200', 'db_index': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '200'}), + 'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}) + }, + 'imagestore.image': { + 'Meta': {'object_name': 'Image'}, + 'category': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'images'", 'to': "orm['imagestore.Category']"}), + 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'image': ('sorl.thumbnail.fields.ImageField', [], {'max_length': '100'}), + 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'order': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'tags': ('tagging.fields.TagField', [], {}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}) + } + } + + complete_apps = ['imagestore'] diff --git a/itf/imagestore/migrations/0003_adduser.py b/itf/imagestore/migrations/0003_adduser.py new file mode 100644 index 0000000..e458f79 --- /dev/null +++ b/itf/imagestore/migrations/0003_adduser.py @@ -0,0 +1,85 @@ +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + +class Migration(SchemaMigration): + + def forwards(self, orm): + + # Adding field 'Image.user' + db.add_column('imagestore_image', 'user', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='images', null=True, to=orm['auth.User']), keep_default=False) + + + def backwards(self, orm): + + # Deleting field 'Image.user' + db.delete_column('imagestore_image', 'user_id') + + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + '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': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + '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', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + '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', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + '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'}), + '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'}) + }, + 'imagestore.category': { + 'Meta': {'ordering': "('order', 'title')", 'object_name': 'Category'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'order': ('django.db.models.fields.IntegerField', [], {}), + 'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': "orm['imagestore.Category']"}), + 'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '200', 'db_index': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '200'}), + 'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}) + }, + 'imagestore.image': { + 'Meta': {'object_name': 'Image'}, + 'category': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'images'", 'to': "orm['imagestore.Category']"}), + 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'image': ('sorl.thumbnail.fields.ImageField', [], {'max_length': '100'}), + 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'order': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'tags': ('tagging.fields.TagField', [], {}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'images'", 'null': 'True', 'to': "orm['auth.User']"}) + } + } + + complete_apps = ['imagestore'] diff --git a/itf/imagestore/migrations/0004_nonullorder.py b/itf/imagestore/migrations/0004_nonullorder.py new file mode 100644 index 0000000..783bbba --- /dev/null +++ b/itf/imagestore/migrations/0004_nonullorder.py @@ -0,0 +1,85 @@ +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + +class Migration(SchemaMigration): + + def forwards(self, orm): + + # Changing field 'Image.order' + db.alter_column('imagestore_image', 'order', self.gf('django.db.models.fields.IntegerField')()) + + + def backwards(self, orm): + + # Changing field 'Image.order' + db.alter_column('imagestore_image', 'order', self.gf('django.db.models.fields.IntegerField')(null=True)) + + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + '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': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + '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', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + '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', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + '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'}), + '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'}) + }, + 'imagestore.category': { + 'Meta': {'ordering': "('order', 'title')", 'object_name': 'Category'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': "orm['imagestore.Category']"}), + 'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '200', 'db_index': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '200'}), + 'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}) + }, + 'imagestore.image': { + 'Meta': {'ordering': "('order', 'id')", 'object_name': 'Image'}, + 'category': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'images'", 'to': "orm['imagestore.Category']"}), + 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'image': ('sorl.thumbnail.fields.ImageField', [], {'max_length': '100'}), + 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'tags': ('tagging.fields.TagField', [], {}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'images'", 'null': 'True', 'to': "orm['auth.User']"}) + } + } + + complete_apps = ['imagestore'] diff --git a/itf/imagestore/migrations/0005_addalbum.py b/itf/imagestore/migrations/0005_addalbum.py new file mode 100644 index 0000000..b92d5bd --- /dev/null +++ b/itf/imagestore/migrations/0005_addalbum.py @@ -0,0 +1,98 @@ +# encoding: utf-8 +import 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 'Album' + db.create_table('imagestore_album', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('name', self.gf('django.db.models.fields.CharField')(max_length=200)), + ('created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), + ('updated', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), + )) + db.send_create_signal('imagestore', ['Album']) + + + def backwards(self, orm): + + # Deleting model 'Album' + db.delete_table('imagestore_album') + + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + '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': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + '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', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + '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', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + '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'}), + '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'}) + }, + 'imagestore.album': { + 'Meta': {'ordering': "('created', 'name')", 'object_name': 'Album'}, + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}), + 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + 'imagestore.category': { + 'Meta': {'ordering': "('order', 'title')", 'object_name': 'Category'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'order': ('django.db.models.fields.IntegerField', [], {}), + 'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': "orm['imagestore.Category']"}), + 'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '200', 'db_index': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '200'}), + 'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}) + }, + 'imagestore.image': { + 'Meta': {'ordering': "('order', 'id')", 'object_name': 'Image'}, + 'category': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'images'", 'to': "orm['imagestore.Category']"}), + 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'image': ('sorl.thumbnail.fields.ImageField', [], {'max_length': '100'}), + 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'tags': ('tagging.fields.TagField', [], {}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'images'", 'null': 'True', 'to': "orm['auth.User']"}) + } + } + + complete_apps = ['imagestore'] diff --git a/itf/imagestore/migrations/0006_addcreatedupdated.py b/itf/imagestore/migrations/0006_addcreatedupdated.py new file mode 100644 index 0000000..7a13588 --- /dev/null +++ b/itf/imagestore/migrations/0006_addcreatedupdated.py @@ -0,0 +1,106 @@ +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + +class Migration(SchemaMigration): + + def forwards(self, orm): + + # Adding field 'Image.created' + db.add_column('imagestore_image', 'created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, null=True, blank=True), keep_default=False) + + # Adding field 'Image.updated' + db.add_column('imagestore_image', 'updated', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, null=True, blank=True), keep_default=False) + + # Changing field 'Image.category' + db.alter_column('imagestore_image', 'category_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, to=orm['imagestore.Category'])) + + + def backwards(self, orm): + + # Deleting field 'Image.created' + db.delete_column('imagestore_image', 'created') + + # Deleting field 'Image.updated' + db.delete_column('imagestore_image', 'updated') + + # User chose to not deal with backwards NULL issues for 'Image.category' + raise RuntimeError("Cannot reverse this migration. 'Image.category' and its values cannot be restored.") + + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + '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': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + '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', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + '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', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + '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'}), + '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'}) + }, + 'imagestore.album': { + 'Meta': {'ordering': "('created', 'name')", 'object_name': 'Album'}, + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}), + 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + 'imagestore.category': { + 'Meta': {'ordering': "('order', 'title')", 'object_name': 'Category'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': "orm['imagestore.Category']"}), + 'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '200', 'db_index': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '200'}), + 'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}) + }, + 'imagestore.image': { + 'Meta': {'ordering': "('order', 'id')", 'object_name': 'Image'}, + 'category': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'images'", 'null': 'True', 'to': "orm['imagestore.Category']"}), + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'image': ('sorl.thumbnail.fields.ImageField', [], {'max_length': '100'}), + 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'tags': ('tagging.fields.TagField', [], {}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), + 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'null': 'True', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'images'", 'null': 'True', 'to': "orm['auth.User']"}) + } + } + + complete_apps = ['imagestore'] diff --git a/itf/imagestore/migrations/0007_albumfix.py b/itf/imagestore/migrations/0007_albumfix.py new file mode 100644 index 0000000..7a8d6a1 --- /dev/null +++ b/itf/imagestore/migrations/0007_albumfix.py @@ -0,0 +1,131 @@ +# encoding: utf-8 +import 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 'Category' + db.delete_table('imagestore_category') + + # Adding field 'Album.user' + db.add_column('imagestore_album', 'user', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='albums', null=True, to=orm['auth.User']), keep_default=False) + + # Adding field 'Album.is_public' + db.add_column('imagestore_album', 'is_public', self.gf('django.db.models.fields.BooleanField')(default=False), keep_default=False) + + # Adding field 'Album.head' + db.add_column('imagestore_album', 'head', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='head_of', null=True, to=orm['imagestore.Image']), keep_default=False) + + # Deleting field 'Image.is_public' + db.delete_column('imagestore_image', 'is_public') + + # Deleting field 'Image.category' + db.delete_column('imagestore_image', 'category_id') + + # Adding field 'Image.album' + db.add_column('imagestore_image', 'album', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='images', null=True, to=orm['imagestore.Album']), keep_default=False) + + + def backwards(self, orm): + + # Adding model 'Category' + db.create_table('imagestore_category', ( + ('rght', self.gf('django.db.models.fields.PositiveIntegerField')(db_index=True)), + ('parent', self.gf('django.db.models.fields.related.ForeignKey')(related_name='children', null=True, to=orm['imagestore.Category'], blank=True)), + ('lft', self.gf('django.db.models.fields.PositiveIntegerField')(db_index=True)), + ('is_public', self.gf('django.db.models.fields.BooleanField')(default=False)), + ('slug', self.gf('django.db.models.fields.SlugField')(max_length=200, db_index=True)), + ('level', self.gf('django.db.models.fields.PositiveIntegerField')(db_index=True)), + ('title', self.gf('django.db.models.fields.CharField')(max_length=200)), + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('tree_id', self.gf('django.db.models.fields.PositiveIntegerField')(db_index=True)), + ('order', self.gf('django.db.models.fields.IntegerField')(default=0)), + )) + db.send_create_signal('imagestore', ['Category']) + + # Deleting field 'Album.user' + db.delete_column('imagestore_album', 'user_id') + + # Deleting field 'Album.is_public' + db.delete_column('imagestore_album', 'is_public') + + # Deleting field 'Album.head' + db.delete_column('imagestore_album', 'head_id') + + # Adding field 'Image.is_public' + db.add_column('imagestore_image', 'is_public', self.gf('django.db.models.fields.BooleanField')(default=True), keep_default=False) + + # Adding field 'Image.category' + db.add_column('imagestore_image', 'category', self.gf('django.db.models.fields.related.ForeignKey')(related_name='images', null=True, to=orm['imagestore.Category'], blank=True), keep_default=False) + + # Deleting field 'Image.album' + db.delete_column('imagestore_image', 'album_id') + + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + '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': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + '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', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + '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', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + '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'}), + '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'}) + }, + 'imagestore.album': { + 'Meta': {'ordering': "('created', 'name')", 'object_name': 'Album'}, + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'head': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'head_of'", 'null': 'True', 'to': "orm['imagestore.Image']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}), + 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'albums'", 'null': 'True', 'to': "orm['auth.User']"}) + }, + 'imagestore.image': { + 'Meta': {'ordering': "('order', 'id')", 'object_name': 'Image'}, + 'album': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'images'", 'null': 'True', 'to': "orm['imagestore.Album']"}), + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'image': ('sorl.thumbnail.fields.ImageField', [], {'max_length': '100'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'tags': ('tagging.fields.TagField', [], {}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), + 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'null': 'True', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'images'", 'null': 'True', 'to': "orm['auth.User']"}) + } + } + + complete_apps = ['imagestore'] diff --git a/itf/imagestore/migrations/0008_permissions.py b/itf/imagestore/migrations/0008_permissions.py new file mode 100644 index 0000000..f6cf342 --- /dev/null +++ b/itf/imagestore/migrations/0008_permissions.py @@ -0,0 +1,93 @@ +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import DataMigration +from django.db import models +from django.contrib.auth.management import create_permissions +from django.contrib.auth.models import User, Permission +from django.db.models import get_app + +class Migration(DataMigration): + + def forwards(self, orm): + app = get_app('imagestore') + create_permissions(app, (), 2) + add_image_permission = Permission.objects.get_by_natural_key('add_image', 'imagestore', 'image') + add_album_permission = Permission.objects.get_by_natural_key('add_album', 'imagestore', 'album') + change_image_permission = Permission.objects.get_by_natural_key('change_image', 'imagestore', 'image') + change_album_permission = Permission.objects.get_by_natural_key('change_album', 'imagestore', 'album') + delete_image_permission = Permission.objects.get_by_natural_key('delete_image', 'imagestore','image') + delete_album_permission = Permission.objects.get_by_natural_key('delete_album', 'imagestore', 'album') + for user in User.objects.all(): + user.user_permissions.add(add_image_permission, add_album_permission,) + user.user_permissions.add(change_image_permission, change_album_permission,) + user.user_permissions.add(delete_image_permission, delete_album_permission,) + user.save() + + def backwards(self, orm): + "Write your backwards methods here." + + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + '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': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + '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', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + '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', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + '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'}), + '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'}) + }, + 'imagestore.album': { + 'Meta': {'ordering': "('created', 'name')", 'object_name': 'Album'}, + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'head': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'head_of'", 'null': 'True', 'to': "orm['imagestore.Image']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}), + 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'albums'", 'null': 'True', 'to': "orm['auth.User']"}) + }, + 'imagestore.image': { + 'Meta': {'ordering': "('order', 'id')", 'object_name': 'Image'}, + 'album': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'images'", 'null': 'True', 'to': "orm['imagestore.Album']"}), + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'image': ('sorl.thumbnail.fields.ImageField', [], {'max_length': '100'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'tags': ('tagging.fields.TagField', [], {}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), + 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'null': 'True', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'images'", 'null': 'True', 'to': "orm['auth.User']"}) + } + } + + complete_apps = ['imagestore'] diff --git a/itf/imagestore/migrations/0009_limits.py b/itf/imagestore/migrations/0009_limits.py new file mode 100644 index 0000000..8ec5ffb --- /dev/null +++ b/itf/imagestore/migrations/0009_limits.py @@ -0,0 +1,89 @@ +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + +class Migration(SchemaMigration): + + def forwards(self, orm): + + # Changing field 'Album.name' + db.alter_column('imagestore_album', 'name', self.gf('django.db.models.fields.CharField')(max_length=20)) + + # Changing field 'Image.title' + db.alter_column('imagestore_image', 'title', self.gf('django.db.models.fields.CharField')(max_length=20, null=True)) + + + def backwards(self, orm): + + # Changing field 'Album.name' + db.alter_column('imagestore_album', 'name', self.gf('django.db.models.fields.CharField')(max_length=200)) + + # Changing field 'Image.title' + db.alter_column('imagestore_image', 'title', self.gf('django.db.models.fields.CharField')(max_length=200, null=True)) + + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + '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': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + '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', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + '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', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + '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'}), + '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'}) + }, + 'imagestore.album': { + 'Meta': {'ordering': "('created', 'name')", 'object_name': 'Album'}, + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'head': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'head_of'", 'null': 'True', 'to': "orm['imagestore.Image']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '20'}), + 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'albums'", 'null': 'True', 'to': "orm['auth.User']"}) + }, + 'imagestore.image': { + 'Meta': {'ordering': "('order', 'id')", 'object_name': 'Image'}, + 'album': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'images'", 'null': 'True', 'to': "orm['imagestore.Album']"}), + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'image': ('sorl.thumbnail.fields.ImageField', [], {'max_length': '100'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'tags': ('tagging.fields.TagField', [], {}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}), + 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'null': 'True', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'images'", 'null': 'True', 'to': "orm['auth.User']"}) + } + } + + complete_apps = ['imagestore'] diff --git a/itf/imagestore/migrations/0010_addplace.py b/itf/imagestore/migrations/0010_addplace.py new file mode 100644 index 0000000..6ba9731 --- /dev/null +++ b/itf/imagestore/migrations/0010_addplace.py @@ -0,0 +1,172 @@ +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models +try: + from places.models import GeoPlace +except: + GeoPlace = None + +class Migration(SchemaMigration): + + def forwards(self, orm): + if GeoPlace: + # Adding field 'Image.place' + db.add_column('imagestore_image', 'place', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='images', null=True, to=orm['places.GeoPlace']), keep_default=False) + + + def backwards(self, orm): + + # Deleting field 'Image.place' + db.delete_column('imagestore_image', 'place_id') + + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + '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': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + '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', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + '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', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + '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'}), + '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'}) + }, + 'imagestore.album': { + 'Meta': {'ordering': "('created', 'name')", 'object_name': 'Album'}, + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'head': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'head_of'", 'null': 'True', 'to': "orm['imagestore.Image']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '20'}), + 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'albums'", 'null': 'True', 'to': "orm['auth.User']"}) + }, + 'imagestore.image': { + 'Meta': {'ordering': "('order', 'id')", 'object_name': 'Image'}, + 'album': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'images'", 'null': 'True', 'to': "orm['imagestore.Album']"}), + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'image': ('sorl.thumbnail.fields.ImageField', [], {'max_length': '100'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'place': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'images'", 'null': 'True', 'to': "orm['places.GeoPlace']"}), + 'tags': ('tagging.fields.TagField', [], {}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}), + 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'null': 'True', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'images'", 'null': 'True', 'to': "orm['auth.User']"}) + }, + 'places.geoplace': { + 'Meta': {'object_name': 'GeoPlace'}, + 'addional_info': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'address': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'imagestore_tag': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}), + 'latitude': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}), + 'longtitude': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}), + 'metro': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'minuses': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'near_objects': ('django.db.models.fields.related.ManyToManyField', [], {'blank': 'True', 'related_name': "'near_objects_rel_+'", 'null': 'True', 'to': "orm['places.GeoPlace']"}), + 'near_text': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'path_to': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'phone': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}), + 'pluses': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'tags': ('tagging.fields.TagField', [], {}), + 'topic': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['pybb.Topic']", 'null': 'True', 'blank': 'True'}), + 'type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['places.PlaceType']", 'null': 'None', 'blank': 'None'}), + 'work_time': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}) + }, + 'places.placetype': { + 'Meta': {'object_name': 'PlaceType'}, + 'forum': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['pybb.Forum']", 'null': 'True', 'blank': 'True'}), + 'forum_user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}), + 'icon_style': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'name_plural': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'path_to_image': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50', 'db_index': 'True'}) + }, + 'pybb.category': { + 'Meta': {'ordering': "['position']", 'object_name': 'Category'}, + 'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '80'}), + 'position': ('django.db.models.fields.IntegerField', [], {'default': '0', 'blank': 'True'}) + }, + 'pybb.forum': { + 'Meta': {'ordering': "['position']", 'object_name': 'Forum'}, + 'category': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'forums'", 'to': "orm['pybb.Category']"}), + 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'headline': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'moderators': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '80'}), + 'position': ('django.db.models.fields.IntegerField', [], {'default': '0', 'blank': 'True'}), + 'post_count': ('django.db.models.fields.IntegerField', [], {'default': '0', 'blank': 'True'}), + 'readed_by': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'readed_forums'", 'symmetrical': 'False', 'through': "orm['pybb.ForumReadTracker']", 'to': "orm['auth.User']"}), + 'topic_count': ('django.db.models.fields.IntegerField', [], {'default': '0', 'blank': 'True'}), + 'updated': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}) + }, + 'pybb.forumreadtracker': { + 'Meta': {'object_name': 'ForumReadTracker'}, + 'forum': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['pybb.Forum']", 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'time_stamp': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + }, + 'pybb.topic': { + 'Meta': {'ordering': "['-created']", 'object_name': 'Topic'}, + 'closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), + 'forum': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'topics'", 'to': "orm['pybb.Forum']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'post_count': ('django.db.models.fields.IntegerField', [], {'default': '0', 'blank': 'True'}), + 'readed_by': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'readed_topics'", 'symmetrical': 'False', 'through': "orm['pybb.TopicReadTracker']", 'to': "orm['auth.User']"}), + 'sticky': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'subscribers': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'subscriptions'", 'blank': 'True', 'to': "orm['auth.User']"}), + 'updated': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}), + 'views': ('django.db.models.fields.IntegerField', [], {'default': '0', 'blank': 'True'}) + }, + 'pybb.topicreadtracker': { + 'Meta': {'object_name': 'TopicReadTracker'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'time_stamp': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'topic': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['pybb.Topic']", 'null': 'True', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) + } + } + + complete_apps = ['imagestore'] diff --git a/itf/imagestore/migrations/0011_add_mass_upload.py b/itf/imagestore/migrations/0011_add_mass_upload.py new file mode 100644 index 0000000..f0df949 --- /dev/null +++ b/itf/imagestore/migrations/0011_add_mass_upload.py @@ -0,0 +1,98 @@ +# encoding: utf-8 +import 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 'AlbumUpload' + db.create_table('imagestore_albumupload', ( + ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('zip_file', self.gf('django.db.models.fields.files.FileField')(max_length=100)), + ('album', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['imagestore.Album'], null=True, blank=True)), + ('new_album_name', self.gf('django.db.models.fields.CharField')(max_length=255, blank=True)), + ('tags', self.gf('django.db.models.fields.CharField')(max_length=255, blank=True)), + )) + db.send_create_signal('imagestore', ['AlbumUpload']) + + + def backwards(self, orm): + + # Deleting model 'AlbumUpload' + db.delete_table('imagestore_albumupload') + + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + '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': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + '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', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + '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', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + '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'}), + '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'}) + }, + 'imagestore.album': { + 'Meta': {'ordering': "('created', 'name')", 'object_name': 'Album'}, + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'head': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'head_of'", 'null': 'True', 'to': "orm['imagestore.Image']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '20'}), + 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'albums'", 'null': 'True', 'to': "orm['auth.User']"}) + }, + 'imagestore.albumupload': { + 'Meta': {'object_name': 'AlbumUpload'}, + 'album': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['imagestore.Album']", 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'new_album_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'tags': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'zip_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}) + }, + 'imagestore.image': { + 'Meta': {'ordering': "('order', 'id')", 'object_name': 'Image'}, + 'album': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'images'", 'null': 'True', 'to': "orm['imagestore.Album']"}), + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'image': ('sorl.thumbnail.fields.ImageField', [], {'max_length': '100'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'tags': ('tagging.fields.TagField', [], {}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}), + 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'null': 'True', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'images'", 'null': 'True', 'to': "orm['auth.User']"}) + } + } + + complete_apps = ['imagestore'] diff --git a/itf/imagestore/migrations/0012_add_order.py b/itf/imagestore/migrations/0012_add_order.py new file mode 100644 index 0000000..181a4b5 --- /dev/null +++ b/itf/imagestore/migrations/0012_add_order.py @@ -0,0 +1,92 @@ +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + +class Migration(SchemaMigration): + + def forwards(self, orm): + + # Adding field 'Album.order' + db.add_column('imagestore_album', 'order', self.gf('django.db.models.fields.IntegerField')(default=0), keep_default=False) + + + def backwards(self, orm): + + # Deleting field 'Album.order' + db.delete_column('imagestore_album', 'order') + + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + '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': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + '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', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + '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', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + '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'}), + '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'}) + }, + 'imagestore.album': { + 'Meta': {'ordering': "('created', 'name')", 'object_name': 'Album'}, + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'head': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'head_of'", 'null': 'True', 'to': "orm['imagestore.Image']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '20'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'albums'", 'null': 'True', 'to': "orm['auth.User']"}) + }, + 'imagestore.albumupload': { + 'Meta': {'object_name': 'AlbumUpload'}, + 'album': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['imagestore.Album']", 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'new_album_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'tags': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'zip_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}) + }, + 'imagestore.image': { + 'Meta': {'ordering': "('order', 'id')", 'object_name': 'Image'}, + 'album': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'images'", 'null': 'True', 'to': "orm['imagestore.Album']"}), + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'image': ('sorl.thumbnail.fields.ImageField', [], {'max_length': '100'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'tags': ('tagging.fields.TagField', [], {}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '20', 'null': 'True', 'blank': 'True'}), + 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'null': 'True', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'images'", 'null': 'True', 'to': "orm['auth.User']"}) + } + } + + complete_apps = ['imagestore'] diff --git a/itf/imagestore/migrations/0013_fix_album_title_length.py b/itf/imagestore/migrations/0013_fix_album_title_length.py new file mode 100644 index 0000000..fa3f42f --- /dev/null +++ b/itf/imagestore/migrations/0013_fix_album_title_length.py @@ -0,0 +1,92 @@ +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + +class Migration(SchemaMigration): + + def forwards(self, orm): + + # Changing field 'Image.title' + db.alter_column('imagestore_image', 'title', self.gf('django.db.models.fields.CharField')(max_length=100, null=True)) + + + def backwards(self, orm): + + # Changing field 'Image.title' + db.alter_column('imagestore_image', 'title', self.gf('django.db.models.fields.CharField')(max_length=20, null=True)) + + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + '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': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + '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', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + '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', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + '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'}), + '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'}) + }, + 'imagestore.album': { + 'Meta': {'ordering': "('created', 'name')", 'object_name': 'Album'}, + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'head': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'head_of'", 'null': 'True', 'to': "orm['imagestore.Image']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '20'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'albums'", 'null': 'True', 'to': "orm['auth.User']"}) + }, + 'imagestore.albumupload': { + 'Meta': {'object_name': 'AlbumUpload'}, + 'album': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['imagestore.Album']", 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'new_album_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'tags': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'zip_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}) + }, + 'imagestore.image': { + 'Meta': {'ordering': "('order', 'id')", 'object_name': 'Image'}, + 'album': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'images'", 'null': 'True', 'to': "orm['imagestore.Album']"}), + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'image': ('sorl.thumbnail.fields.ImageField', [], {'max_length': '100'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'tags': ('tagging.fields.TagField', [], {}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'null': 'True', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'images'", 'null': 'True', 'to': "orm['auth.User']"}) + } + } + + complete_apps = ['imagestore'] diff --git a/itf/imagestore/migrations/0014_fix_album_name_length.py b/itf/imagestore/migrations/0014_fix_album_name_length.py new file mode 100644 index 0000000..2cc2713 --- /dev/null +++ b/itf/imagestore/migrations/0014_fix_album_name_length.py @@ -0,0 +1,92 @@ +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + +class Migration(SchemaMigration): + + def forwards(self, orm): + + # Changing field 'Album.name' + db.alter_column('imagestore_album', 'name', self.gf('django.db.models.fields.CharField')(max_length=100)) + + + def backwards(self, orm): + + # Changing field 'Album.name' + db.alter_column('imagestore_album', 'name', self.gf('django.db.models.fields.CharField')(max_length=20)) + + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + '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': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + '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', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + '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', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + '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'}), + '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'}) + }, + 'imagestore.album': { + 'Meta': {'ordering': "('created', 'name')", 'object_name': 'Album'}, + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'head': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'head_of'", 'null': 'True', 'to': "orm['imagestore.Image']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'albums'", 'null': 'True', 'to': "orm['auth.User']"}) + }, + 'imagestore.albumupload': { + 'Meta': {'object_name': 'AlbumUpload'}, + 'album': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['imagestore.Album']", 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'new_album_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'tags': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'zip_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}) + }, + 'imagestore.image': { + 'Meta': {'ordering': "('order', 'id')", 'object_name': 'Image'}, + 'album': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'images'", 'null': 'True', 'to': "orm['imagestore.Album']"}), + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'image': ('sorl.thumbnail.fields.ImageField', [], {'max_length': '100'}), + 'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'tags': ('tagging.fields.TagField', [], {}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), + 'updated': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'null': 'True', 'blank': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'images'", 'null': 'True', 'to': "orm['auth.User']"}) + } + } + + complete_apps = ['imagestore'] diff --git a/itf/imagestore/migrations/__init__.py b/itf/imagestore/migrations/__init__.py new file mode 100644 index 0000000..04ccd4b --- /dev/null +++ b/itf/imagestore/migrations/__init__.py @@ -0,0 +1,5 @@ +#!/usr/bin/env python +# vim:fileencoding=utf-8 + +__author__ = 'zeus' + \ No newline at end of file diff --git a/itf/imagestore/models/__init__.py b/itf/imagestore/models/__init__.py new file mode 100644 index 0000000..c9fd014 --- /dev/null +++ b/itf/imagestore/models/__init__.py @@ -0,0 +1,19 @@ +#!/usr/bin/env python +# vim:fileencoding=utf-8 + +__author__ = 'zeus' +from imagestore.utils import load_class, get_model_string +from django.conf import settings + +Album = load_class(getattr(settings, 'IMAGESTORE_ALBUM_MODEL', 'imagestore.models.album.Album')) +Image = load_class(getattr(settings, 'IMAGESTORE_IMAGE_MODEL', 'imagestore.models.image.Image')) + +# This labels and classnames used to generate permissons labels +image_applabel = Image._meta.app_label +image_classname = Image.__name__.lower() + +album_applabel = Album._meta.app_label +album_classname = Album.__name__.lower() + + +from upload import AlbumUpload \ No newline at end of file diff --git a/itf/imagestore/models/album.py b/itf/imagestore/models/album.py new file mode 100644 index 0000000..4d954a8 --- /dev/null +++ b/itf/imagestore/models/album.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python +# vim:fileencoding=utf-8 + +__author__ = 'zeus' + +from bases.album import BaseAlbum +from django.utils.translation import ugettext_lazy as _ +from imagestore.utils import load_class, get_model_string +from django.db import models +from django.contrib.contenttypes import generic +from django.contrib.contenttypes.models import ContentType + +class Album(BaseAlbum): + content_type = models.ForeignKey(ContentType) + object_id = models.PositiveIntegerField() + content_object = generic.GenericForeignKey('content_type', 'object_id') + class Meta(BaseAlbum.Meta): + abstract = False + verbose_name = _('Album') + verbose_name_plural = _('Albums') + app_label = 'imagestore' diff --git a/itf/imagestore/models/bases/__init__.py b/itf/imagestore/models/bases/__init__.py new file mode 100644 index 0000000..04ccd4b --- /dev/null +++ b/itf/imagestore/models/bases/__init__.py @@ -0,0 +1,5 @@ +#!/usr/bin/env python +# vim:fileencoding=utf-8 + +__author__ = 'zeus' + \ No newline at end of file diff --git a/itf/imagestore/models/bases/album.py b/itf/imagestore/models/bases/album.py new file mode 100644 index 0000000..8201da2 --- /dev/null +++ b/itf/imagestore/models/bases/album.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python +# vim:fileencoding=utf-8 + +__author__ = 'zeus' + + +from django.db import models +from django.db.models import permalink +from sorl.thumbnail.helpers import ThumbnailError +from tagging.fields import TagField +from django.utils.translation import ugettext_lazy as _ +from django.conf import settings +from sorl.thumbnail import ImageField, get_thumbnail +from django.contrib.auth.models import User, Permission +from django.db.models.signals import post_save +try: + import Image as PILImage +except ImportError: + from PIL import Image as PILImage + +from imagestore.utils import get_file_path, get_model_string + + + +SELF_MANAGE = getattr(settings, 'IMAGESTORE_SELF_MANAGE', True) + + +class BaseAlbum(models.Model): + class Meta(object): + abstract = True + ordering = ('order', 'created', 'name') + permissions = ( + ('moderate_albums', 'View, update and delete any album'), + ) + + user = models.ForeignKey(User, verbose_name=_('User'), null=True, blank=True, related_name='albums') + name = models.CharField(_('Name'), max_length=100, blank=False, null=False) + created = models.DateTimeField(_('Created'), auto_now_add=True) + updated = models.DateTimeField(_('Updated'), auto_now=True) + is_public = models.BooleanField(_('Is public'), default=True) + head = models.ForeignKey(get_model_string('Image'), related_name='head_of', null=True, blank=True) + + order = models.IntegerField(_('Order'), default=0) + + def get_head(self): + if self.head: + return self.head + else: + if self.images.all().count()>0: + self.head = self.images.all()[0] + self.save() + return self.head + else: + return None + + @permalink + def get_absolute_url(self): + return 'imagestore:album', (), {'album_id': self.id} + + def __unicode__(self): + return self.name + + def admin_thumbnail(self): + img = self.get_head() + if img: + try: + return '' % get_thumbnail(img.image, '100x100', crop='center').url + except IOError: + return 'IOError' + return _('Empty album') + + admin_thumbnail.short_description = _('Head') + admin_thumbnail.allow_tags = True \ No newline at end of file diff --git a/itf/imagestore/models/bases/image.py b/itf/imagestore/models/bases/image.py new file mode 100644 index 0000000..d26d4c5 --- /dev/null +++ b/itf/imagestore/models/bases/image.py @@ -0,0 +1,100 @@ +#!/usr/bin/env python +# vim:fileencoding=utf-8 + +__author__ = 'zeus' + + +from django.db import models +from django.db.models import permalink +from sorl.thumbnail.helpers import ThumbnailError +from tagging.fields import TagField +from django.utils.translation import ugettext_lazy as _ +from django.conf import settings +from sorl.thumbnail import ImageField, get_thumbnail +from django.contrib.auth.models import User, Permission +from django.db.models.signals import post_save +from django.contrib.contenttypes.models import ContentType +from django.core.exceptions import ObjectDoesNotExist + +try: + import Image as PILImage +except ImportError: + from PIL import Image as PILImage + +from imagestore.utils import get_file_path, get_model_string, load_class + + + +SELF_MANAGE = getattr(settings, 'IMAGESTORE_SELF_MANAGE', True) + + +class BaseImage(models.Model): + class Meta(object): + abstract = True + ordering = ('order', 'id') + permissions = ( + ('moderate_images', 'View, update and delete any image'), + ) + + title = models.CharField(_('Title'), max_length=100, blank=True, null=True) + description = models.TextField(_('Description'), blank=True, null=True) + tags = TagField(_('Tags'), blank=True) + order = models.IntegerField(_('Order'), default=0) + image = ImageField(verbose_name = _('File'), upload_to=get_file_path) + user = models.ForeignKey(User, verbose_name=_('User'), null=True, blank=True, related_name='images') + created = models.DateTimeField(_('Created'), auto_now_add=True, null=True) + updated = models.DateTimeField(_('Updated'), auto_now=True, null=True) + album = models.ForeignKey(get_model_string('Album'), verbose_name=_('Album'), null=True, blank=True, related_name='images') + + @permalink + def get_absolute_url(self): + return 'imagestore:image', (), {'pk': self.id} + + def __unicode__(self): + return '%s'% self.id + + def admin_thumbnail(self): + try: + return '' % get_thumbnail(self.image, '100x100', crop='center').url + except IOError: + return 'IOError' + except ThumbnailError, ex: + return 'ThumbnailError, %s' % ex.message + + admin_thumbnail.short_description = _('Thumbnail') + admin_thumbnail.allow_tags = True + + +#noinspection PyUnusedLocal +def setup_imagestore_permissions(instance, created, **kwargs): + if not created: + return + try: + from imagestore.models import Album, Image + album_type = ContentType.objects.get( + #app_label=load_class('imagestore.models.Album')._meta.app_label, + app_label = Album._meta.app_label, + name='Album' + ) + image_type = ContentType.objects.get( + #app_label=load_class('imagestore.models.Image')._meta.app_label, + app_label = Image._meta.app_label, + name='Image' + ) + add_image_permission = Permission.objects.get(codename='add_image', content_type=image_type) + add_album_permission = Permission.objects.get(codename='add_album', content_type=album_type) + change_image_permission = Permission.objects.get(codename='change_image', content_type=image_type) + change_album_permission = Permission.objects.get(codename='change_album', content_type=album_type) + delete_image_permission = Permission.objects.get(codename='delete_image', content_type=image_type) + delete_album_permission = Permission.objects.get(codename='delete_album', content_type=album_type) + instance.user_permissions.add(add_image_permission, add_album_permission,) + instance.user_permissions.add(change_image_permission, change_album_permission,) + instance.user_permissions.add(delete_image_permission, delete_album_permission,) + except ObjectDoesNotExist: + # Permissions are not yet installed or conten does not created yet + # probaly this is first + pass + + +if SELF_MANAGE: + post_save.connect(setup_imagestore_permissions, User) \ No newline at end of file diff --git a/itf/imagestore/models/image.py b/itf/imagestore/models/image.py new file mode 100644 index 0000000..17876f1 --- /dev/null +++ b/itf/imagestore/models/image.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python +# vim:fileencoding=utf-8 + +__author__ = 'zeus' + +from bases.image import BaseImage +from django.utils.translation import ugettext_lazy as _ +from imagestore.utils import load_class, get_model_string + +class Image(BaseImage): + class Meta(BaseImage.Meta): + abstract = False + verbose_name = _('Image') + verbose_name_plural = _('Images') + app_label = 'imagestore' \ No newline at end of file diff --git a/itf/imagestore/models/upload.py b/itf/imagestore/models/upload.py new file mode 100644 index 0000000..6838639 --- /dev/null +++ b/itf/imagestore/models/upload.py @@ -0,0 +1,87 @@ +#!/usr/bin/env python +# vim:fileencoding=utf-8 + +__author__ = 'zeus' + +import os +import zipfile +from django.db import models +from imagestore.utils import load_class, get_model_string +from django.utils.translation import ugettext_lazy as _ +from django.conf import settings +from django.core.files.base import ContentFile +try: + import Image as PILImage +except ImportError: + from PIL import Image as PILImage + +from imagestore.models import Album, Image + +TEMP_DIR = getattr(settings, 'TEMP_DIR', 'temp/') + +class AlbumUpload(models.Model): + """ + Just re-written django-photologue GalleryUpload method + """ + zip_file = models.FileField(_('images file (.zip)'), upload_to=TEMP_DIR, + help_text=_('Select a .zip file of images to upload into a new Gallery.')) + album = models.ForeignKey( + Album, + null=True, + blank=True, + help_text=_('Select an album to add these images to. leave this empty to create a new album from the supplied title.') + ) + new_album_name = models.CharField( + max_length=255, + blank=True, + verbose_name=_('New album name'), + help_text=_('If not empty new album with this name will be created and images will be upload to this album') + ) + tags = models.CharField(max_length=255, blank=True, verbose_name=_('tags')) + + class Meta(object): + verbose_name = _('Album upload') + verbose_name_plural = _('Album uploads') + app_label = 'imagestore' + + def save(self, *args, **kwargs): + super(AlbumUpload, self).save(*args, **kwargs) + album = self.process_zipfile() + super(AlbumUpload, self).delete() + return album + + def process_zipfile(self): + if os.path.isfile(self.zip_file.path): + # TODO: implement try-except here + zip = zipfile.ZipFile(self.zip_file.path) + bad_file = zip.testzip() + if bad_file: + raise Exception('"%s" in the .zip archive is corrupt.' % bad_file) + count = 1 + album = self.album + if not album: + album = Album.objects.create(name=self.new_album_name) + from cStringIO import StringIO + for filename in sorted(zip.namelist()): + if filename.startswith('__'): # do not process meta files + continue + data = zip.read(filename) + if len(data): + try: + # the following is taken from django.newforms.fields.ImageField: + # load() is the only method that can spot a truncated JPEG, + # but it cannot be called sanely after verify() + trial_image = PILImage.open(StringIO(data)) + trial_image.load() + # verify() is the only method that can spot a corrupt PNG, + # but it must be called immediately after the constructor + trial_image = PILImage.open(StringIO(data)) + trial_image.verify() + except Exception: + # if a "bad" file is found we just skip it. + continue + img = Image(album=album) + img.image.save(filename, ContentFile(data)) + img.save() + zip.close() + return album diff --git a/itf/imagestore/static/imagestore.css b/itf/imagestore/static/imagestore.css new file mode 100644 index 0000000..b5bc09c --- /dev/null +++ b/itf/imagestore/static/imagestore.css @@ -0,0 +1,107 @@ +#category-list li{ + font-size: 120%; + padding-bottom: 15px; +} + +#category-list { + padding-bottom: 10px; +} + +#controls { + font-size: 90%; +} + +#controls .controls-group { + padding-top: 10px; +} + +.image-description { + padding: 10px 0 10px 0; +} + +.navigation { + text-align: center; + padding: 0 0 10px 0; + font-size: 110%; +} + +.navigation .next-link { + margin-left: 100px; +} + +img.current { + border: 1px red solid; +} + +#image-view img.preview { + display: block; + margin: 0 auto 0 auto; +} + +#image-view { + margin-right: 300px; +} + +.album-list .album { + width: 160px; + height: 200px; + float: left; + padding: 5px; + margin: 10px; +} + +.album-name { + width: 100%; + text-align: center; +} + +.album-user { + width: 100%; + text-align: center; + font-size: 80%; + color: #CCC; +} + +.album-head { + height: 150px; + width: 150px; + display: table-cell; + vertical-align: middle; + text-align: center; +} +.album-head a { + text-align: center; +} + +.user-info { + padding: 20px 0; +} + +.image-preview { + float: left; + width: 130px; + padding: 5px; + height: 160px; +} + +.image-preview .image-title { + font-size: 80%; +} + +.extra-fields { + font-size: 80%; + margin: 10px 0; +} + +.extra-fields label { + color: #666666; +} + +.basic-fields, .extra-fields { + display: block; + float: left; +} + +.pagination .disabled { + display: none; +} \ No newline at end of file diff --git a/itf/imagestore/templates/cms/plugins/imagestore_album.html b/itf/imagestore/templates/cms/plugins/imagestore_album.html new file mode 100644 index 0000000..69af394 --- /dev/null +++ b/itf/imagestore/templates/cms/plugins/imagestore_album.html @@ -0,0 +1,23 @@ +{% load thumbnail %} + diff --git a/itf/imagestore/templates/cms/plugins/imagestore_album_carousel.html b/itf/imagestore/templates/cms/plugins/imagestore_album_carousel.html new file mode 100644 index 0000000..11ec0ec --- /dev/null +++ b/itf/imagestore/templates/cms/plugins/imagestore_album_carousel.html @@ -0,0 +1 @@ +{% include 'cms/plugins/imagestore_album_carousel_base.html' %} diff --git a/itf/imagestore/templates/cms/plugins/imagestore_album_carousel_base.html b/itf/imagestore/templates/cms/plugins/imagestore_album_carousel_base.html new file mode 100644 index 0000000..7d55320 --- /dev/null +++ b/itf/imagestore/templates/cms/plugins/imagestore_album_carousel_base.html @@ -0,0 +1,28 @@ +{% load thumbnail %} +
+
    + {% for image in images %} + {% thumbnail image.image carousel.size crop="center" as im %} + {% thumbnail image.image carousel.full_size as full %} +
  • + {{ image.title }} +
  • + {% endthumbnail %} + {% endthumbnail %} + {% endfor %} +
+ + +
\ No newline at end of file diff --git a/itf/imagestore/templates/imagestore/album_delete.html b/itf/imagestore/templates/imagestore/album_delete.html new file mode 100644 index 0000000..64174c7 --- /dev/null +++ b/itf/imagestore/templates/imagestore/album_delete.html @@ -0,0 +1,14 @@ +{% extends "imagestore/base.html" %} + +{% load i18n %} + +{% block content %} +

{% trans "Are you sure that you would like to delete this album?" %}

+
+ {% csrf_token %} +

+ ← {% trans "No, take me back" %} + +

+
+{% endblock %} \ No newline at end of file diff --git a/itf/imagestore/templates/imagestore/album_list.html b/itf/imagestore/templates/imagestore/album_list.html new file mode 100644 index 0000000..8a08ab1 --- /dev/null +++ b/itf/imagestore/templates/imagestore/album_list.html @@ -0,0 +1,70 @@ +{% extends "imagestore/base.html" %} +{% load i18n %} +{% load thumbnail %} + +{% block title %} + {% if view_user %} + {% trans "Albums for user" %} {{ view_user.username }} + {% else %} + {% trans "All albums" %} + {% endif %} +{% endblock %} + +{% block imagestore-breadcrumb %} +
  • + {% if view_user %} + {% trans "Albums for user" %} {{ view_user.username }} + {% else %} + {% trans "All albums" %} + {% endif %} +
  • +{% endblock %} + +{% block imagestore-info %} + {% if view_user and IMAGESTORE_SHOW_USER %} + {% with view_user.get_profile as profile %} + {% include "imagestore/user_info.html" %} + {% endwith %} + {% endif %} +{% endblock %} + +{% block imagestore-related %} + {% include "imagestore/tag-cloud.html" %} +{% endblock %} + +{% block content %} +

    {% if view_user %} + {% trans "Albums for user" %} {{ view_user.username }} + {% else %} + {% trans "All albums" %} + {% endif %}

    + {% include "imagestore/pagination.html" %} + + {% include "imagestore/pagination.html" %} +{% endblock %} \ No newline at end of file diff --git a/itf/imagestore/templates/imagestore/base.html b/itf/imagestore/templates/imagestore/base.html new file mode 100644 index 0000000..99572bd --- /dev/null +++ b/itf/imagestore/templates/imagestore/base.html @@ -0,0 +1,43 @@ +{% extends IMAGESTORE_TEMPLATE|default:"base.html" %} +{% load i18n %} + +{% block head %} + {% if IMAGESTORE_LOAD_CSS %} + + {% endif %} +{% endblock %} + +{% block breadcrumb %} + +{% endblock %} + +{% block content %} +{% endblock content %} + +{% block content-related %} + {% block imagestore-info %} + {% endblock %} +
    + +
    + {% block imagestore-related %} + {% endblock %} +{% endblock %} \ No newline at end of file diff --git a/itf/imagestore/templates/imagestore/forms/album_form.html b/itf/imagestore/templates/imagestore/forms/album_form.html new file mode 100644 index 0000000..c2c79f9 --- /dev/null +++ b/itf/imagestore/templates/imagestore/forms/album_form.html @@ -0,0 +1,33 @@ +{% extends "imagestore/base.html" %} +{% load i18n %} +{% load thumbnail %} + + +{% block title %} + {% trans "Create album" %} +{% endblock %} + +{% block imagestore-breadcrumb %} +
  • + {% if object %} + {% trans "Edit album" %}: {{ object.name }} + {% else %} + {% trans "Create album" %} + {% endif %} +
  • +{% endblock %} + +{% block content %} +

    + {% if object %} + {% trans "Edit album" %}: {{ object.name }} + {% else %} + {% trans "Create album" %} + {% endif %} +

    +
    + {% csrf_token %} + {{ form.as_p }} + +
    +{% endblock content %} \ No newline at end of file diff --git a/itf/imagestore/templates/imagestore/forms/image_form.html b/itf/imagestore/templates/imagestore/forms/image_form.html new file mode 100644 index 0000000..4b2ad9d --- /dev/null +++ b/itf/imagestore/templates/imagestore/forms/image_form.html @@ -0,0 +1,32 @@ +{% extends "imagestore/base.html" %} +{% load i18n %} +{% load thumbnail %} + + +{% block title %} + {% trans "Upload image" %} +{% endblock %} + +{% block head %} + {{ block.super }} + + +{% endblock %} + +{% block imagestore-breadcrumb %} +
  • {% trans "Upload image" %}
  • +{% endblock %} + +{% block content %} +

    {% trans "Upload image" %}

    +
    + {% csrf_token %} + {{ form.as_p }} + +
    +{% endblock content %} \ No newline at end of file diff --git a/itf/imagestore/templates/imagestore/image-href.html b/itf/imagestore/templates/imagestore/image-href.html new file mode 100644 index 0000000..b68664c --- /dev/null +++ b/itf/imagestore/templates/imagestore/image-href.html @@ -0,0 +1,9 @@ +{% if album %} + {% url imagestore:image-album album_id=album.id pk=image.id %} +{% else %} + {% if tag %} + {% url imagestore:image-tag tag=tag pk=image.id %} + {% else %} + {{ image.get_absolute_url }} + {% endif %} +{% endif %} \ No newline at end of file diff --git a/itf/imagestore/templates/imagestore/image-list.html b/itf/imagestore/templates/imagestore/image-list.html new file mode 100644 index 0000000..a944027 --- /dev/null +++ b/itf/imagestore/templates/imagestore/image-list.html @@ -0,0 +1,15 @@ +{% load i18n %} +{% load thumbnail %} + +
    + {% for image in image_list %} + {% thumbnail image.image "120x120" crop="center" as im %} + + {{ image.title }} + + {% endthumbnail %} + {% endfor %} + {% include "imagestore/pagination.html" %} +
    + + diff --git a/itf/imagestore/templates/imagestore/image-scope.html b/itf/imagestore/templates/imagestore/image-scope.html new file mode 100644 index 0000000..30e5b0b --- /dev/null +++ b/itf/imagestore/templates/imagestore/image-scope.html @@ -0,0 +1,16 @@ +{% load i18n %} +{% if view_user %} + {% if scope_tag %}<{{ scope_tag }} class='scope-view-user'>{% endif %} + {% trans "User" %}: {{ view_user.username }} + {% if scope_tag %}{% endif %} +{% endif %} +{% if album %} + {% if scope_tag %}<{{ scope_tag }} class='scope-album'>{% endif %} + {% trans "Album" %}: {{ album.name }} + {% if scope_tag %}{% endif %} +{% endif %} +{% if tag %} + {% if scope_tag %}<{{ scope_tag }} class='scope-album'>{% endif %} + {% trans "Tag" %}: {{ tag }} + {% if scope_tag %}{% endif %} +{% endif %} \ No newline at end of file diff --git a/itf/imagestore/templates/imagestore/image.html b/itf/imagestore/templates/imagestore/image.html new file mode 100644 index 0000000..c66bc8e --- /dev/null +++ b/itf/imagestore/templates/imagestore/image.html @@ -0,0 +1,88 @@ +{% extends "imagestore/base.html" %} +{% load i18n %} +{% load thumbnail %} +{% load tagging_tags %} + +{% block title %} + {% trans "Image" %} - {{ image.title }} +{% endblock %} + +{% block imagestore-breadcrumb %} + {% if view_user and IMAGESTORE_SHOW_USER %} +
  • {% trans "User" %}: {{ view_user.username }} /
  • + {% endif %} + {% if album %} +
  • {% trans "Album" %}: {{ album.name }} /
  • + {% endif %} + {% if tag %} +
  • {% trans "Tag" %}: {{ tag }} /
  • + {% endif %} +
  • + {% if image.title %} + {{ image.title }} + {% else %} + {{ image.id }} + {% endif %} +
  • +{% endblock %} + +{% block imagestore-info %} + +{% endblock %} + +{% block content %} + {% if image.title %}

    {{ image.title }}

    {% endif %} + {% if album or tag or view_user %} +

    + {% include "imagestore/image-scope.html" %} +

    + {% endif %} +
    + {{ image.description }} +
    +
    + + {% thumbnail image.image "800x800" as full_im %} + {{ image.title }} + {% endthumbnail %} +
    +{% endblock content %} + +{% block controls %} + {% if request.user == image.user or perms.imagestore.moderate_images %} +
  • {% trans "Edit info" %}
  • +
  • {% trans "Delete image" %}
  • + {% endif %} +{% endblock %} + +{% block imagestore-related %} + +
    +

    {% trans "Tags" %}

    + {% tags_for_object image as itags %} + {% for tag in itags %} + {{ tag.name }} + {% endfor %} +
    + {% if image.place %} +
    +

    {% trans "Place" %}

    + {{ image.place.name }} → +
    + {% endif %} +{% endblock %} \ No newline at end of file diff --git a/itf/imagestore/templates/imagestore/image_confirm_delete.html b/itf/imagestore/templates/imagestore/image_confirm_delete.html new file mode 100644 index 0000000..54a1323 --- /dev/null +++ b/itf/imagestore/templates/imagestore/image_confirm_delete.html @@ -0,0 +1,14 @@ +{% extends "imagestore/base.html" %} + +{% load i18n %} + +{% block content %} +

    {% trans "Are you sure that you would like to delete this image?" %}

    +
    + {% csrf_token %} +

    + ← {% trans "No, take me back" %} + +

    +
    +{% endblock %} \ No newline at end of file diff --git a/itf/imagestore/templates/imagestore/image_delete.html b/itf/imagestore/templates/imagestore/image_delete.html new file mode 100644 index 0000000..54a1323 --- /dev/null +++ b/itf/imagestore/templates/imagestore/image_delete.html @@ -0,0 +1,14 @@ +{% extends "imagestore/base.html" %} + +{% load i18n %} + +{% block content %} +

    {% trans "Are you sure that you would like to delete this image?" %}

    +
    + {% csrf_token %} +

    + ← {% trans "No, take me back" %} + +

    +
    +{% endblock %} \ No newline at end of file diff --git a/itf/imagestore/templates/imagestore/image_list.html b/itf/imagestore/templates/imagestore/image_list.html new file mode 100644 index 0000000..b0c9640 --- /dev/null +++ b/itf/imagestore/templates/imagestore/image_list.html @@ -0,0 +1,60 @@ +{% extends "imagestore/base.html" %} +{% load i18n %} +{% load thumbnail %} + +{% block imagestore-breadcrumb %} + {% with "li" as scope_tag %} + {% include "imagestore/image-scope.html" %} + {% endwith %} +{% endblock %} + +{% block title %} + {% include "imagestore/image-scope.html" %} +{% endblock %} + +{% block imagestore-info %} + {% if view_user and IMAGESTORE_SHOW_USER %} + {% with view_user.get_profile as profile %} + {% include "imagestore/user_info.html" %} + {% endwith %} + {% endif %} + {% if album and IMAGESTORE_SHOW_USER %} + {% with album.user.get_profile as profile %} + {% include "imagestore/user_info.html" %} + {% endwith %} + {% endif %} + +{% endblock %} + + +{% block controls %} + {% if album %} + {% if request.user == album.user or perms.imagestore.moderate_albums %} +
  • {% trans "Edit album" %}
  • + {% endif %} + {% endif %} +{% endblock %} + +{% block content %} +

    + {% include "imagestore/image-scope.html" %} +

    + {% include "imagestore/pagination.html" %} +
    + {% for image in image_list %} +
    + {% thumbnail image.image "120x120" crop="center" as im %} + + {{ image.title }} + {% if image.title %} +
    {{ image.title }} + {% endif %} +
    + {% endthumbnail %} +
    + {% endfor %} +
    + {% include "imagestore/pagination.html" %} +{% endblock %} + + diff --git a/itf/imagestore/templates/imagestore/pagination.html b/itf/imagestore/templates/imagestore/pagination.html new file mode 100644 index 0000000..c46ea50 --- /dev/null +++ b/itf/imagestore/templates/imagestore/pagination.html @@ -0,0 +1,26 @@ +{% load i18n %} + +{% if is_paginated %} + +{% endif %} \ No newline at end of file diff --git a/itf/imagestore/templates/imagestore/pphoto.html b/itf/imagestore/templates/imagestore/pphoto.html new file mode 100644 index 0000000..ac6dc2a --- /dev/null +++ b/itf/imagestore/templates/imagestore/pphoto.html @@ -0,0 +1,20 @@ + + + + \ No newline at end of file diff --git a/itf/imagestore/templates/imagestore/tag-cloud.html b/itf/imagestore/templates/imagestore/tag-cloud.html new file mode 100644 index 0000000..9037907 --- /dev/null +++ b/itf/imagestore/templates/imagestore/tag-cloud.html @@ -0,0 +1,12 @@ +{% load tagging_tags %} +{% load i18n %} + +{% if IMAGESTORE_SHOW_TAGS %} +
    +

    {% trans "Tags" %}

    + {% tag_cloud_for_model imagestore.Image as image_tags %} + {% for tag in image_tags %} + {{ tag.name }} + {% endfor %} +
    +{% endif %} \ No newline at end of file diff --git a/itf/imagestore/templates/imagestore/tag.html b/itf/imagestore/templates/imagestore/tag.html new file mode 100644 index 0000000..1812bd1 --- /dev/null +++ b/itf/imagestore/templates/imagestore/tag.html @@ -0,0 +1,21 @@ +{% extends "imagestore/base.html" %} + +{% load i18n %} +{% load thumbnail %} + +{% block title %} + {% trans "Gallery" %} - {% trans "Tag" %}: {{ tag }} +{% endblock %} + +{% block imagestore-breadcrumb %} +
  • {% trans "Tag" %}: {{ tag }}
  • +{% endblock %} + +{% block content %} +

    {% trans "Tag" %} - {{ tag }}

    + {% include "imagestore/image-list.html" %} +{% endblock content %} + +{% block content-related %} + {% include "imagestore/tag-cloud.html" %} +{% endblock %} \ No newline at end of file diff --git a/itf/imagestore/templates/imagestore/user_info.html b/itf/imagestore/templates/imagestore/user_info.html new file mode 100644 index 0000000..496ce50 --- /dev/null +++ b/itf/imagestore/templates/imagestore/user_info.html @@ -0,0 +1,19 @@ +{% load i18n %} +{% load thumbnail %} + + diff --git a/itf/imagestore/tests.py b/itf/imagestore/tests.py new file mode 100644 index 0000000..b2f2f5d --- /dev/null +++ b/itf/imagestore/tests.py @@ -0,0 +1,178 @@ +#!/usr/bin/env python +# vim:fileencoding=utf-8 + +__author__ = 'zeus' + +from django.test import TestCase +from django.test.client import Client +from django.core.urlresolvers import reverse +from models import * +import os +from django.contrib.auth.models import User +from django.db import models + +try: + from lxml import html +except: + raise ImportError('Imagestore require lxml for self-testing') + +class ImagestoreTest(TestCase): + def setUp(self): + self.image_file = open(os.path.join(os.path.dirname(__file__), 'test_img.jpg')) + self.user = User.objects.create_user('zeus', 'zeus@example.com', 'zeus') + self.client = Client() + self.album = Album(name='test album', user=self.user) + self.album.save() + + def _upload_test_image(self, username='zeus', password='zeus'): + self.client.login(username=username, password=password) + self.image_file = open(os.path.join(os.path.dirname(__file__), 'test_img.jpg')) + response = self.client.get(reverse('imagestore:upload')) + self.assertEqual(response.status_code, 200) + tree = html.fromstring(response.content) + values = dict(tree.xpath('//form[@method="post"]')[0].form_values()) + values['image'] = self.image_file + values['album'] = Album.objects.filter(user=self.user)[0].id + response = self.client.post(reverse('imagestore:upload'), values, follow=True) + return response + + def _create_test_album(self, username='zeus', password='zeus'): + self.client.login(username=username, password=password) + response = self.client.get(reverse('imagestore:create-album')) + self.assertEqual(response.status_code, 200) + tree = html.fromstring(response.content) + values = dict(tree.xpath('//form[@method="post"]')[0].form_values()) + values['name'] = 'test album creation' + response = self.client.post(reverse('imagestore:create-album'), values, follow=True) + return response + + def test_empty_index(self): + response = self.client.get(reverse('imagestore:index')) + self.assertEqual(response.status_code, 200) + + def test_empty_album(self): + self.album.is_public = False + self.album.save() + response = self.client.get(self.album.get_absolute_url()) + self.assertTrue(response.status_code == 403) + self.client.login(username='zeus', password='zeus') + self.user.is_superuser = True + self.user.save() + response = self.client.get(self.album.get_absolute_url()) + self.assertEqual(response.status_code, 200) + + def test_user(self): + response = self.client.get(reverse('imagestore:user', kwargs={'username': 'zeus'})) + self.assertEqual(response.status_code, 200) + + def test_album_creation(self): + response = self._create_test_album() + self.assertEqual(response.status_code, 200) + + def test_album_edit(self): + response = self._create_test_album() + album_id = Album.objects.get(name='test album creation').id + self.client.login(username='zeus', password='zeus') + response = self.client.get(reverse('imagestore:update-album', kwargs={'pk': album_id})) + self.assertEqual(response.status_code, 200) + tree = html.fromstring(response.content) + values = dict(tree.xpath('//form[@method="post"]')[0].form_values()) + values['name'] = 'test album update' + self.client.post(reverse('imagestore:update-album', kwargs={'pk': album_id}), values, follow=True) + self.assertEqual(response.status_code, 200) + self.assertTrue(Album.objects.get(id=album_id).name == 'test album update') + + def test_album_delete(self): + response = self._create_test_album() + self.client.login(username='zeus', password='zeus') + album_id = Album.objects.get(name='test album creation').id + response = self.client.post(reverse('imagestore:delete-album', kwargs={'pk': album_id}), follow=True) + self.assertEqual(response.status_code, 200) + self.assertTrue(len(Album.objects.filter(id=album_id)) == 0) + + + def test_image_upload(self): + response = self._create_test_album() + response = self._upload_test_image() + self.assertEqual(response.status_code, 200) + img_url = Image.objects.get(user__username='zeus').get_absolute_url() + response = self.client.get(img_url) + self.assertEqual(response.status_code, 200) + self.test_user() + + def test_tagging(self): + response = self._create_test_album() + self.client.login(username='zeus', password='zeus') + response = self.client.get(reverse('imagestore:upload')) + self.assertEqual(response.status_code, 200) + tree = html.fromstring(response.content) + values = dict(tree.xpath('//form[@method="post"]')[0].form_values()) + values['image'] = self.image_file + values['tags'] = 'one, tow, three' + values['album'] = Album.objects.filter(user=self.user)[0].id + self.client.post(reverse('imagestore:upload'), values, follow=True) + self.assertEqual(response.status_code, 200) + response = self.client.get(reverse('imagestore:tag', kwargs={'tag': 'one'})) + self.assertEqual(response.status_code, 200) + self.assertTrue(len(response.context['image_list']) == 1) + + def test_delete(self): + User.objects.create_user('bad', 'bad@example.com', 'bad') + response = self._create_test_album() + self._upload_test_image() + self.client.login(username='bad', password='bad') + image_id = Image.objects.get(user__username='zeus').id + response = self.client.post(reverse('imagestore:delete-image', kwargs={'pk': image_id}), follow=True) + self.assertEqual(response.status_code, 404) + self.client.login(username='zeus', password='zeus') + response = self.client.post(reverse('imagestore:delete-image', kwargs={'pk': image_id}), follow=True) + self.assertEqual(response.status_code, 200) + self.assertEqual(len(Image.objects.all()), 0) + + def test_update_image(self): + self._upload_test_image() + self.client.login(username='zeus', password='zeus') + image_id = Image.objects.get(user__username='zeus').id + response = self.client.get(reverse('imagestore:update-image', kwargs={'pk': image_id}), follow=True) + self.assertEqual(response.status_code, 200) + tree = html.fromstring(response.content) + values = dict(tree.xpath('//form[@method="post"]')[0].form_values()) + values['tags'] = 'one, tow, three' + values['title'] = 'changed title' + values['album'] = Album.objects.filter(user=self.user)[0].id + self.client.post(reverse('imagestore:update-image', kwargs={'pk': image_id}), values, follow=True) + self.assertEqual(response.status_code, 200) + self.assertTrue(Image.objects.get(user__username='zeus').title == 'changed title') + + def test_prev_next_with_ordering(self): + self.test_album_creation() + for i in range(1, 6): + self._upload_test_image() + img = Image.objects.order_by('-id')[0] + img.order = i + img.save() + # Swap two id's + im1 = Image.objects.get(order=2) + im2 = Image.objects.get(order=4) + im1.order, im2.order = 4, 2 + im1.save() + im2.save() + response = self.client.get(Image.objects.get(order=3).get_absolute_url()) + self.assertEqual(response.context['next'], im1) + self.assertEqual(response.context['previous'], im2) + + def test_album_order(self): + self.album.delete() + a1 = Album.objects.create(name='b2', order=1, user=self.user) + a2 = Album.objects.create(name='a1', order=2, user=self.user) + response = self.client.get(reverse('imagestore:index')) + self.assertEqual(response.status_code, 200) + self.assertEqual(response.context['object_list'][0].name, 'b2') + self.assertEqual(response.context['object_list'][1].name, 'a1') + a1.order, a2.order = 2, 1 + a1.save() + a2.save() + response = self.client.get(reverse('imagestore:index')) + self.assertEqual(response.status_code, 200) + self.assertEqual(response.context['object_list'][0].name, 'a1') + self.assertEqual(response.context['object_list'][1].name, 'b2') \ No newline at end of file diff --git a/itf/imagestore/urls.py b/itf/imagestore/urls.py new file mode 100644 index 0000000..ce7660a --- /dev/null +++ b/itf/imagestore/urls.py @@ -0,0 +1,43 @@ +from django.conf.urls.defaults import * +from tagging.models import Tag +from views import AlbumListView, ImageListView, UpdateImage, UpdateAlbum, CreateImage, CreateAlbum, DeleteImage, DeleteAlbum, ImageView + +from fancy_autocomplete.views import AutocompleteSite +autocomletes = AutocompleteSite() + +autocomletes.register( + 'tag', + queryset=Tag.objects.all(), + search_fields=('name',), + limit=10, + lookup='istartswith', +) + + +urlpatterns = patterns('imagestore.views', + url(r'^$', AlbumListView.as_view(), name='index'), + + + url(r'^album/add/$', CreateAlbum.as_view(), name='create-album'), + url(r'^album/(?P\d+)/$', ImageListView.as_view(), name='album'), + url(r'^album/(?P\d+)/edit/$', UpdateAlbum.as_view(), name='update-album'), + url(r'^album/(?P\d+)/delete/$', DeleteAlbum.as_view(), name='delete-album'), + + url(r'^tag/(?P[^/]+)/$', ImageListView.as_view(), name='tag'), + + url(r'^user/(?P\w+)/albums', AlbumListView.as_view(), name='user'), + url(r'^user/(?P\w+)/$', ImageListView.as_view(), name='user-images'), + + url(r'^upload/$', CreateImage.as_view(), name='upload'), + + url(r'^image/(?P\d+)/$', ImageView.as_view(), name='image'), + url(r'^album/(?P\d+)/image/(?P\d+)/$', ImageView.as_view(), name='image-album'), + url(r'^tag/(?P[^/]+)/image/(?P\d+)/$', ImageView.as_view(), name='image-tag'), + url(r'^image/(?P\d+)/delete/$', DeleteImage.as_view(), name='delete-image'), + url(r'^image/(?P\d+)/update/$', UpdateImage.as_view(), name='update-image'), + + url(r'^autocomplete/(.*)/$', autocomletes, name='autocomplete') + ) + + + diff --git a/itf/imagestore/utils.py b/itf/imagestore/utils.py new file mode 100644 index 0000000..973f85c --- /dev/null +++ b/itf/imagestore/utils.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python +# vim:fileencoding=utf-8 + +__author__ = 'zeus' + +import os +import uuid +from django.core.exceptions import ImproperlyConfigured +from django.utils.importlib import import_module +from django.conf import settings + +UPLOAD_TO = getattr(settings, 'IMAGESTORE_UPLOAD_TO', 'imagestore/') + +def load_class(class_path, setting_name=None): + """ + Loads a class given a class_path. + The setting_name parameter is only there for pretty error output, and + therefore is optional + + Taken from https://github.com/divio/django-shop/blob/master/shop/util/loader.py + """ + try: + class_module, class_name = class_path.rsplit('.', 1) + except ValueError: + if setting_name: + txt = '%s isn\'t a valid module. Check your %s setting' % (class_path,setting_name) + else: + txt = '%s isn\'t a valid module.' % class_path + raise ImproperlyConfigured(txt) + + try: + mod = import_module(class_module) + except ImportError, e: + if setting_name: + txt = 'Error importing backend %s: "%s". Check your %s setting' % (class_module, e, setting_name) + else: + txt = 'Error importing backend %s: "%s".' % (class_module, e) + raise ImproperlyConfigured(txt) + + try: + clazz = getattr(mod, class_name) + except AttributeError, e: + if setting_name: + txt = 'Backend module "%s" does not define a "%s" class. Check your %s setting. (%s)' % (class_module, class_name, setting_name) + else: + txt = 'Backend module "%s" does not define a "%s" class. (%s)' % (class_module, class_name, e) + raise ImproperlyConfigured(txt) + return clazz + +def get_model_string(model_name): + """ + Returns the model string notation Django uses for lazily loaded ForeignKeys + (eg 'auth.User') to prevent circular imports. + This is needed to allow our crazy custom model usage. + + Taken from https://github.com/divio/django-shop/blob/master/shop/util/loader.py + """ + class_path = getattr(settings, 'IMAGESTORE_%s_MODEL' % model_name.upper().replace('_', ''), None) + if not class_path: + return 'imagestore.%s' % model_name + else: + klass = load_class(class_path) + return '%s.%s' % (klass._meta.app_label, klass.__name__) + +def get_file_path(instance, filename): + ext = filename.split('.')[-1] + filename = "%s.%s" % (uuid.uuid4(), ext) + return os.path.join(UPLOAD_TO, filename) \ No newline at end of file diff --git a/itf/imagestore/views.py b/itf/imagestore/views.py new file mode 100644 index 0000000..a65b76d --- /dev/null +++ b/itf/imagestore/views.py @@ -0,0 +1,241 @@ +from django.core.exceptions import PermissionDenied +from django.core.urlresolvers import reverse +from django.utils.decorators import method_decorator +from imagestore.models import Album, Image +from imagestore.models import image_applabel, image_classname +from imagestore.models import album_applabel, album_classname +from django.shortcuts import get_object_or_404 +from django.http import Http404, HttpResponseRedirect +from django.conf import settings +from django.contrib.auth.models import User +from django.contrib.auth.decorators import permission_required +from django.contrib.auth.decorators import login_required +from django.utils.translation import ugettext_lazy as _ +from django.views.generic import ListView, DetailView, CreateView, UpdateView, DeleteView +from tagging.models import TaggedItem +from tagging.utils import get_tag +from django.contrib.contenttypes.models import ContentType +from utils import load_class +from django.db.models import Q + +IMAGESTORE_IMAGES_ON_PAGE = getattr(settings, 'IMAGESTORE_IMAGES_ON_PAGE', 20) + +IMAGESTORE_ON_PAGE = getattr(settings, 'IMAGESTORE_ON_PAGE', 20) + +ImageForm = load_class(getattr(settings, 'IMAGESTORE_IMAGE_FORM', 'imagestore.forms.ImageForm')) +AlbumForm = load_class(getattr(settings, 'IMAGESTORE_ALBUM_FORM', 'imagestore.forms.AlbumForm')) + +class AlbumListView(ListView): + context_object_name = 'album_list' + template_name = 'imagestore/album_list.html' + paginate_by = getattr(settings, 'IMAGESTORE_ALBUMS_ON_PAGE', 20) + allow_empty = True + + def get_queryset(self): + albums = Album.objects.filter(is_public=True).select_related('head') + self.e_context = dict() + if 'username' in self.kwargs: + user = get_object_or_404(User, username=self.kwargs['username']) + albums = albums.filter(user=user) + self.e_context['view_user'] = user + return albums + + def get_context_data(self, **kwargs): + context = super(AlbumListView, self).get_context_data(**kwargs) + context.update(self.e_context) + return context + + +def get_images_queryset(self): + images = Image.objects.all() + self.e_context = dict() + if 'tag' in self.kwargs: + tag_instance = get_tag(self.kwargs['tag']) + if tag_instance is None: + raise Http404(_('No Tag found matching "%s".') % self.kwargs['tag']) + self.e_context['tag'] = tag_instance + images = TaggedItem.objects.get_by_model(images, tag_instance) + if 'username' in self.kwargs: + user = get_object_or_404(User, username=self.kwargs['username']) + self.e_context['view_user'] = user + images = images.filter(user=user) + if 'album_id' in self.kwargs: + album = get_object_or_404(Album, id=self.kwargs['album_id']) + self.e_context['album'] = album + images = images.filter(album=album) + if (not album.is_public) and\ + (self.request.user != album.user) and\ + (not self.request.user.has_perm('imagestore.moderate_albums')): + raise PermissionDenied + return images + + +class ImageListView(ListView): + context_object_name = 'image_list' + template_name = 'imagestore/image_list.html' + paginate_by = getattr(settings, 'IMAGESTORE_IMAGES_ON_PAGE', 20) + allow_empty = True + + get_queryset = get_images_queryset + + def get_context_data(self, **kwargs): + context = super(ImageListView, self).get_context_data(**kwargs) + context.update(self.e_context) + return context + + +class ImageView(DetailView): + context_object_name = 'image' + template_name = 'imagestore/image.html' + + get_queryset = get_images_queryset + + def get_context_data(self, **kwargs): + context = super(ImageView, self).get_context_data(**kwargs) + image = context['image'] + # Check thant album is public or user have rights to see it + if image.album: + if (not image.album.is_public) and\ + (self.request.user != image.album.user) and\ + (not self.request.user.has_perm('imagestore.moderate_albums')): + raise PermissionDenied + base_qs = self.get_queryset() + count = base_qs.count() + img_pos = base_qs.filter( + Q(order__lt=image.order)| + Q(id__lt=image.id, order=image.order) + ).count() + next = None + previous = None + if count - 1 > img_pos: + try: + next = base_qs.filter( + Q(order__gt=image.order)| + Q(id__gt=image.id, order=image.order) + )[0] + except IndexError: + pass + if img_pos > 0: + try: + previous = base_qs.filter( + Q(order__lt=image.order)| + Q(id__lt=image.id, order=image.order) + ).order_by('-order', '-id')[0] + except IndexError: + pass + context['next'] = next + context['previous'] = previous + context.update(self.e_context) + return context + + +class CreateAlbum(CreateView): + template_name = 'imagestore/forms/album_form.html' + model = Album + form_class = AlbumForm + + @method_decorator(login_required) + @method_decorator(permission_required('%s.add_%s' % (album_applabel, album_classname))) + def dispatch(self, *args, **kwargs): + return super(CreateAlbum, self).dispatch(*args, **kwargs) + + def form_valid(self, form): + self.object = form.save(commit=False) + self.object.user = self.request.user + self.object.save() + return HttpResponseRedirect(self.get_success_url()) + + +def filter_album_queryset(self): + if self.request.user.has_perm('imagestore.moderate_albums'): + return Album.objects.all() + else: + return Album.objects.filter(user=self.request.user) + + +class UpdateAlbum(UpdateView): + template_name = 'imagestore/forms/album_form.html' + model = Album + form_class = AlbumForm + + get_queryset = filter_album_queryset + + @method_decorator(login_required) + @method_decorator(permission_required('%s.add_%s' % (album_applabel, album_classname))) + def dispatch(self, *args, **kwargs): + return super(UpdateAlbum, self).dispatch(*args, **kwargs) + + +class DeleteAlbum(DeleteView): + template_name = 'imagestore/album_delete.html' + model = Album + + def get_success_url(self): + return reverse('imagestore:index') + + get_queryset = filter_album_queryset + + @method_decorator(login_required) + @method_decorator(permission_required('%s.change_%s' % (album_applabel, album_classname))) + def dispatch(self, *args, **kwargs): + return super(DeleteAlbum, self).dispatch(*args, **kwargs) + + +class CreateImage(CreateView): + template_name = 'imagestore/forms/image_form.html' + model = Image + form_class = ImageForm + + @method_decorator(login_required) + @method_decorator(permission_required('%s.add_%s' % (image_applabel, image_classname))) + def dispatch(self, *args, **kwargs): + return super(CreateImage, self).dispatch(*args, **kwargs) + + def get_form(self, form_class): + return form_class(user=self.request.user, **self.get_form_kwargs()) + + def form_valid(self, form): + self.object = form.save(commit=False) + self.object.user = self.request.user + self.object.save() + if self.object.album: + self.object.album.save() + return HttpResponseRedirect(self.get_success_url()) + + +def get_edit_image_queryset(self): + if self.request.user.has_perm('%s.moderate_%s' % (image_applabel, image_classname)): + return Image.objects.all() + else: + return Image.objects.filter(user=self.request.user) + + +class UpdateImage(UpdateView): + template_name = 'imagestore/forms/image_form.html' + model = Image + form_class = ImageForm + + get_queryset = get_edit_image_queryset + + def get_form(self, form_class): + return form_class(user=self.object.user, **self.get_form_kwargs()) + + @method_decorator(login_required) + @method_decorator(permission_required('%s.change_%s' % (image_applabel, image_classname))) + def dispatch(self, *args, **kwargs): + return super(UpdateImage, self).dispatch(*args, **kwargs) + + +class DeleteImage(DeleteView): + template_name = 'imagestore/image_delete.html' + model = Image + + def get_success_url(self): + return reverse('imagestore:index') + + get_queryset = get_edit_image_queryset + + @method_decorator(login_required) + @method_decorator(permission_required('%s.delete_%s' % (image_applabel, image_classname))) + def dispatch(self, *args, **kwargs): + return super(DeleteImage, self).dispatch(*args, **kwargs) \ No newline at end of file diff --git a/itf/itfprofiles/forms.py b/itf/itfprofiles/forms.py index 549f588..1897c5a 100644 --- a/itf/itfprofiles/forms.py +++ b/itf/itfprofiles/forms.py @@ -9,6 +9,8 @@ from crispy_forms.helper import FormHelper from crispy_forms.layout import Submit from django.contrib.contenttypes.models import ContentType from app.forms import * +from imagestore.forms import AlbumForm + #Forms and Inlines for Generic Classes @@ -45,8 +47,7 @@ class PadmaClipForm(ItfForm): PadmaClipsInline = itf_inlineformset_factory(PadmaClip, extra=1, is_generic=True, form=PadmaClipForm, title="Videos") - - +AlbumsInline = itf_inlineformset_factory(Album, extra=1, is_generic=True, form=AlbumForm, title="Photo Albums") #Popup Form Classes: class PopupPersonForm(PopupForm): @@ -135,7 +136,7 @@ PersonsInline = itf_inlineformset_factory(TheatreGroup, PersonGroup, form=GroupP class TheatreGroupForm(ItfForm): - inlines = [PersonsInline, BuzzItemsInline, AwardsInline, LocationsInline] + inlines = [PersonsInline, BuzzItemsInline, AwardsInline, LocationsInline, AlbumsInline] class Meta: model = TheatreGroup diff --git a/itf/itfprofiles/models.py b/itf/itfprofiles/models.py index c9dc657..3178333 100644 --- a/itf/itfprofiles/models.py +++ b/itf/itfprofiles/models.py @@ -6,7 +6,7 @@ from django.contrib.localflavor.in_.forms import INZipCodeField #from ox.django.fields import DictField from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes import generic - +from imagestore.models import Album GENDER_CHOICES = ( ('M', 'Male'), @@ -233,7 +233,8 @@ class TheatreGroup(ItfModel): buzzitems = generic.GenericRelation("BuzzItem") website = models.URLField(blank=True, verify_exists=False) resources = models.ManyToManyField("Resource", blank=True, null=True) - locations = generic.GenericRelation("Location"), + locations = generic.GenericRelation("Location") +# albums = generic.GenericRelation(Album) nature_of_work = models.ManyToManyField("GroupOccupation", blank=True, null=True, through="GroupGroupOccupation") # locations = models.ManyToManyField("Location", blank=True, null=True, related_name="theatregroup_locations") @@ -250,11 +251,11 @@ class TheatreGroup(ItfModel): 'name': self.name, 'email': self.email, 'tel':self.tel, - 'nature_of_work': [ obj for obj in self.nature_of_work.all().order_by('groupgroupoccupation__is_main')], - 'venues': [obj for obj in self.locations], + 'nature_of_work': [obj for obj in self.nature_of_work.all().order_by('groupgroupoccupation__is_main')], + 'venues': [obj for obj in self.locations.all()], 'trainings': [obj for obj in self.trainings.all()], 'languages': [obj.name for obj in self.languages.all()], - 'venues': [obj for obj in self.locations], + #'venues': [obj for obj in self.locations], 'founded': self.year_founded, 'about': self.about, 'awards': [obj for obj in self.awards.all()], diff --git a/itf/settings.py b/itf/settings.py index 008e4f1..36a4203 100755 --- a/itf/settings.py +++ b/itf/settings.py @@ -213,6 +213,7 @@ INSTALLED_APPS = ( 'sorl.thumbnail', 'crispy_forms', 'floppyforms', + 'imagestore', # 'south', # 'user', 'ckeditor',