From d0072de89eb395f99aedcdf7804e48b547cbbeca Mon Sep 17 00:00:00 2001
From: Radek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>
Date: Mon, 23 Jan 2012 14:25:37 +0100
Subject: [PATCH 1/1] selected cites in admin

---
 apps/catalogue/templatetags/catalogue_tags.py |  4 +-
 apps/social/admin.py                          | 10 +++
 apps/social/migrations/0001_initial.py        | 64 +++++++++++++++
 apps/social/models.py                         | 17 +++-
 apps/social/templates/social/cite_promo.html  | 18 +++++
 apps/social/templatetags/social_tags.py       | 23 +++++-
 apps/social/utils.py                          | 10 ++-
 wolnelektury/settings.py                      |  1 +
 wolnelektury/static/css/base.css              | 16 ----
 wolnelektury/static/css/book_box.css          | 32 --------
 wolnelektury/static/css/cite.css              | 78 +++++++++++++++++++
 wolnelektury/static/css/main_page.css         | 33 --------
 .../templates/catalogue/book_wide.html        |  4 +-
 ...osen_fragment.html => fragment_promo.html} |  3 +-
 .../catalogue/tagged_object_list.html         |  4 +-
 wolnelektury/templates/main_page.html         | 15 +---
 16 files changed, 229 insertions(+), 103 deletions(-)
 create mode 100755 apps/social/admin.py
 create mode 100644 apps/social/migrations/0001_initial.py
 create mode 100755 apps/social/templates/social/cite_promo.html
 create mode 100755 wolnelektury/static/css/cite.css
 rename wolnelektury/templates/catalogue/{chosen_fragment.html => fragment_promo.html} (77%)

diff --git a/apps/catalogue/templatetags/catalogue_tags.py b/apps/catalogue/templatetags/catalogue_tags.py
index f6347e95d..ba8139a5e 100644
--- a/apps/catalogue/templatetags/catalogue_tags.py
+++ b/apps/catalogue/templatetags/catalogue_tags.py
@@ -323,8 +323,8 @@ def work_list(context, object_list):
     return locals()
 
 
-@register.inclusion_tag('catalogue/chosen_fragment.html')
-def promo_fragment(arg=None):
+@register.inclusion_tag('catalogue/fragment_promo.html')
+def fragment_promo(arg=None):
     if arg is None:
         fragments = Fragment.objects.all().order_by('?')
         fragment = fragments[0] if fragments.exists() else None
diff --git a/apps/social/admin.py b/apps/social/admin.py
new file mode 100755
index 000000000..298638ae5
--- /dev/null
+++ b/apps/social/admin.py
@@ -0,0 +1,10 @@
+# -*- coding: utf-8 -*-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
+from django.contrib import admin
+
+from social.models import Cite
+
+
+admin.site.register(Cite)
diff --git a/apps/social/migrations/0001_initial.py b/apps/social/migrations/0001_initial.py
new file mode 100644
index 000000000..09ccc7fc4
--- /dev/null
+++ b/apps/social/migrations/0001_initial.py
@@ -0,0 +1,64 @@
+# 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 'Cite'
+        db.create_table('social_cite', (
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('book', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['catalogue.Book'])),
+            ('text', self.gf('django.db.models.fields.TextField')()),
+            ('vip', self.gf('django.db.models.fields.CharField')(max_length=128, null=True, blank=True)),
+            ('link', self.gf('django.db.models.fields.URLField')(max_length=200)),
+        ))
+        db.send_create_signal('social', ['Cite'])
+
+
+    def backwards(self, orm):
+        
+        # Deleting model 'Cite'
+        db.delete_table('social_cite')
+
+
+    models = {
+        'catalogue.book': {
+            'Meta': {'ordering': "('sort_key',)", 'object_name': 'Book'},
+            '_related_info': ('jsonfield.fields.JSONField', [], {'null': 'True', 'blank': 'True'}),
+            'changed_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
+            'common_slug': ('django.db.models.fields.SlugField', [], {'max_length': '120', 'db_index': 'True'}),
+            'cover': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'}),
+            'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+            'epub_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'blank': 'True'}),
+            'extra_info': ('catalogue.fields.JSONField', [], {'default': "'{}'"}),
+            'gazeta_link': ('django.db.models.fields.CharField', [], {'max_length': '240', 'blank': 'True'}),
+            'html_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'language': ('django.db.models.fields.CharField', [], {'default': "'pol'", 'max_length': '3', 'db_index': 'True'}),
+            'mobi_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'blank': 'True'}),
+            'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': "orm['catalogue.Book']"}),
+            'parent_number': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+            'pdf_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'blank': 'True'}),
+            'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '120', 'db_index': 'True'}),
+            'sort_key': ('django.db.models.fields.CharField', [], {'max_length': '120', 'db_index': 'True'}),
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
+            'txt_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'blank': 'True'}),
+            'wiki_link': ('django.db.models.fields.CharField', [], {'max_length': '240', 'blank': 'True'}),
+            'xml_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'blank': 'True'})
+        },
+        'social.cite': {
+            'Meta': {'object_name': 'Cite'},
+            'book': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.Book']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'link': ('django.db.models.fields.URLField', [], {'max_length': '200'}),
+            'text': ('django.db.models.fields.TextField', [], {}),
+            'vip': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'})
+        }
+    }
+
+    complete_apps = ['social']
diff --git a/apps/social/models.py b/apps/social/models.py
index 71a836239..225477e20 100644
--- a/apps/social/models.py
+++ b/apps/social/models.py
@@ -1,3 +1,18 @@
+# -*- coding: utf-8 -*-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import models
+from django.utils.translation import ugettext_lazy as _
 
