# HG changeset patch # User cavaliet # Date 1372258425 -7200 # Node ID b98558f8d2c1757aac2e22bf563cea35b0b2db58 # Parent 8860d922f37c1ef501e3a4774ce052b350d14a18 collection first step diff -r 8860d922f37c -r b98558f8d2c1 src/egonomy/migrations/0003_add_collection_and_items.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/egonomy/migrations/0003_add_collection_and_items.py Wed Jun 26 16:53:45 2013 +0200 @@ -0,0 +1,158 @@ +# -*- coding: 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 'Collection' + db.create_table(u'egonomy_collection', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('title', self.gf('django.db.models.fields.CharField')(max_length=2048, null=True, blank=True)), + ('description', self.gf('django.db.models.fields.TextField')(null=True, blank=True)), + ('author', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'])), + ('creation', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), + ('modification', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), + ('public', self.gf('django.db.models.fields.BooleanField')(default=True)), + ('publication_type', self.gf('django.db.models.fields.IntegerField')(default=1)), + )) + db.send_create_signal(u'egonomy', ['Collection']) + + # Adding model 'CollectionItem' + db.create_table(u'egonomy_collectionitem', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('content_type', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['contenttypes.ContentType'])), + ('object_id', self.gf('django.db.models.fields.PositiveIntegerField')()), + ('description', self.gf('django.db.models.fields.TextField')(null=True, blank=True)), + ('order', self.gf('django.db.models.fields.IntegerField')()), + ('collection', self.gf('django.db.models.fields.related.ForeignKey')(related_name='items', to=orm['egonomy.Collection'])), + )) + db.send_create_signal(u'egonomy', ['CollectionItem']) + + + def backwards(self, orm): + # Deleting model 'Collection' + db.delete_table(u'egonomy_collection') + + # Deleting model 'CollectionItem' + db.delete_table(u'egonomy_collectionitem') + + + models = { + u'auth.group': { + 'Meta': {'object_name': 'Group'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + u'auth.permission': { + 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + u'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + u'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + u'egonomy.collection': { + 'Meta': {'object_name': 'Collection'}, + 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"}), + 'creation': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'modification': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'publication_type': ('django.db.models.fields.IntegerField', [], {'default': '1'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}) + }, + u'egonomy.collectionitem': { + 'Meta': {'object_name': 'CollectionItem'}, + 'collection': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'items'", 'to': u"orm['egonomy.Collection']"}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}), + 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), + 'order': ('django.db.models.fields.IntegerField', [], {}) + }, + u'egonomy.fragment': { + 'Meta': {'object_name': 'Fragment'}, + 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"}), + 'coordinates': ('django.db.models.fields.TextField', [], {}), + 'date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'date_saved': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'image': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['egonomy.Image']"}), + 'tags': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}) + }, + u'egonomy.image': { + 'Meta': {'object_name': 'Image'}, + 'id': ('django.db.models.fields.CharField', [], {'max_length': '15', 'primary_key': 'True'}), + 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['egonomy.ImageInfo']", 'null': 'True', 'blank': 'True'}), + 'metadata': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['egonomy.ImageMetadata']"}) + }, + u'egonomy.imageinfo': { + 'Meta': {'object_name': 'ImageInfo'}, + 'exif': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'height': ('django.db.models.fields.IntegerField', [], {}), + 'id': ('django.db.models.fields.CharField', [], {'max_length': '15', 'primary_key': 'True'}), + 'image_file': ('django.db.models.fields.files.ImageField', [], {'max_length': '2048'}), + 'mimetype': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), + 'width': ('django.db.models.fields.IntegerField', [], {}) + }, + u'egonomy.imagemetadata': { + 'Meta': {'object_name': 'ImageMetadata'}, + 'auteur': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'cliche': ('django.db.models.fields.CharField', [], {'max_length': '15'}), + 'date': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'date_inserted': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'date_modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'description_pertimm': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'diametre': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '20', 'decimal_places': '15', 'blank': 'True'}), + 'droits': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'hauteur': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '20', 'decimal_places': '15', 'blank': 'True'}), + 'id': ('django.db.models.fields.CharField', [], {'max_length': '15', 'primary_key': 'True'}), + 'inventaire': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'lieu': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'localisation': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'longueur': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '20', 'decimal_places': '15', 'blank': 'True'}), + 'mentions': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'mots_cles': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'periode': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'photographe': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'profondeur': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '20', 'decimal_places': '15', 'blank': 'True'}), + 'site': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'technique': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'thesaurus_pertimm': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'titre': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'titre_pertimm': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}) + } + } + + complete_apps = ['egonomy'] \ No newline at end of file diff -r 8860d922f37c -r b98558f8d2c1 src/egonomy/models.py --- a/src/egonomy/models.py Wed Jun 26 12:02:49 2013 +0200 +++ b/src/egonomy/models.py Wed Jun 26 16:53:45 2013 +0200 @@ -7,6 +7,8 @@ from django.db import models from django.contrib.auth.models import User +from django.contrib.contenttypes.models import ContentType +from django.contrib.contenttypes import generic class ImageMetadata(models.Model): @@ -166,14 +168,15 @@ return vb - + + class Collection(models.Model): SLIDESHOW = 1 MOSAIC = 2 GEOGRAPHICAL = 3 - STATE_CHOICES = ( + PUBLICATION_CHOICES = ( (SLIDESHOW, 'slideshow'), (MOSAIC, 'mosaic'), (GEOGRAPHICAL, 'geographical') @@ -185,7 +188,20 @@ author = models.ForeignKey(User, blank=False, null=False) creation = models.DateTimeField(auto_now_add=True) modification = models.DateTimeField(auto_now=True) - public = models.BooleanField(null=False, default=True) # Collection is published or not, always published by default + public = models.BooleanField(null=False, default=True) # Collection is published or not, always published by default + publication_type = models.IntegerField(choices=PUBLICATION_CHOICES, default=1) # slideshow, mosaic ou geographical + + + +class CollectionItem(models.Model): + + content_type = models.ForeignKey(ContentType) # can be image ou fragment + object_id = models.PositiveIntegerField() + content_object = generic.GenericForeignKey('content_type', 'object_id') + description = models.TextField(blank=True, null=True) + order = models.IntegerField() + # An item belongs to only one collection. Collection will have "items" related name. + collection = models.ForeignKey(Collection, related_name='items') diff -r 8860d922f37c -r b98558f8d2c1 src/egonomy/templates/egonomy_all_collections.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/egonomy/templates/egonomy_all_collections.html Wed Jun 26 16:53:45 2013 +0200 @@ -0,0 +1,65 @@ +{% extends "egonomy_newbase.html" %} +{% load static %} +{% load i18n %} +{% load thumbnail %} +{% load navigation %} + +{% block title %}{% trans "All collection" %}{% endblock %} + +{% block css_page %} + +{% endblock %} + +{% block popins %} +
+{% endblock %} + +{% block content %} + + {% if nb_pages > 1 %}{% build_pagination nb_pages cur_page_nb url_pagination "clickable" %}{% endif %} +{% build_pagination nb_pages cur_page_nb url_pagination "clickable" %}
{% endif %} +{% endblock %} + diff -r 8860d922f37c -r b98558f8d2c1 src/egonomy/templates/egonomy_annotate_picture.html --- a/src/egonomy/templates/egonomy_annotate_picture.html Wed Jun 26 12:02:49 2013 +0200 +++ b/src/egonomy/templates/egonomy_annotate_picture.html Wed Jun 26 16:53:45 2013 +0200 @@ -5,38 +5,6 @@ {% block title %}{% trans "Annotate a picture" %}{% endblock %} -{% block popins %} - -{% endblock %} - {% block content %}
+
+{% trans "by" %} {{ col.author }}
+
+
+