# HG changeset patch
# User veltr
# Date 1376071720 -7200
# Node ID bf707ad8aa1ad1d336782bf446e1f96c4db737a2
# Parent 8c071ab137ad98ceb091af63a1dfccac56a4e6a2
1st version of multilingual home
diff -r 8c071ab137ad -r bf707ad8aa1a .settings/org.eclipse.core.resources.prefs
--- a/.settings/org.eclipse.core.resources.prefs Tue Jul 30 23:08:31 2013 +0200
+++ b/.settings/org.eclipse.core.resources.prefs Fri Aug 09 20:08:40 2013 +0200
@@ -1,43 +1,43 @@
-eclipse.preferences.version=1
-encoding//src/core/import_processor.py=utf-8
-encoding//src/core/migrations/0001_initial.py=utf-8
-encoding//src/core/migrations/0002_auto__add_field_term_wikipedia_edition.py=utf-8
-encoding//src/core/migrations/0003_auto__add_srepnoticeterm.py=utf-8
-encoding//src/core/migrations/0004_auto__add_field_term_link_semantic_level.py=utf-8
-encoding//src/core/migrations/0005_set_semantic_link_level.py=utf-8
-encoding//src/core/migrations/0006_auto__del_unique_noticeimage_relative_url__add_unique_noticeimage_noti.py=utf-8
-encoding//src/core/migrations/0007_auto__add_field_term_nb_notice.py=utf-8
-encoding//src/core/migrations/0008_populate_nb_notice.py=utf-8
-encoding//src/core/migrations/0009_auto__add_field_term_parent__add_field_term_lft__add_field_term_rght__.py=utf-8
-encoding//src/core/models/notice.py=utf-8
-encoding//src/core/models/term.py=utf-8
-encoding//src/core/rdf_models.py=utf-8
-encoding//src/core/settings.py=utf-8
-encoding//src/core/templatetags/core_extras.py=utf-8
-encoding//src/core/templatetags/utils.py=utf-8
-encoding//src/core/urls.py=utf-8
-encoding//src/core/utils.py=utf-8
-encoding//src/core/wp_utils.py=utf-8
-encoding//src/jocondelab/config.py=utf-8
-encoding//src/jocondelab/forms.py=utf-8
-encoding//src/jocondelab/management/commands/import_countries.py=utf-8
-encoding//src/jocondelab/management/commands/import_csv.py=utf-8
-encoding//src/jocondelab/management/commands/import_skos.py=utf-8
-encoding//src/jocondelab/management/commands/import_term_labels.py=utf-8
-encoding//src/jocondelab/management/commands/import_terms.py=utf-8
-encoding//src/jocondelab/management/commands/populate_thesaurus_tree.py=utf-8
-encoding//src/jocondelab/migrations/0001_initial.py=utf-8
-encoding//src/jocondelab/migrations/0002_add_country_table.py=utf-8
-encoding//src/jocondelab/migrations/0003_auto_add_indexes_on_countries.py=utf-8
-encoding//src/jocondelab/models.py=utf-8
-encoding//src/jocondelab/settings.py=utf-8
-encoding//src/jocondelab/utils.py=utf-8
-encoding//src/jocondelab/views.py=utf-8
-encoding//virtualenv/web/env/venv_jocondelab/lib/python2.7/site-packages/SPARQLWrapper/__init__.py=utf8
-encoding//virtualenv/web/env/venv_jocondelab/lib/python2.7/site-packages/rdflib_sqlalchemy/__init__.py=utf-8
-encoding//virtualenv/web/env/venv_jocondelab/lib/python2.7/site-packages/requests/api.py=utf-8
-encoding//virtualenv/web/env/venv_jocondelab/lib/python2.7/site-packages/requests/exceptions.py=utf-8
-encoding//virtualenv/web/env/venv_jocondelab/lib/python2.7/site-packages/requests/hooks.py=utf-8
-encoding//virtualenv/web/env/venv_jocondelab/lib/python2.7/site-packages/requests/models.py=utf-8
-encoding//virtualenv/web/env/venv_jocondelab/lib/python2.7/site-packages/requests/sessions.py=utf-8
-encoding//virtualenv/web/env/venv_jocondelab/lib/python2.7/site-packages/wikitools/wiki.py=utf-8
+eclipse.preferences.version=1
+encoding//src/core/import_processor.py=utf-8
+encoding//src/core/migrations/0001_initial.py=utf-8
+encoding//src/core/migrations/0002_auto__add_field_term_wikipedia_edition.py=utf-8
+encoding//src/core/migrations/0003_auto__add_srepnoticeterm.py=utf-8
+encoding//src/core/migrations/0004_auto__add_field_term_link_semantic_level.py=utf-8
+encoding//src/core/migrations/0005_set_semantic_link_level.py=utf-8
+encoding//src/core/migrations/0006_auto__del_unique_noticeimage_relative_url__add_unique_noticeimage_noti.py=utf-8
+encoding//src/core/migrations/0007_auto__add_field_term_nb_notice.py=utf-8
+encoding//src/core/migrations/0008_populate_nb_notice.py=utf-8
+encoding//src/core/migrations/0009_auto__add_field_term_parent__add_field_term_lft__add_field_term_rght__.py=utf-8
+encoding//src/core/models/notice.py=utf-8
+encoding//src/core/models/term.py=utf-8
+encoding//src/core/rdf_models.py=utf-8
+encoding//src/core/settings.py=utf-8
+encoding//src/core/templatetags/core_extras.py=utf-8
+encoding//src/core/templatetags/utils.py=utf-8
+encoding//src/core/urls.py=utf-8
+encoding//src/core/utils.py=utf-8
+encoding//src/core/wp_utils.py=utf-8
+encoding//src/epoques_quantiles.py=utf-8
+encoding//src/get_notice_years.py=utf-8
+encoding//src/jocondelab/config.py=utf-8
+encoding//src/jocondelab/forms.py=utf-8
+encoding//src/jocondelab/management/commands/get_notice_years.py=utf-8
+encoding//src/jocondelab/management/commands/import_countries.py=utf-8
+encoding//src/jocondelab/management/commands/import_csv.py=utf-8
+encoding//src/jocondelab/management/commands/import_dbpedia_translations.py=utf-8
+encoding//src/jocondelab/management/commands/import_skos.py=utf-8
+encoding//src/jocondelab/management/commands/import_term_labels.py=utf-8
+encoding//src/jocondelab/management/commands/import_terms.py=utf-8
+encoding//src/jocondelab/migrations/0001_initial.py=utf-8
+encoding//src/jocondelab/migrations/0002_add_country_table.py=utf-8
+encoding//src/jocondelab/migrations/0003_auto_add_indexes_on_countries.py=utf-8
+encoding//src/jocondelab/migrations/0004_auto__add_dbpedia_tables.py=utf-8
+encoding//src/jocondelab/migrations/0005_populate_dbpedia_table.py=utf-8
+encoding//src/jocondelab/models.py=utf-8
+encoding//src/jocondelab/settings.py=utf-8
+encoding//src/jocondelab/utils.py=utf-8
+encoding//src/jocondelab/views/back_office.py=utf-8
+encoding//src/jocondelab/views/front_office.py=utf-8
+encoding//virtualenv/web/env/venv_jocondelab/lib/python2.7/site-packages/rdflib_sqlalchemy/__init__.py=utf-8
+encoding//virtualenv/web/env/venv_jocondelab/lib/python2.7/site-packages/wikitools/wiki.py=utf-8
diff -r 8c071ab137ad -r bf707ad8aa1a src/core/migrations/0008_populate_nb_notice.py
--- a/src/core/migrations/0008_populate_nb_notice.py Tue Jul 30 23:08:31 2013 +0200
+++ b/src/core/migrations/0008_populate_nb_notice.py Fri Aug 09 20:08:40 2013 +0200
@@ -27,7 +27,7 @@
transaction.leave_transaction_management()
def backwards(self, orm):
- orm['core.term'].objects.udpate(nb_notice=0)
+ orm['core.term'].objects.update(nb_notice=0)
models = {
u'auth.group': {
diff -r 8c071ab137ad -r bf707ad8aa1a src/jocondelab/management/commands/import_dbpedia_translations.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jocondelab/management/commands/import_dbpedia_translations.py Fri Aug 09 20:08:40 2013 +0200
@@ -0,0 +1,74 @@
+# -*- coding: utf-8 -*-
+'''
+Created on Aug 08, 2013
+
+@author: rvelt
+'''
+
+from core.utils import show_progress
+from django.conf import settings
+from django.core.management.base import NoArgsCommand
+from jocondelab.models import (DbpediaResource, DbpediaTranslation)
+from django.db import transaction
+import re
+from SPARQLWrapper import SPARQLWrapper2
+from optparse import make_option
+import traceback
+
+class Command(NoArgsCommand):
+
+ help = "Import tag translations from dbpedia"
+
+ option_list = NoArgsCommand.option_list + (
+ make_option('--all',
+ action='store_true',
+ dest='all',
+ default=False,
+ help='force all dbpedia uris to be updated, not only those not yet processed'
+ ),
+ )
+
+ def handle_noargs(self, **options):
+
+ langstr = ','.join(['"%s"'%l[0] for l in settings.LANGUAGES])
+ endpointre = re.compile('^http:\/\/\w+\.?dbpedia.org')
+
+ qs = DbpediaResource.objects
+
+ if not options.get('all', False):
+ qs = qs.filter(translations=None)
+
+ count = qs.count()
+
+ qs = qs.extra(select={"notice_count": "SELECT SUM(nb_notice) FROM core_term WHERE core_term.dbpedia_uri = jocondelab_dbpediaresource.uri"}).order_by("-notice_count")
+
+ writer = None
+
+ for i,obj in enumerate(qs):
+ writer = show_progress(i+1, count, obj.uri, 50, writer)
+
+ try:
+ with transaction.commit_on_success():
+ DbpediaTranslation.objects.filter(dbpediaresource=obj).delete()
+ endpointuri = settings.WIKIPEDIA_URLS[obj.lang]['dbpedia_sparql_url']
+ endpoint = SPARQLWrapper2(endpointuri)
+ sparql = """
+ select lang(?label) as ?lang, ?label where {
+ <%s> rdfs:label ?label .
+ FILTER (lang(?label) IN (%s))
+ }
+ """%(obj.uri, langstr)
+ endpoint.setQuery(sparql)
+ results = endpoint.query()
+
+ for binding in results.bindings:
+ DbpediaTranslation.objects.create(
+ dbpediaresource = obj,
+ lang = binding[u"lang"].value,
+ label = binding[u"label"].value
+ )
+ except Exception as e:
+ print "\nError processing resource %s : %s" %(obj.uri,unicode(e))
+ traceback.print_exception(type(e), e, sys.exc_info()[2])
+
+
\ No newline at end of file
diff -r 8c071ab137ad -r bf707ad8aa1a src/jocondelab/migrations/0004_auto__add_dbpedia_tables.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jocondelab/migrations/0004_auto__add_dbpedia_tables.py Fri Aug 09 20:08:40 2013 +0200
@@ -0,0 +1,103 @@
+# -*- 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 'DbpediaTranslation'
+ db.create_table(u'jocondelab_dbpediatranslation', (
+ (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('dbpediaresource', self.gf('django.db.models.fields.related.ForeignKey')(related_name='translations', to=orm['jocondelab.DbpediaResource'])),
+ ('lang', self.gf('django.db.models.fields.CharField')(max_length=15, db_index=True)),
+ ('label', self.gf('django.db.models.fields.CharField')(db_index=True, max_length=2048, blank=True)),
+ ))
+ db.send_create_signal(u'jocondelab', ['DbpediaTranslation'])
+
+ # Adding unique constraint on 'DbpediaTranslation', fields ['dbpediaresource', 'lang']
+ db.create_unique(u'jocondelab_dbpediatranslation', ['dbpediaresource_id', 'lang'])
+
+ # Adding model 'DbpediaResource'
+ db.create_table(u'jocondelab_dbpediaresource', (
+ (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('uri', self.gf('django.db.models.fields.URLField')(unique=True, max_length=2048, db_index=True)),
+ ('lang', self.gf('django.db.models.fields.CharField')(max_length=128, db_index=True)),
+ ))
+ db.send_create_signal(u'jocondelab', ['DbpediaResource'])
+
+
+ def backwards(self, orm):
+ # Removing unique constraint on 'DbpediaTranslation', fields ['dbpediaresource', 'lang']
+ db.delete_unique(u'jocondelab_dbpediatranslation', ['dbpediaresource_id', 'lang'])
+
+ # Deleting model 'DbpediaTranslation'
+ db.delete_table(u'jocondelab_dbpediatranslation')
+
+ # Deleting model 'DbpediaResource'
+ db.delete_table(u'jocondelab_dbpediaresource')
+
+
+ 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'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'jocondelab.country': {
+ 'Meta': {'object_name': 'Country'},
+ 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'unique': 'True', 'max_length': '2048', 'db_index': 'True'}),
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'iso_code_2': ('django.db.models.fields.CharField', [], {'max_length': '2', 'db_index': 'True'}),
+ 'iso_code_3': ('django.db.models.fields.CharField', [], {'max_length': '3', 'db_index': 'True'})
+ },
+ u'jocondelab.dbpediaresource': {
+ 'Meta': {'object_name': 'DbpediaResource'},
+ 'uri': ('django.db.models.fields.URLField', [], {'unique': 'True', 'max_length': '2048', 'db_index': 'True'}),
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'lang': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'})
+ },
+ u'jocondelab.dbpediatranslation': {
+ 'Meta': {'unique_together': "(('dbpediaresource', 'lang'),)", 'object_name': 'DbpediaTranslation'},
+ 'dbpediaresource': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'to': u"orm['jocondelab.DbpediaResource']"}),
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '2048', 'blank': 'True'}),
+ 'lang': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'})
+ },
+ u'jocondelab.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'}),
+ 'language': ('django.db.models.fields.CharField', [], {'default': "'en'", 'max_length': '2'}),
+ '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'})
+ }
+ }
+
+ complete_apps = ['jocondelab']
\ No newline at end of file
diff -r 8c071ab137ad -r bf707ad8aa1a src/jocondelab/migrations/0005_populate_dbpedia_table.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jocondelab/migrations/0005_populate_dbpedia_table.py Fri Aug 09 20:08:40 2013 +0200
@@ -0,0 +1,110 @@
+# -*- coding: utf-8 -*-
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import transaction, reset_queries
+from django.conf import settings
+from core.models import Term
+from core.utils import show_progress
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+ # Filling table 'DbpediaResource'
+ dbres_from_terms = Term.objects.distinct('dbpedia_uri').exclude(dbpedia_uri=None).order_by('dbpedia_uri').values_list('dbpedia_uri',flat=True)
+
+ total = len(dbres_from_terms)
+
+ transaction.enter_transaction_management(True)
+ transaction.managed()
+
+ writer = None
+ for i, dbpedia_uri in enumerate(dbres_from_terms):
+
+ writer = show_progress(i+1, total, "%s" % dbpedia_uri, 50, writer)
+
+ lang = 'fr'
+ for k in settings.WIKIPEDIA_URLS:
+ prefix = settings.WIKIPEDIA_URLS[k]['dbpedia_uri']%""
+ if dbpedia_uri.find(prefix) == 0:
+ lang = k
+
+ orm['jocondelab.dbpediaresource'].objects.create(
+ uri = dbpedia_uri,
+ lang = lang)
+
+ if not ((i+1) % 5000):
+ transaction.commit()
+ reset_queries()
+
+ transaction.commit()
+ reset_queries()
+ transaction.leave_transaction_management()
+
+
+ def backwards(self, orm):
+ # Clearing table 'DbpediaResource'
+ db.clear_table(u'jocondelab_dbpediaresource')
+
+
+ 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'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'jocondelab.country': {
+ 'Meta': {'object_name': 'Country'},
+ 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'unique': 'True', 'max_length': '2048', 'db_index': 'True'}),
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'iso_code_2': ('django.db.models.fields.CharField', [], {'max_length': '2', 'db_index': 'True'}),
+ 'iso_code_3': ('django.db.models.fields.CharField', [], {'max_length': '3', 'db_index': 'True'})
+ },
+ u'jocondelab.dbpediaresource': {
+ 'Meta': {'object_name': 'DbpediaResource'},
+ 'uri': ('django.db.models.fields.URLField', [], {'unique': 'True', 'max_length': '2048', 'db_index': 'True'}),
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'lang': ('django.db.models.fields.CharField', [], {'max_length': '128', 'db_index': 'True'})
+ },
+ u'jocondelab.dbpediatranslation': {
+ 'Meta': {'unique_together': "(('dbpediaresource', 'lang'),)", 'object_name': 'DbpediaTranslation'},
+ 'dbpediaresource': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'to': u"orm['jocondelab.DbpediaResource']"}),
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'label': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '2048', 'blank': 'True'}),
+ 'lang': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'})
+ },
+ u'jocondelab.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'}),
+ 'language': ('django.db.models.fields.CharField', [], {'default': "'en'", 'max_length': '2'}),
+ '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'})
+ }
+ }
+
+ complete_apps = ['jocondelab']
\ No newline at end of file
diff -r 8c071ab137ad -r bf707ad8aa1a src/jocondelab/models.py
--- a/src/jocondelab/models.py Tue Jul 30 23:08:31 2013 +0200
+++ b/src/jocondelab/models.py Fri Aug 09 20:08:40 2013 +0200
@@ -10,10 +10,20 @@
class User(AbstractUser):
language = models.CharField(max_length=2, default=settings.LANGUAGE_CODE[:2])
-
class Country(models.Model):
dbpedia_uri = models.URLField(max_length=2048, unique=True, blank=False, null=False, db_index=True)
iso_code_3 = models.CharField(max_length=3, unique=False, blank=False, null=False, db_index=True)
iso_code_2 = models.CharField(max_length=2, unique=False, blank=False, null=False, db_index=True)
-
\ No newline at end of file
+
+class DbpediaResource(models.Model):
+ uri = models.URLField(max_length=2048, unique=True, blank=False, null=False, db_index=True)
+ lang = models.CharField(max_length=128, unique=False, blank=False, null=False, db_index=True)
+
+class DbpediaTranslation(models.Model):
+ dbpediaresource = models.ForeignKey(DbpediaResource, blank=False, null=False, db_index=True, related_name="translations")
+ lang = models.CharField(max_length=15, unique=False, blank=False, null=False, db_index=True)
+ label = models.CharField(max_length=2048, unique=False, blank=True, null=False, db_index=True)
+
+ class Meta:
+ unique_together = ('dbpediaresource', 'lang')
diff -r 8c071ab137ad -r bf707ad8aa1a src/jocondelab/settings.py
--- a/src/jocondelab/settings.py Tue Jul 30 23:08:31 2013 +0200
+++ b/src/jocondelab/settings.py Fri Aug 09 20:08:40 2013 +0200
@@ -40,6 +40,9 @@
LANGUAGES = (
('fr', ugettext('French')),
+ ('en', ugettext('English')),
+ ('es', ugettext('Spanish')),
+ ('it', ugettext('Italian')),
)
diff -r 8c071ab137ad -r bf707ad8aa1a src/jocondelab/static/jocondelab/css/front-common.css
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jocondelab/static/jocondelab/css/front-common.css Fri Aug 09 20:08:40 2013 +0200
@@ -0,0 +1,197 @@
+/* RESET CSS STYLES */
+
+html, body, div, span, applet, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, big, cite, code,
+del, dfn, em, img, ins, kbd, q, s, samp,
+small, strike, strong, sub, sup, tt, var,
+b, u, i, center,
+dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td,
+article, aside, canvas, details, embed,
+figure, figcaption, footer, header, hgroup,
+menu, nav, output, ruby, section, summary,
+time, mark, audio, video {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font-size: 100%;
+ font: inherit;
+ vertical-align: baseline;
+}
+
+ul, li {
+ list-style: none;
+}
+
+input::-moz-focus-inner /*Remove button padding in FF*/
+{
+ border: 0;
+ padding: 0;
+}
+
+table {
+ border-collapse: separate; border-spacing: 0;
+}
+
+th, td {
+ vertical-align: top;
+}
+
+img a {
+ border: none;
+}
+
+.clearfix:after {
+ content: ".";
+ display: block;
+ clear: both;
+ visibility: hidden;
+ line-height: 0;
+ height: 0;
+}
+
+.clearfix {
+ display: inline-block;
+}
+
+html[xmlns] .clearfix {
+ display: block;
+}
+
+* html .clearfix {
+ height: 1%;
+}
+
+/* END OF THE RESET PART */
+
+/* FONT DECLARATIONS */
+
+@font-face {
+ font-family: 'OpenSans';
+ font-weight: 400;
+ src: url('../font/OpenSans-Regular.woff') format('woff'),
+ url('../font/OpenSans-Regular.ttf') format('truetype'),
+ url('../font/OpenSans-Regular.svg#OpenSans') format('svg');
+}
+
+@font-face {
+ font-family: 'OpenSans';
+ font-weight: 700;
+ src: url('../font/OpenSans-Bold.woff') format('woff'),
+ url('../font/OpenSans-Bold.ttf') format('truetype'),
+ url('../font/OpenSans-Bold.svg#OpenSans-Bold') format('svg');
+}
+
+@font-face {
+ font-family: 'OpenSans';
+ font-weight: 800;
+ src: url('../font/OpenSans-ExtraBold.woff') format('woff'),
+ url('../font/OpenSans-ExtraBold.ttf') format('truetype'),
+ url('../font/OpenSans-ExtraBold.svg#OpenSans-Extrabold') format('svg');
+}
+
+/* END OF FONT DECLARATIONS */
+
+/* GLOBAL BLOCKS */
+
+body {
+ color: #000000; background: url('../img/background-pinstripe-yellow.png');
+ font-family: 'OpenSans'; font-size: 10px;
+}
+
+.header-wrapper {
+ height: 70px; background: url('../img/background-pinstripe-blue.png');
+}
+
+header, .main, footer {
+ margin: 0 auto; max-width: 960px; padding: 0 10px; clear: both;
+}
+
+footer {
+ margin: 40px auto 20px; text-align: right;
+}
+
+/* END GLOBAL BLOCKS */
+
+/* HEADER > TITLE */
+
+.main-title {
+ float: left; line-height: 50px; margin: 10px 0;
+}
+
+.main-title h1, .main-title h2 {
+ display: inline;
+}
+
+.main-title h1 {
+ font-size: 26px;
+}
+
+.main-title h2 {
+ font-size: 16px;
+}
+
+.title-lab {
+ font-weight: 800;
+}
+
+/* HEADER > FLAGS */
+
+.language-select {
+ float: right; margin-top: 10px;
+}
+
+.language-select form {
+ display: inline-block;
+}
+
+.langbutton {
+ width: 18px; height: 12px; border: none; padding: 0; text-indent: -9999px; margin: 0 0 0 5px;
+ opacity: .3;
+}
+
+.langbutton.selected, .langbutton:hover {
+ opacity: 1;
+}
+
+/* TERM CLOUD */
+
+.term-cloud {
+ line-height: 26px; width: 80%; font-size: 12px; text-align: center; margin: 0 auto;
+}
+
+.term-cloud li {
+ display: inline-block; margin: 0 10px;
+}
+
+.term-cloud a {
+ text-decoration: none; color: inherit;
+}
+
+.term-frequency {
+ font-size: .8em;
+}
+
+/* NOTICE LIST */
+
+.notice-list {
+ margin: 0 auto;
+}
+
+.notice-item {
+ width: 160px;
+ height: 160px;
+ overflow: hidden;
+ float: left;
+}
+
+.notice-item .notice-metadata {
+ display: none;
+}
+
+.notice-popin {
+ position: absolute; padding: 10px;
+ background: url('../img/background-pinstripe-yellow.png'); border: 1px solid #cccccc; box-shadow: 0 0 5px #333333;
+}
diff -r 8c071ab137ad -r bf707ad8aa1a src/jocondelab/static/jocondelab/font/OpenSans-Bold.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jocondelab/static/jocondelab/font/OpenSans-Bold.svg Fri Aug 09 20:08:40 2013 +0200
@@ -0,0 +1,21060 @@
+
+
+
diff -r 8c071ab137ad -r bf707ad8aa1a src/jocondelab/static/jocondelab/font/OpenSans-Bold.ttf
Binary file src/jocondelab/static/jocondelab/font/OpenSans-Bold.ttf has changed
diff -r 8c071ab137ad -r bf707ad8aa1a src/jocondelab/static/jocondelab/font/OpenSans-Bold.woff
Binary file src/jocondelab/static/jocondelab/font/OpenSans-Bold.woff has changed
diff -r 8c071ab137ad -r bf707ad8aa1a src/jocondelab/static/jocondelab/font/OpenSans-ExtraBold.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jocondelab/static/jocondelab/font/OpenSans-ExtraBold.svg Fri Aug 09 20:08:40 2013 +0200
@@ -0,0 +1,21059 @@
+
+
+
diff -r 8c071ab137ad -r bf707ad8aa1a src/jocondelab/static/jocondelab/font/OpenSans-ExtraBold.ttf
Binary file src/jocondelab/static/jocondelab/font/OpenSans-ExtraBold.ttf has changed
diff -r 8c071ab137ad -r bf707ad8aa1a src/jocondelab/static/jocondelab/font/OpenSans-ExtraBold.woff
Binary file src/jocondelab/static/jocondelab/font/OpenSans-ExtraBold.woff has changed
diff -r 8c071ab137ad -r bf707ad8aa1a src/jocondelab/static/jocondelab/font/OpenSans-Regular.svg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jocondelab/static/jocondelab/font/OpenSans-Regular.svg Fri Aug 09 20:08:40 2013 +0200
@@ -0,0 +1,21062 @@
+
+
+
diff -r 8c071ab137ad -r bf707ad8aa1a src/jocondelab/static/jocondelab/font/OpenSans-Regular.ttf
Binary file src/jocondelab/static/jocondelab/font/OpenSans-Regular.ttf has changed
diff -r 8c071ab137ad -r bf707ad8aa1a src/jocondelab/static/jocondelab/font/OpenSans-Regular.woff
Binary file src/jocondelab/static/jocondelab/font/OpenSans-Regular.woff has changed
diff -r 8c071ab137ad -r bf707ad8aa1a src/jocondelab/static/jocondelab/img/background-pinstripe-blue.png
Binary file src/jocondelab/static/jocondelab/img/background-pinstripe-blue.png has changed
diff -r 8c071ab137ad -r bf707ad8aa1a src/jocondelab/static/jocondelab/img/background-pinstripe-yellow.png
Binary file src/jocondelab/static/jocondelab/img/background-pinstripe-yellow.png has changed
diff -r 8c071ab137ad -r bf707ad8aa1a src/jocondelab/static/jocondelab/img/flag_en.png
Binary file src/jocondelab/static/jocondelab/img/flag_en.png has changed
diff -r 8c071ab137ad -r bf707ad8aa1a src/jocondelab/static/jocondelab/img/flag_es.png
Binary file src/jocondelab/static/jocondelab/img/flag_es.png has changed
diff -r 8c071ab137ad -r bf707ad8aa1a src/jocondelab/static/jocondelab/img/flag_fr.png
Binary file src/jocondelab/static/jocondelab/img/flag_fr.png has changed
diff -r 8c071ab137ad -r bf707ad8aa1a src/jocondelab/static/jocondelab/img/flag_it.png
Binary file src/jocondelab/static/jocondelab/img/flag_it.png has changed
diff -r 8c071ab137ad -r bf707ad8aa1a src/jocondelab/static/jocondelab/js/front-search.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jocondelab/static/jocondelab/js/front-search.js Fri Aug 09 20:08:40 2013 +0200
@@ -0,0 +1,104 @@
+/*
+ Front Search
+ * */
+
+$(function() {
+
+ var $tblist = $(".notice-list"),
+ $tbparent = $tblist.parent(),
+ $win = $(window),
+ gridsize = $(".notice-item").width() || 160,
+ $popin = null;
+
+ function removePopin() {
+ if ($popin) {
+ $popin.remove();
+ $popin = null;
+ }
+ }
+
+ function movePopin() {
+ if ($popin) {
+ var $img = $popin.find(".notice-image"),
+ $refli = $tblist.find("li[data-notice-id=" + $popin.attr("data-notice-id") + "]"),
+ $refimg = $refli.find(".notice-image"),
+ $md = $popin.find(".notice-metadata"),
+ refo = $refimg.offset(),
+ refw = $refimg.width(),
+ winw = $win.width(),
+ x = refo.left + refw / 2;
+ $popin.css({
+ top: refo.top - 11,
+ width: refw + 220
+ })
+ if (x < winw / 2) {
+ $img.css({
+ float: "left"
+ });
+ $md.css({
+ "margin-left": refw + 10,
+ "margin-right": 0
+ });
+ $popin.css({
+ right: "none",
+ left: refo.left - 11
+ });
+ } else {
+ $img.css({
+ float: "right"
+ });
+ $md.css({
+ "margin-left": 0,
+ "margin-right": refw + 10
+ });
+ $popin.css({
+ left: "none",
+ right: winw - refo.left - refw - 11
+ });
+ }
+ }
+ }
+
+ $tblist.find(".notice-item").mouseenter(function() {
+ var $this = $(this);
+ removePopin();
+ if (!$this.find(".notice-image")[0].width) {
+ return;
+ }
+ $popin = $('
').append($this.find(".notice-contents").clone());
+ $popin.attr("data-notice-id",$this.attr("data-notice-id"));
+ $popin.find(".notice-image").css("margin", 0);
+ $("body").append($popin);
+ movePopin();
+ $popin.mouseleave(removePopin);
+ });
+
+ function adaptGrid() {
+ $tblist.css({
+ padding: "0 " + Math.floor($tbparent.width() % gridsize / 2) + "px"
+ });
+ }
+
+ $tblist.find(".notice-image").load(function() {
+ var iw = this.width,
+ ih = this.height,
+ scale = gridsize / Math.min(iw, ih),
+ nw = scale * iw,
+ nh = scale * ih;
+ $(this).css({
+ width: nw + "px",
+ height: nh + "px",
+ "margin-top": (gridsize - nh) / 2 + "px",
+ "margin-left": (gridsize - nw) / 2 + "px"
+ });
+ });
+
+ $win.resize(function() {
+ adaptGrid();
+ movePopin();
+ });
+
+ adaptGrid();
+
+
+});
diff -r 8c071ab137ad -r bf707ad8aa1a src/jocondelab/templates/jocondelab/base.html
--- a/src/jocondelab/templates/jocondelab/base.html Tue Jul 30 23:08:31 2013 +0200
+++ b/src/jocondelab/templates/jocondelab/base.html Fri Aug 09 20:08:40 2013 +0200
@@ -46,7 +46,7 @@
@@ -55,7 +55,7 @@
{% block toolbar %}
{% if user.is_authenticated %}
{% endif %}
diff -r 8c071ab137ad -r bf707ad8aa1a src/jocondelab/templates/jocondelab/front_base.html
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jocondelab/templates/jocondelab/front_base.html Fri Aug 09 20:08:40 2013 +0200
@@ -0,0 +1,62 @@
+{% load i18n %}
+
+
+
+ {% block head %}
+
+
+ {% block title %}JocondeLab{% endblock %}
+
+ {% block js_import %}
+
+
+
+
+ {% endblock %}
+
+ {% block css_import %}
+
+
+ {% endblock %}
+
+ {% block css_declaration %}{% endblock %}
+
+ {% block js_declaration %}{% endblock %}
+
+ {% endblock %}
+
+
+ {% block body %}
+
+
+
+ {% block main %}
+ {% endblock %}
+
+
+
+ {% endblock %}
+
+
diff -r 8c071ab137ad -r bf707ad8aa1a src/jocondelab/templates/jocondelab/front_search.html
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/jocondelab/templates/jocondelab/front_search.html Fri Aug 09 20:08:40 2013 +0200
@@ -0,0 +1,49 @@
+{% extends "jocondelab/front_base.html" %}
+{% load i18n %}
+{% load l10n %}
+
+{% block js_import %}
+ {{block.super}}
+
+{% endblock %}
+
+{% block title %}JocondeLab » {% trans 'Multilingual search' %}{% endblock %}
+
+{% block breadcrumbs %}» {% trans 'Multilingual search' %}{% endblock %}
+
+{% block main %}
+
+
+
+ {% for notice in notices %}
+ -
+
+

+
+
+
+ {% endfor %}
+
+{% endblock %}
diff -r 8c071ab137ad -r bf707ad8aa1a src/jocondelab/templates/registration/login.html
--- a/src/jocondelab/templates/registration/login.html Tue Jul 30 23:08:31 2013 +0200
+++ b/src/jocondelab/templates/registration/login.html Fri Aug 09 20:08:40 2013 +0200
@@ -9,7 +9,7 @@