-# Create your models here.
+from catalogue.models import Book
+
+
+class Cite(models.Model):
+    book = models.ForeignKey(Book)
+    text = models.TextField(_('text'))
+    vip = models.CharField(_('VIP'), max_length=128, null=True, blank=True)
+    link = models.URLField(_('link'))
+
+    def get_absolute_url(self):
+        return self.link
diff --git a/apps/social/templates/social/cite_promo.html b/apps/social/templates/social/cite_promo.html
new file mode 100755
index 000000000..5caaf1db5
--- /dev/null
+++ b/apps/social/templates/social/cite_promo.html
@@ -0,0 +1,18 @@
+{% load i18n %}
+
+{% if cite %}
+<a href="{{ cite.get_absolute_url }}" class="cite">
+    {% if cite.vip %}
+        <p class='vip'>{{ cite.vip }} {% trans "recommends" %}:</p>
+    {% endif %}
+    <blockquote class="cite-body">
+        {{ cite.text|linebreaks|safe }}
+    </blockquote>
+    <p class="source mono">{{ cite.book.pretty_title }}</p>
+</a>
+{% else %}
+    {% if fallback %}
+        {% load fragment_promo from catalogue_tags %}
+        {% fragment_promo ctx %}
+    {% endif %}
+{% endif %}
diff --git a/apps/social/templatetags/social_tags.py b/apps/social/templatetags/social_tags.py
index 1b26d91c4..deac93df0 100755
--- a/apps/social/templatetags/social_tags.py
+++ b/apps/social/templatetags/social_tags.py
@@ -3,8 +3,29 @@
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
 from django import template
-from social.utils import likes
+from catalogue.models import Book
+from social.models import Cite
+from social.utils import likes, cites_for_tags
 
 register = template.Library()
 
 register.filter('likes', likes)
+
+
+@register.inclusion_tag('social/cite_promo.html')
+def cite_promo(ctx=None, fallback=False):
+    """Choose"""
+    if ctx is None:
+        cites = Cite.objects.all()
+    elif isinstance(ctx, Book):
+        cites = ctx.cite_set.all()
+        if not cites.exists():
+            cites = cites_for_tags([ctx.book_tag()])
+    else:
+        cites = cites_for_tags(ctx)
+
+    return {
+        'cite': cites.order_by('?')[0] if cites.exists() else None,
+        'fallback': fallback,
+        'ctx': ctx,
+    }
\ No newline at end of file
diff --git a/apps/social/utils.py b/apps/social/utils.py
index 96f0ca0c7..00cf43e28 100755
--- a/apps/social/utils.py
+++ b/apps/social/utils.py
@@ -1,7 +1,8 @@
 from django.db.models import Q
-from catalogue.models import Tag
+from catalogue.models import Book, Tag
 from catalogue import utils
 from catalogue.tasks import touch_tag
+from social.models import Cite
 
 
 def likes(user, work):
@@ -33,3 +34,10 @@ def set_sets(user, work, sets):
 
     # delete empty tags
     Tag.objects.filter(category='set', user=user, book_count=0).delete()
