def edit_book(request, bookid): try: book = models.Book.objects.get(url_title__iexact=bookid) except models.Book.DoesNotExist: return pages.ErrorPage(request, "errors/book_does_not_exist.html", {"book_name": bookid}) book_version = book.getVersion(None) if request.method == "POST": frm = BookForm(request.POST, request.FILES) if request.POST["submit"] == _("Cancel"): return HttpResponseRedirect(reverse("control_book", args=[book.url_title])) if frm.is_valid(): try: book.license = frm.cleaned_data["license"] book.description = frm.cleaned_data["description"] book.is_hidden = frm.cleaned_data["is_hidden"] book.save() if request.FILES.has_key("cover"): from booki.utils import misc import os try: fh, fname = misc.saveUploadedAsFile(request.FILES["cover"]) book.setCover(fname) os.unlink(fname) except: pass book.save() messages.success(request, _("Successfuly saved changes.")) return HttpResponseRedirect(reverse("control_book", args=[book.url_title])) except: messages.warning(request, _("Unknown error while saving changes.")) else: data = {"description": book.description, "cover": book.cover} if book.owner: data["owner"] = book.owner.id if book.license: data["license"] = book.license.id frm = BookForm(initial=data) return render_to_response( "booktypecontrol/edit_book.html", {"request": request, "admin_options": ADMIN_OPTIONS, "form": frm, "book": book}, context_instance=RequestContext(request), )
def edit_info(request, bookid, version=None): """ Django View. @type request: C{django.http.HttpRequest} @param request: Client Request object @type bookid: C{string} @param bookid: Unique Book ID @type version: C{string} @param verson: Book version """ try: book = models.Book.objects.get(url_title__iexact=bookid) except models.Book.DoesNotExist: return pages.ErrorPage(request, "errors/book_does_not_exist.html", {"book_name": bookid}) book_version = book.getVersion(version) if request.method == 'POST': book.description = request.POST.get('description', '') if request.FILES.has_key('cover'): from booki.utils import misc import os try: fh, fname = misc.saveUploadedAsFile(request.FILES['cover']) book.setCover(fname) os.unlink(fname) except: pass try: book.save() return render_to_response('reader/edit_info_redirect.html', { "request": request, "book": book }) except: transaction.rollback() finally: transaction.commit() try: return render_to_response('reader/edit_info.html', { "request": request, "book": book }) except: transaction.rollback() finally: transaction.commit()
def edit_info(request, bookid, version=None): """ Django View. @type request: C{django.http.HttpRequest} @param request: Client Request object @type bookid: C{string} @param bookid: Unique Book ID @type version: C{string} @param verson: Book version """ try: book = models.Book.objects.get(url_title__iexact=bookid) except models.Book.DoesNotExist: return pages.ErrorPage(request, "errors/book_does_not_exist.html", {"book_name": bookid}) book_version = book.getVersion(version) if request.method == 'POST': book.description = request.POST.get('description', '') if request.FILES.has_key('cover'): from booki.utils import misc import os try: fh, fname = misc.saveUploadedAsFile(request.FILES['cover']) book.setCover(fname) os.unlink(fname) except: pass try: book.save() return render_to_response('reader/edit_info_redirect.html', {"request": request, "book": book}) except: transaction.rollback() finally: transaction.commit() try: return render_to_response('reader/edit_info.html', {"request": request, "book": book}) except: transaction.rollback() finally: transaction.commit()
def settings_description(request): if request.method == "POST": frm = SiteDescriptionForm(request.POST, request.FILES) if request.POST["submit"] == _("Cancel"): return HttpResponseRedirect(reverse("control_settings")) if frm.is_valid(): from booki.utils import config config.setConfiguration("BOOKTYPE_SITE_NAME", frm.cleaned_data["title"]) config.setConfiguration("BOOKTYPE_SITE_TAGLINE", frm.cleaned_data["tagline"]) if request.FILES.has_key("favicon"): from booki.utils import misc import shutil # just check for any kind of silly error try: fh, fname = misc.saveUploadedAsFile(request.FILES["favicon"]) shutil.move(fname, "%s/favicon.ico" % settings.STATIC_ROOT) config.setConfiguration("BOOKTYPE_SITE_FAVICON", "%s/static/favicon.ico" % settings.BOOKI_URL) except: pass try: config.saveConfiguration() messages.success(request, _("Successfuly saved settings.")) except config.ConfigurationError: messages.warning(request, _("Unknown error while saving changes.")) return HttpResponseRedirect(reverse("control_settings")) else: from booki.utils import config frm = SiteDescriptionForm( initial={ "title": config.getConfiguration("BOOKTYPE_SITE_NAME"), "tagline": config.getConfiguration("BOOKTYPE_SITE_TAGLINE"), } ) return render_to_response( "booktypecontrol/settings_description.html", {"request": request, "admin_options": ADMIN_OPTIONS, "form": frm}, context_instance=RequestContext(request), )
def add_book(request): from booki.utils.book import createBook if request.method == "POST": frm = NewBookForm(request.POST, request.FILES) if request.POST["submit"] == _("Cancel"): return HttpResponseRedirect(reverse("control_books")) if frm.is_valid(): try: book = createBook(frm.cleaned_data["owner"], frm.cleaned_data["title"]) book.license = frm.cleaned_data["license"] book.description = frm.cleaned_data["description"] book.is_hidden = frm.cleaned_data["is_hidden"] book.save() if request.FILES.has_key("cover"): from booki.utils import misc import os try: fh, fname = misc.saveUploadedAsFile(request.FILES["cover"]) book.setCover(fname) os.unlink(fname) except: pass book.save() messages.success(request, _("Successfuly created new book.")) return HttpResponseRedirect(reverse("control_books")) except: messages.warning(request, _("Unknown error while creating new book.")) else: frm = NewBookForm() return render_to_response( "booktypecontrol/add_book.html", {"request": request, "admin_options": ADMIN_OPTIONS, "form": frm}, context_instance=RequestContext(request), )
def create_book(request, username): """ Django View. Show content for Create Book dialog and creates book. @type request: C{django.http.HttpRequest} @param request: Django Request @type username: C{string} @param username: Username. """ from django.contrib.auth.models import User from booki.utils.misc import isBookLimitReached try: user = User.objects.get(username=username) except User.DoesNotExist: try: resp = pages.ErrorPage(request, "errors/user_does_not_exist.html", {"username": username}) except: transaction.rollback() raise else: transaction.commit() return resp if isBookLimitReached() or not request.user.is_authenticated(): try: resp = pages.ErrorPage(request, "errors/no_permissions.html") except: transaction.rollback() raise else: transaction.commit() return resp from booki.utils.book import checkBookAvailability, createBook from booki.editor import models book_visible = config.getConfiguration('CREATE_BOOK_VISIBLE') book_license = config.getConfiguration('CREATE_BOOK_LICENSE') admin_create = config.getConfiguration('ADMIN_CREATE_BOOKS') if request.user.is_superuser: admin_create = False if request.GET.get("q", "") == "check": from booki.utils.json_wrapper import json data = { "available": checkBookAvailability(request.GET.get('bookname', '').strip()) } try: resp = HttpResponse(json.dumps(data), "text/plain") except: transaction.rollback() raise else: transaction.commit() return resp if request.method == 'POST' and admin_create == False: book = None try: # hidden on # description # license # title # cover book = createBook(request.user, request.POST.get('title')) lic = models.License.objects.get( abbrevation=request.POST.get('license')) book.license = lic book.description = request.POST.get('description', '') if request.POST.get("hidden", "") == "on": is_hidden = True else: is_hidden = False book.hidden = is_hidden from django.core.files import File if request.FILES.has_key('cover'): # TODO: Show some kind of error message to the user from booki.utils import misc import os try: fh, fname = misc.saveUploadedAsFile(request.FILES['cover']) book.setCover(fname) os.unlink(fname) except: pass book.save() except: transaction.rollback() else: transaction.commit() try: resp = render_to_response('account/create_book_redirect.html', { "request": request, "user": user, "book": book }) except: transaction.rollback() raise else: transaction.commit() return resp from booki.editor.models import License licenses = License.objects.all().order_by('name') try: resp = render_to_response( 'account/create_book.html', { "request": request, "book_visible": book_visible, "book_license": book_license, "admin_create": admin_create, "licenses": licenses, "user": user }) except: transaction.rollback() raise else: transaction.commit() return resp
def create_book(request, username): """ Django View. Show content for Create Book dialog and creates book. @type request: C{django.http.HttpRequest} @param request: Django Request @type username: C{string} @param username: Username. """ from django.contrib.auth.models import User try: user = User.objects.get(username=username) except User.DoesNotExist: try: return pages.ErrorPage(request, "errors/user_does_not_exist.html", {"username": username}) except: transaction.rollback() finally: transaction.commit() if not request.user.is_authenticated(): try: return pages.ErrorPage(request, "errors/no_permissions.html") except: transaction.rollback() finally: transaction.commit() from booki.utils.book import checkBookAvailability, createBook from booki.editor import models book_visible = config.getConfiguration('CREATE_BOOK_VISIBLE') book_license = config.getConfiguration('CREATE_BOOK_LICENSE') admin_create = config.getConfiguration('ADMIN_CREATE_BOOKS') if request.user.is_superuser: admin_create = False if request.GET.get("q", "") == "check": from booki.utils.json_wrapper import json data = {"available": checkBookAvailability(request.GET.get('bookname', '').strip())} try: return HttpResponse(json.dumps(data), "text/plain") except: transaction.rollback() finally: transaction.commit() if request.method == 'POST' and admin_create == False: book = None try: # hidden on # description # license # title # cover book = createBook(request.user, request.POST.get('title')) lic = models.License.objects.get(abbrevation=request.POST.get('license')) book.license = lic book.description = request.POST.get('description', '') if request.POST.get("hidden", "") == "on": is_hidden = True else: is_hidden = False book.hidden = is_hidden from django.core.files import File if request.FILES.has_key('cover'): # TODO: Show some kind of error message to the user from booki.utils import misc import os try: fh, fname = misc.saveUploadedAsFile(request.FILES['cover']) book.setCover(fname) os.unlink(fname) except: pass book.save() except: transaction.rollback() else: transaction.commit() try: return render_to_response('account/create_book_redirect.html', {"request": request, "user": user, "book": book}) except: transaction.rollback() finally: transaction.commit() from booki.editor.models import License licenses = License.objects.all().order_by('name') try: return render_to_response('account/create_book.html', {"request": request, "book_visible": book_visible, "book_license": book_license, "admin_create": admin_create, "licenses": licenses, "user": user}) except: transaction.rollback() finally: transaction.commit()
def create_book(request, username): """ Django View. Show content for Create Book dialog and creates book. @type request: C{django.http.HttpRequest} @param request: Django Request @type username: C{string} @param username: Username. """ import os from glob import glob import datetime from xml.dom import minidom from django.contrib.auth.models import User from booki.utils.misc import isBookLimitReached try: user = User.objects.get(username=username) except User.DoesNotExist: try: resp = pages.ErrorPage(request, "errors/user_does_not_exist.html", {"username": username}) except: transaction.rollback() raise else: transaction.commit() return resp if isBookLimitReached() or not request.user.is_authenticated(): try: resp = pages.ErrorPage(request, "errors/no_permissions.html") except: transaction.rollback() raise else: transaction.commit() return resp from booki.utils.book import checkBookAvailability, createBook from booki.editor import models book_visible = config.getConfiguration('CREATE_BOOK_VISIBLE') book_license = config.getConfiguration('CREATE_BOOK_LICENSE') admin_create = config.getConfiguration('ADMIN_CREATE_BOOKS') templates_source = config.getConfiguration('BOOK_TYPES_DIR') if request.user.is_superuser: admin_create = False if request.GET.get("q", "") == "check": from booki.utils.json_wrapper import json data = {"available": checkBookAvailability(request.GET.get('bookname', '').strip())} try: resp = HttpResponse(json.dumps(data), "text/plain") except: transaction.rollback() raise else: transaction.commit() return resp if request.method == 'POST' and admin_create == False: book = None try: # hidden on # description # license # title # cover x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR') if x_forwarded_for: ip = x_forwarded_for.split(',')[-1].strip() else: ip = request.META.get('REMOTE_ADDR') book = createBook(request.user, request.POST.get('title'), ip) lic = models.License.objects.get(abbrevation=request.POST.get('license')) book.license = lic book.description = request.POST.get('description', '') if request.POST.get("hidden", "") == "on": is_hidden = True else: is_hidden = False book.hidden = is_hidden from django.core.files import File if request.FILES.has_key('cover'): # TODO: Show some kind of error message to the user from booki.utils import misc import os try: fh, fname = misc.saveUploadedAsFile(request.FILES['cover']) book.setCover(fname) os.unlink(fname) except: pass book.save() book_version = book.getVersion() tf = request.POST.get('template', '') try: xmldoc = minidom.parse(tf) chapters = xmldoc.getElementsByTagName('chapter') except: chapters = [] for chapter in chapters: chapter_title = chapter.attributes['title'].value chapter_content = u'<h1>{}</h1>'.format(chapter.attributes['content'].value) url_title = bookiSlugify(chapter_title) status = models.BookStatus.objects.filter(book=book).order_by("-weight")[0] chapter_o = models.Chapter(book=book, version = book_version, url_title = url_title, title = chapter_title, status = status, content = chapter_content, created = datetime.datetime.now(), modified = datetime.datetime.now()) chapter_o.save() toc_items = len(book_version.getTOC()) + 1 for itm in models.BookToc.objects.filter(version=book_version, book=book).order_by("-weight"): itm.weight = toc_items itm.save() toc_items -= 1 tc = models.BookToc(version=book_version, book = book, name = chapter_title, chapter = chapter_o, weight = 1, typeof = 1) tc.save() except: lines = traceback.format_exc().split('\n') for line in lines: print line transaction.rollback() else: transaction.commit() try: resp = render_to_response('account/create_book_redirect.html', {"request": request, "user": user, "book": book}) except: transaction.rollback() raise else: transaction.commit() return resp from booki.editor.models import License licenses = License.objects.all().order_by('name') try: template_files = glob(os.path.join(templates_source, '*.xml')) except: template_files = [] templates = [{'name': 'Vac\xc3\xado', 'file': '/'}] for tf in template_files: print 'parse ' + tf xmldoc = minidom.parse(tf) print 'ok' tpltag = xmldoc.getElementsByTagName('template')[0] template = {} template['name'] = tpltag.attributes['title'].value template['file'] = tf templates.append(template) try: resp = render_to_response('account/create_book.html', {"request": request, "book_visible": book_visible, "book_license": book_license, "admin_create": admin_create, "licenses": licenses, 'templates': templates, "user": user}) except: transaction.rollback() raise else: transaction.commit() return resp