示例#1
0
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),
    )
示例#2
0
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()
示例#3
0
文件: views.py 项目: Fizcus/Booktype
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()    
示例#4
0
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),
    )
示例#5
0
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),
    )
示例#6
0
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
示例#7
0
文件: views.py 项目: Fizcus/Booktype
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()    
示例#8
0
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