+
+
+def cites_for_tags(tags):
+    """Returns a QuerySet with all Cites for books with given tags."""
+    books = Book.tagged.with_all(tags).order_by().values_list('id', flat=True)
+    books = list(books)
+    return Cite.objects.filter(book__id__in=books)
diff --git a/wolnelektury/settings.py b/wolnelektury/settings.py
index 01f5737db..be5f32cbf 100644
--- a/wolnelektury/settings.py
+++ b/wolnelektury/settings.py
@@ -190,6 +190,7 @@ COMPRESS_CSS = {
             'css/jquery.countdown.css', 
 
             'css/base.css',
+            'css/cite.css',
             'css/header.css',
             'css/main_page.css',
             'css/dialogs.css',
diff --git a/wolnelektury/static/css/base.css b/wolnelektury/static/css/base.css
index 556d926c7..a188285e2 100755
--- a/wolnelektury/static/css/base.css
+++ b/wolnelektury/static/css/base.css
@@ -136,22 +136,6 @@ h2 {
 }
 
 
-a.cite {
-    display: block;
-    color: black;
-    background: white;
-    padding: 3em 2em .1em 8em;
-}
-.cite-body {
-    font-size: 1.8em;
-    line-height: 1.3em;
-}
-.cite p {
-    color: #444;
-    font-size: 1.1em;
-    margin-top: 1.6em;
-}
-
 .see-also {
     margin-left: 8em;
     float: left;
diff --git a/wolnelektury/static/css/book_box.css b/wolnelektury/static/css/book_box.css
index aefb4550f..2df2fa4e4 100755
--- a/wolnelektury/static/css/book_box.css
+++ b/wolnelektury/static/css/book_box.css
@@ -314,35 +314,3 @@ ul.inline-items li {
 .snippets .anchor {
     display: none;
 }
-
-
-.cite blockquote p {
-    margin: 0;
-}
-
-.cite blockquote {
-    padding: 0;
-    margin: 0;
-}
-
-.book-wide-box .cite {
-    /* @ 18pt */
-    width: 100%; /*23.055em;*/
-    height: 7.222em;
-    background-color: #f7f7f7;
-    margin: 0;
-    position: relative;
-    top: -0.444em;
-    right: -0.555em;
-    vertical-align: center;
-}
-
-.abook-wide-box blockquote div.cite-text {
-    padding: 0.888em;
-}
-
-.abook-wide-box blockquote p.cite-more {
-    display: inline;
-    font-size: 0.611em;
-    float: right;
-}
diff --git a/wolnelektury/static/css/cite.css b/wolnelektury/static/css/cite.css
new file mode 100755
index 000000000..54632976b
--- /dev/null
+++ b/wolnelektury/static/css/cite.css
@@ -0,0 +1,78 @@
+a.cite {
+    display: block;
+    color: black;
+    background: white;
+    padding: 3em 2em .1em 8em;
+}
+.cite-body {
+    font-size: 1.8em;
+    line-height: 1.3em;
+}
+.cite p {
+    color: #444;
+    font-size: 1.1em;
+    margin-top: 1.6em;
+}
+
+.cite .vip {
+    margin-top: 0;
+}
+
+
+
+
+#big-cite {
+    background-color: white;
+    /*padding: 10.75em 10em 8.5em 18.2em;*/
+    padding: 0;
+    margin: 0;
+}
+
+#big-cite .cite {
+    padding: 10.75em 10em 8.5em 18.2em;
+}
+
+#big-cite h2 {
+    margin: 0;
+    font-size: 1.1em;
+    color: #575c63;
+}
+
+
+#big-cite .cite-body {
+    margin: .05em;
+    font-size: 2.8em;
+    line-height: 1.2em;
+    color: #191919;
+}
+
+
+#big-cite .source {
+    color: #00a1ac;
+    margin: 0;
+    font-size: 1.1em;
+    margin: 1.1em 0.2em;
+}
+
+
+
+
+.cite blockquote p {
+    margin: 0;
+}
+
+.cite blockquote {
+    padding: 0;
+    margin: 0;
+}
+
+.book-wide-box .cite {
+    position: relative;
+    top: -0.8em;
+    right: -1em;
+    background-color: #f7f7f7;
+    vertical-align: center;
+    width: 39.5em;
+    margin: 0;
+    padding: 1em;
+}
diff --git a/wolnelektury/static/css/main_page.css b/wolnelektury/static/css/main_page.css
index 545e8d673..b32655bfd 100755
--- a/wolnelektury/static/css/main_page.css
+++ b/wolnelektury/static/css/main_page.css
@@ -1,36 +1,3 @@
-#big-cite {
-    background-color: white;
-    padding: 10.75em 10em 8.5em 18.2em;
-    margin: 0;
-}
-
-#big-cite a {
-    color: black;
-    display: block;
-}
-
-#big-cite h2 {
-    margin: 0;
-    font-size: 1.1em;
-    color: #575c63;
-}
-
-
-#big-cite-text {
-    margin: .05em;
-    font-size: 2.8em;
-    line-height: 1.2em;
-    color: #191919;
-}
-
-
-#big-cite-source {
-    color: #00a1ac;
-    margin: 0;
-    font-size: 1.1em;
-    margin: 1.1em 0.2em;
-}
-
 
 #promo-box {
     float: right;
