print product pdf and view article frontend
This commit is contained in:
parent
4777a090d0
commit
7fc694a2a6
|
@ -79,9 +79,32 @@ class Product(models.Model):
|
||||||
abstract = models.TextField(blank=True, null=True)
|
abstract = models.TextField(blank=True, null=True)
|
||||||
videos = models.ManyToManyField("Video", blank=True)
|
videos = models.ManyToManyField("Video", blank=True)
|
||||||
audios = models.ManyToManyField("Audio", blank=True)
|
audios = models.ManyToManyField("Audio", blank=True)
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return "%s" % (self.title)
|
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):
|
class Video(models.Model):
|
||||||
fil = models.ForeignKey(File)
|
fil = models.ForeignKey(File)
|
||||||
srt = models.ManyToManyField("Srt", blank=True, null=True)
|
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_crop, prop = 'crop',
|
||||||
For image_resize, prop = 'image_resize'
|
For image_resize, prop = 'image_resize'
|
||||||
|
|
||||||
(of course this is ugly).
|
(of course, this is ugly).
|
||||||
'''
|
'''
|
||||||
|
|
||||||
class Revision(models.Model):
|
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_all = Revision.objects.filter(article=self).filter(id__gt=revision_no)
|
||||||
new_revisions_others = new_revisions_all.exclude(uuid=uuid)
|
new_revisions_others = new_revisions_all.exclude(uuid=uuid)
|
||||||
for rev in new_revisions_others:
|
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:
|
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
|
UGLY_HACK = True
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -22,9 +22,11 @@ urlpatterns = patterns('',
|
||||||
(r'^article/(?P<id>\d+)/$', views.edit_article),
|
(r'^article/(?P<id>\d+)/$', views.edit_article),
|
||||||
(r'^view_page/(?P<id>\d+)/$', views.view_page),
|
(r'^view_page/(?P<id>\d+)/$', views.view_page),
|
||||||
(r'^view_article/(?P<id>\d+)/$', views.view_article),
|
(r'^view_article/(?P<id>\d+)/$', views.view_article),
|
||||||
|
(r'^article_frontend/(?P<product_id>\d+)/(?P<article_order>\d+)/$', views.article_frontend),
|
||||||
(r'^issue/(?P<id>\d+)/$', views.edit_issue),
|
(r'^issue/(?P<id>\d+)/$', views.edit_issue),
|
||||||
(r'^issue_list/', views.issue_list),
|
(r'^issue_list/', views.issue_list),
|
||||||
(r'^new_issue/', views.new_issue),
|
(r'^new_issue/', views.new_issue),
|
||||||
(r'^page_pdf/', views.page_pdf),
|
(r'^page_pdf/', views.page_pdf),
|
||||||
|
(r'^product_pdf/', views.product_pdf),
|
||||||
(r'^poll_changes/', views.poll_changes),
|
(r'^poll_changes/', views.poll_changes),
|
||||||
)
|
)
|
||||||
|
|
|
@ -4,6 +4,8 @@ from files.models import *
|
||||||
from django.http import HttpResponse, HttpResponseRedirect
|
from django.http import HttpResponse, HttpResponseRedirect
|
||||||
from django.shortcuts import render_to_response
|
from django.shortcuts import render_to_response
|
||||||
from django.contrib.auth.decorators import login_required
|
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:
|
try:
|
||||||
import json
|
import json
|
||||||
except:
|
except:
|
||||||
|
@ -14,6 +16,7 @@ from os.path import join
|
||||||
from settings import MEDIA_ROOT
|
from settings import MEDIA_ROOT
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
import os
|
import os
|
||||||
|
from print_pdf import print_url_list
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def editor(request):
|
def editor(request):
|
||||||
|
@ -72,7 +75,7 @@ def add_srt(request):
|
||||||
media.save()
|
media.save()
|
||||||
return HttpResponse("1")
|
return HttpResponse("1")
|
||||||
|
|
||||||
# @login_required
|
@login_required
|
||||||
def edit_article(request, id):
|
def edit_article(request, id):
|
||||||
c = Category.objects.all()
|
c = Category.objects.all()
|
||||||
a = Article.objects.get(pk=id)
|
a = Article.objects.get(pk=id)
|
||||||
|
@ -477,6 +480,26 @@ def view_article(request, id):
|
||||||
page_height = article.view_size()[1]
|
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)})
|
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):
|
def poll_changes(request):
|
||||||
a_id = request.GET['article_id']
|
a_id = request.GET['article_id']
|
||||||
article = Article.objects.get(pk=a_id)
|
article = Article.objects.get(pk=a_id)
|
||||||
|
@ -504,6 +527,36 @@ def page_pdf(request):
|
||||||
os.system(cmd)
|
os.system(cmd)
|
||||||
return HttpResponseRedirect(output_path.replace(MEDIA_ROOT, "/static"))
|
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):
|
def article_json(request):
|
||||||
article_id = request.GET['id']
|
article_id = request.GET['id']
|
||||||
article = Article.objects.get(pk=article_id)
|
article = Article.objects.get(pk=article_id)
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
import os
|
import os
|
||||||
from os.path import join
|
from os.path import join
|
||||||
|
|
||||||
DEBUG = False
|
DEBUG = True
|
||||||
TEMPLATE_DEBUG = DEBUG
|
TEMPLATE_DEBUG = DEBUG
|
||||||
LOCAL_DEVELOPMENT = True
|
LOCAL_DEVELOPMENT = True
|
||||||
APPEND_SLASH = True
|
APPEND_SLASH = True
|
||||||
|
|
|
@ -15,13 +15,13 @@ $(document).ready(function() {
|
||||||
$(this).next().slideUp();
|
$(this).next().slideUp();
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
/*
|
||||||
var playerPath = "/static/images/player.swf";
|
var playerPath = "/static/images/player.swf";
|
||||||
var so = new SWFObject(playerPath, 'mpl', '300', '30', '9');
|
var so = new SWFObject(playerPath, 'mpl', '300', '30', '9');
|
||||||
so.addParam("allowfullscreen", "false");
|
so.addParam("allowfullscreen", "false");
|
||||||
so.addParam('flashvars', 'file=/static/images/GentlemanMiddleman.mp3');
|
so.addParam('flashvars', 'file=/static/images/GentlemanMiddleman.mp3');
|
||||||
so.write("audioPlayer");
|
so.write("audioPlayer");
|
||||||
|
*/
|
||||||
/*
|
/*
|
||||||
var so2 = new SWFObject(playerPath, 'mpl2', '300', '30', '9');
|
var so2 = new SWFObject(playerPath, 'mpl2', '300', '30', '9');
|
||||||
so2.addParam("allowfullscreen", "false");
|
so2.addParam("allowfullscreen", "false");
|
||||||
|
|
|
@ -115,7 +115,10 @@ function handleRevision(json) {
|
||||||
}
|
}
|
||||||
|
|
||||||
$(document).ready(function() {
|
$(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) {
|
if (ARTICLE_ID != 0) {
|
||||||
loadArticle(ARTICLE_ID);
|
loadArticle(ARTICLE_ID);
|
||||||
} else {
|
} else {
|
||||||
|
@ -390,7 +393,7 @@ function reSortBoxes (canvas) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function compareZIndex(a, b) {
|
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('gjugg');
|
||||||
// console.log($(b).css('z-index'));
|
// console.log($(b).css('z-index'));
|
||||||
// console.log('mugg');
|
// console.log('mugg');
|
||||||
|
|
Loading…
Reference in New Issue
Block a user