From 7fc694a2a6133075d17dca19b47bf13a3af02665 Mon Sep 17 00:00:00 2001 From: sanj Date: Thu, 25 Mar 2010 20:31:51 +0530 Subject: [PATCH] print product pdf and view article frontend --- edgware/editor/models.py | 26 ++++++++++++++- edgware/editor/urls.py | 2 ++ edgware/editor/views.py | 55 +++++++++++++++++++++++++++++++- edgware/settings.py | 2 +- edgware/static/js/articleDemo.js | 4 +-- edgware/static/js/editor.js | 7 ++-- 6 files changed, 89 insertions(+), 7 deletions(-) diff --git a/edgware/editor/models.py b/edgware/editor/models.py index ff27ac6..6794b2f 100644 --- a/edgware/editor/models.py +++ b/edgware/editor/models.py @@ -79,9 +79,32 @@ class Product(models.Model): abstract = models.TextField(blank=True, null=True) videos = models.ManyToManyField("Video", blank=True) audios = models.ManyToManyField("Audio", blank=True) + def __unicode__(self): return "%s" % (self.title) + def get_print_multiplier(self, dpi): +# product = Product.objects.get(pk=self.product.id) + print_width_mm = self.typ.print_width + dpm = dpi // 25.4 + pixel_width = print_width_mm * dpm + m = pixel_width // 800.0 + return m + + def get_page_list(self): + pages = [] + articles = Article.objects.filter(page=self).order_by('order') + for a in articles: + a_pages = Page.objects.filter(article=a).order_by('page_no') + pages.extend(a_pages) + return pages + + def get_view_size(self, width=800): + aspect_ratio = self.typ.aspect_ratio + width = width + .0 + height = int(width // aspect_ratio) + return (int(width), height,) + class Video(models.Model): fil = models.ForeignKey(File) srt = models.ManyToManyField("Srt", blank=True, null=True) @@ -119,7 +142,7 @@ For delete box, prop = 'delete_box' For image_crop, prop = 'crop', For image_resize, prop = 'image_resize' -(of course this is ugly). +(of course, this is ugly). ''' class Revision(models.Model): @@ -158,6 +181,7 @@ class Article(models.Model): new_revisions_all = Revision.objects.filter(article=self).filter(id__gt=revision_no) new_revisions_others = new_revisions_all.exclude(uuid=uuid) for rev in new_revisions_others: +#If there are multiple changes on the same property of the same box, send back only the latest property value. if new_revisions_all.filter(id__gt=rev.id, prop=rev.prop, box_type=rev.box_type, page=rev.page).count() > 0: UGLY_HACK = True else: diff --git a/edgware/editor/urls.py b/edgware/editor/urls.py index e8d68c8..68fdff5 100644 --- a/edgware/editor/urls.py +++ b/edgware/editor/urls.py @@ -22,9 +22,11 @@ urlpatterns = patterns('', (r'^article/(?P\d+)/$', views.edit_article), (r'^view_page/(?P\d+)/$', views.view_page), (r'^view_article/(?P\d+)/$', views.view_article), + (r'^article_frontend/(?P\d+)/(?P\d+)/$', views.article_frontend), (r'^issue/(?P\d+)/$', views.edit_issue), (r'^issue_list/', views.issue_list), (r'^new_issue/', views.new_issue), (r'^page_pdf/', views.page_pdf), + (r'^product_pdf/', views.product_pdf), (r'^poll_changes/', views.poll_changes), ) diff --git a/edgware/editor/views.py b/edgware/editor/views.py index c8a153d..d0b7f9f 100644 --- a/edgware/editor/views.py +++ b/edgware/editor/views.py @@ -4,6 +4,8 @@ from files.models import * from django.http import HttpResponse, HttpResponseRedirect from django.shortcuts import render_to_response from django.contrib.auth.decorators import login_required +from oxdjango.decorators import login_required_json +from oxdjango.shortcuts import get_object_or_404_json try: import json except: @@ -14,6 +16,7 @@ from os.path import join from settings import MEDIA_ROOT from PIL import Image import os +from print_pdf import print_url_list @login_required def editor(request): @@ -72,7 +75,7 @@ def add_srt(request): media.save() return HttpResponse("1") -# @login_required +@login_required def edit_article(request, id): c = Category.objects.all() a = Article.objects.get(pk=id) @@ -477,6 +480,26 @@ def view_article(request, id): page_height = article.view_size()[1] return render_to_response("view_article.html", {'pages': d, 'm': m, 'width': addPx(page_width), 'height': addPx(page_height)}) +def article_frontend(request, product_id, article_order): + product = Product.objects.get(pk=product_id) + article = Article.objects.filter(product=product, order=article_order)[0] + width = product.get_view_size()[0] + height = product.get_view_size()[1] + pages = article.get_dict() + articles_before = Article.objects.filter(product=product, order__lt=article_order).order_by('order') + articles_after = Article.objects.filter(product=product, order__gt=article_order).order_by('order') + d = { + 'pages': pages, + 'height': height, + 'width': width, + 'm': 1, + 'article': article, + 'articles_before': articles_before, + 'articles_after': articles_after + } + return render_to_response("article_frontend.html", {'pages': pages, 'width': width, 'height': height, 'm': 1}) + + def poll_changes(request): a_id = request.GET['article_id'] article = Article.objects.get(pk=a_id) @@ -504,6 +527,36 @@ def page_pdf(request): os.system(cmd) return HttpResponseRedirect(output_path.replace(MEDIA_ROOT, "/static")) +''' +def article_pdf(request): + article_id = request.GET['a'] + page_links = [] + article = get_object_or_404_json(Article, pk=article_id) + pages = Page.objects.filter(article=article) +''' + +def product_pdf(request): + p_id = request.GET['id'] + product = get_object_or_404_json(Product, pk=p_id) + if request.GET.has_key('dpi'): + dpi = request.GET['dpi'] + else: + dpi = 150 + if request.GET.has_key('width'): + width_mm = request.GET['width'] + else: + width_mm = product.typ.print_width + height_mm = int(width_mm // product.typ.aspect_ratio) + pages = product.get_page_list() + m = product.get_print_multiplier(dpi) + url_list = [] + for p in pages: + url = "http://edgwareroad.org/edit/view_article/%d/?m=%f&p=%d'" % (p.article.id, m, p.id) + url_list.append(url) + output_path = MEDIA_ROOT + "/pdf/" + self.title + ".pdf" + pdf_path = print_url_list(url_list, width, height, output_path) + return HttpResponseRedirect(pdf_path.replace(MEDIA_ROOT, "/static")) + def article_json(request): article_id = request.GET['id'] article = Article.objects.get(pk=article_id) diff --git a/edgware/settings.py b/edgware/settings.py index 8feae7c..8a52ff3 100644 --- a/edgware/settings.py +++ b/edgware/settings.py @@ -2,7 +2,7 @@ import os from os.path import join -DEBUG = False +DEBUG = True TEMPLATE_DEBUG = DEBUG LOCAL_DEVELOPMENT = True APPEND_SLASH = True diff --git a/edgware/static/js/articleDemo.js b/edgware/static/js/articleDemo.js index aee79cb..88b7e37 100644 --- a/edgware/static/js/articleDemo.js +++ b/edgware/static/js/articleDemo.js @@ -15,13 +15,13 @@ $(document).ready(function() { $(this).next().slideUp(); return false; }); - +/* var playerPath = "/static/images/player.swf"; var so = new SWFObject(playerPath, 'mpl', '300', '30', '9'); so.addParam("allowfullscreen", "false"); so.addParam('flashvars', 'file=/static/images/GentlemanMiddleman.mp3'); so.write("audioPlayer"); - +*/ /* var so2 = new SWFObject(playerPath, 'mpl2', '300', '30', '9'); so2.addParam("allowfullscreen", "false"); diff --git a/edgware/static/js/editor.js b/edgware/static/js/editor.js index f420525..2c89cc3 100644 --- a/edgware/static/js/editor.js +++ b/edgware/static/js/editor.js @@ -115,7 +115,10 @@ function handleRevision(json) { } $(document).ready(function() { - + if (window.navigator.userAgent.indexOf("Firefox") == -1) { + alert("Sorry, this currently only works in Firefox."); + window.location.href = "/"; + } if (ARTICLE_ID != 0) { loadArticle(ARTICLE_ID); } else { @@ -390,7 +393,7 @@ function reSortBoxes (canvas) { } function compareZIndex(a, b) { - return $(b).css('z-index') - $(a).css('z-index'); + return parseInt($(b).css('z-index')) - parseInt($(a).css('z-index')); // console.log('gjugg'); // console.log($(b).css('z-index')); // console.log('mugg');