diff --git a/wolnelektury/templates/catalogue/book_wide.html b/wolnelektury/templates/catalogue/book_wide.html
index da2754e8a..ebbea8c02 100644
--- a/wolnelektury/templates/catalogue/book_wide.html
+++ b/wolnelektury/templates/catalogue/book_wide.html
@@ -1,13 +1,13 @@
 {% extends "catalogue/book_short.html" %}
 {% load i18n %}
-{% load promo_fragment from catalogue_tags %}
+{% load cite_promo from social_tags %}
 
 {% block box-class %}book-wide-box{% endblock %}
 
 {% block right-column %}
 <div class="right-column">
     <div class="quote">
-  {% promo_fragment book %}
+  {% cite_promo book 1 %}
   </div>
 
   <div class="other-tools">
diff --git a/wolnelektury/templates/catalogue/chosen_fragment.html b/wolnelektury/templates/catalogue/fragment_promo.html
similarity index 77%
rename from wolnelektury/templates/catalogue/chosen_fragment.html
rename to wolnelektury/templates/catalogue/fragment_promo.html
index a23638e98..a3b01be16 100755
--- a/wolnelektury/templates/catalogue/chosen_fragment.html
+++ b/wolnelektury/templates/catalogue/fragment_promo.html
@@ -1,4 +1,3 @@
-{% load i18n %}
 {% load removewholetags from catalogue_tags %}
 
 {% if fragment %}
@@ -6,6 +5,6 @@
     <blockquote class="cite-body">
         {{ fragment.text|removewholetags:"a"|truncatewords_html:15|safe }}
     </blockquote>
-    <p class="mono">Adam Mickiewicz, Dziady część III</p>
+    <p class="mono">{{ fragment.book.pretty_title }}</p>
 </a>
 {% endif %}
diff --git a/wolnelektury/templates/catalogue/tagged_object_list.html b/wolnelektury/templates/catalogue/tagged_object_list.html
index 443276d0a..0777d84ee 100644
--- a/wolnelektury/templates/catalogue/tagged_object_list.html
+++ b/wolnelektury/templates/catalogue/tagged_object_list.html
@@ -1,6 +1,6 @@
 {% extends "base.html" %}
 {% load i18n %}
-{% load catalogue_tags switch_tag %}
+{% load catalogue_tags switch_tag social_tags %}
 
 {% block titleextra %}{% title_from_tags tags %}{% endblock %}
 
@@ -59,7 +59,7 @@
 
 
     <div class="right-column">
-        {% promo_fragment tags %}
+        {% cite_promo tags 1 %}
 
         <div class="see-also">
             <h2 class='mono'>{% trans "See also" %}:</h2>
diff --git a/wolnelektury/templates/main_page.html b/wolnelektury/templates/main_page.html
index 988bbb344..b4907129b 100755
--- a/wolnelektury/templates/main_page.html
+++ b/wolnelektury/templates/main_page.html
@@ -1,21 +1,14 @@
 {% extends "base.html" %}
-{% load cache i18n catalogue_tags infopages_tags %}
+{% load cache i18n catalogue_tags infopages_tags social_tags %}
 
 
 {% block title %}{% trans "Wolne Lektury internet library" %}{% endblock %}
 
 {% block body %}
 
-    <blockquote id="big-cite">
-        <a href='http://google.com'>
-        <h2 class="mono">Jarosław Lipszyc poleca:</h2>
-        <p id="big-cite-text">Dobranoc, obróć jeszcze raz na mnie oczęta,<br/>
-        (…) Daj mi pierś ucałować<br/>
-        Dobranoc, zapięta.</p>
-        <p class="mono" id="big-cite-source">Adam Mickiewicz, Dziady część III</p>
-        </a>
-    </blockquote>
-
+    <div id="big-cite">
+        {% cite_promo %}
+    </div>
 
     {% spaceless %}
 
-- 
2.20.1