Example #1
0
    def save_settings(self, request):
        from uuid import uuid4

        config.set_configuration(
            'BOOKTYPE_SITE_NAME', self.cleaned_data['title'])
        config.set_configuration(
            'BOOKTYPE_SITE_TAGLINE', self.cleaned_data['tagline'])

        if 'favicon' in self.files:
            # just check for any kind of silly error
            try:
                prev_favicon = config.get_configuration('BOOKTYPE_SITE_FAVICON', None)
                fh, fname = misc.save_uploaded_as_file(self.files['favicon'])
                rand_name = 'favicon.%s.ico' % uuid4().hex[:8]
                shutil.move(fname, '{}/{}'.format(settings.STATIC_ROOT, rand_name))

                config.set_configuration(
                    'BOOKTYPE_SITE_FAVICON',
                    '{}/static/{}'.format(settings.BOOKTYPE_URL, rand_name)
                )

                # delete prev icon to avoid garbage
                if prev_favicon:
                    try:
                        prev_name = prev_favicon.rsplit('/', 1)[-1]
                        os.remove('{}/{}'.format(settings.STATIC_ROOT, prev_name))
                    except Exception as err:
                        logger.exception("Unable to remove previous favicon. Msg: %s" % err)
            except:
                pass

        try:
            config.save_configuration()
        except config.ConfigurationError as err:
            raise err
Example #2
0
    def save_settings(self, request):
        static_root = settings.BOOKTYPE_ROOT

        config.set_configuration('BOOKTYPE_FRONTPAGE_HISTORY',
                                 self.cleaned_data['show_changes'])
        config.set_configuration('BOOKTYPE_FRONTPAGE_USE_ANONYMOUS_PAGE',
                                 self.cleaned_data['use_anonymous_page'])
        config.set_configuration('BOOKTYPE_FRONTPAGE_ANONYMOUS_MESSAGE',
                                 self.cleaned_data['anonymous_message'])
        config.set_configuration('BOOKTYPE_FRONTPAGE_ANONYMOUS_EMAIL',
                                 self.cleaned_data['anonymous_email'])

        # anonymous page image
        destination_filename = 'anonymous_image.png'
        destination_dir = '{0}/portal/frontpage/'.format(settings.MEDIA_ROOT)
        destination_file_path = '{dir}{filename}'.format(
            dir=destination_dir, filename=destination_filename)

        if 'anonymous_image_remove' in request.POST:
            os.remove(destination_file_path)
            config.del_configuration('BOOKTYPE_FRONTPAGE_ANONYMOUS_IMAGE')
        elif 'anonymous_image' in self.files:
            try:
                fh, fname = misc.save_uploaded_as_file(
                    self.files['anonymous_image'])

                if not os.path.exists(destination_dir):
                    os.makedirs(destination_dir)

                shutil.move(fname, destination_file_path)
                config.set_configuration(
                    'BOOKTYPE_FRONTPAGE_ANONYMOUS_IMAGE',
                    '{0}portal/frontpage/anonymous_image.png'.format(
                        settings.MEDIA_URL))
            except:
                pass

        # welcome message
        if not os.path.exists('%s/templates/portal/' % static_root):
            os.makedirs('%s/templates/portal/' % static_root)

        try:
            f = open('%s/templates/portal/welcome_message.html' % static_root,
                     'w')

            text_data = self.cleaned_data.get('description', '')
            for ch in ['{%', '%}', '{{', '}}']:
                text_data = text_data.replace(ch, '')

            f.write(text_data.encode('utf8'))
            f.close()
            config.save_configuration()
        except IOError as err:
            raise err
        except config.ConfigurationError as err:
            raise err
Example #3
0
    def form_valid(self, form):
        self.object = form.save()

        all_ok = True

        if 'book_cover' in form.files.keys():
            try:
                fh, fname = misc.save_uploaded_as_file(form.files['book_cover'])
                self.object.set_cover(fname)
                os.unlink(fname)
                self.object.save()
            except Exception, e:
                logger.exception(e)
                all_ok = False
Example #4
0
    def form_valid(self, form):
        self.object = form.save()

        all_ok = True

        if 'book_cover' in form.files.keys():
            try:
                fh, fname = misc.save_uploaded_as_file(form.files['book_cover'])
                self.object.set_cover(fname)
                os.unlink(fname)
                self.object.save()
            except Exception, e:
                logger.exception(e)
                all_ok = False
Example #5
0
    def save_settings(self, request):
        static_root = settings.BOOKTYPE_ROOT

        config.set_configuration('BOOKTYPE_FRONTPAGE_HISTORY', self.cleaned_data['show_changes'])
        config.set_configuration('BOOKTYPE_FRONTPAGE_USE_ANONYMOUS_PAGE', self.cleaned_data['use_anonymous_page'])
        config.set_configuration('BOOKTYPE_FRONTPAGE_ANONYMOUS_MESSAGE', self.cleaned_data['anonymous_message'])
        config.set_configuration('BOOKTYPE_FRONTPAGE_ANONYMOUS_EMAIL', self.cleaned_data['anonymous_email'])

        # anonymous page image
        destination_filename = 'anonymous_image.png'
        destination_dir = '{0}/portal/frontpage/'.format(settings.MEDIA_ROOT)
        destination_file_path = '{dir}{filename}'.format(dir=destination_dir, filename=destination_filename)

        if 'anonymous_image_remove' in request.POST:
            os.remove(destination_file_path)
            config.del_configuration('BOOKTYPE_FRONTPAGE_ANONYMOUS_IMAGE')
        elif 'anonymous_image' in self.files:
            try:
                fh, fname = misc.save_uploaded_as_file(self.files['anonymous_image'])

                if not os.path.exists(destination_dir):
                    os.makedirs(destination_dir)

                shutil.move(fname, destination_file_path)
                config.set_configuration('BOOKTYPE_FRONTPAGE_ANONYMOUS_IMAGE',
                                         '{0}portal/frontpage/anonymous_image.png'.format(settings.MEDIA_URL))
            except:
                pass

        # welcome message
        if not os.path.exists('%s/templates/portal/' % static_root):
            os.makedirs('%s/templates/portal/' % static_root)

        try:
            f = open(
                '%s/templates/portal/welcome_message.html' % static_root, 'w')

            text_data = self.cleaned_data.get('description', '')
            for ch in ['{%', '%}', '{{', '}}']:
                text_data = text_data.replace(ch, '')

            f.write(text_data.encode('utf8'))
            f.close()
            config.save_configuration()
        except IOError as err:
            raise err
        except config.ConfigurationError as err:
            raise err
Example #6
0
    def save_settings(self, request):
        book = create_book(self.cleaned_data['owner'],
                           self.cleaned_data['title'])
        book.license = self.cleaned_data['license']
        book.description = self.cleaned_data['description']
        book.hidden = self.cleaned_data['is_hidden']
        book.save()

        if 'cover' in self.files:
            try:
                fh, fname = misc.save_uploaded_as_file(self.files['cover'])
                book.set_cover(fname)
                os.unlink(fname)
            except:
                pass

        book.save()

        return book
Example #7
0
    def save_settings(self, request):
        book = create_book(
            self.cleaned_data['owner'],
            self.cleaned_data['title']
        )
        book.license = self.cleaned_data['license']
        book.description = self.cleaned_data['description']
        book.hidden = self.cleaned_data['is_hidden']
        book.save()

        if 'cover' in self.files:
            try:
                fh, fname = misc.save_uploaded_as_file(self.files['cover'])
                book.set_cover(fname)
                os.unlink(fname)
            except:
                pass

        book.save()

        return book
Example #8
0
    def save_settings(self, request):
        from uuid import uuid4

        config.set_configuration('BOOKTYPE_SITE_NAME',
                                 self.cleaned_data['title'])
        config.set_configuration('BOOKTYPE_SITE_TAGLINE',
                                 self.cleaned_data['tagline'])
        config.set_configuration('BOOKTYPE_FRONTPAGE_URL',
                                 self.cleaned_data['frontpage_url'])

        if 'favicon' in self.files:
            # just check for any kind of silly error
            try:
                prev_favicon = config.get_configuration(
                    'BOOKTYPE_SITE_FAVICON', None)
                fh, fname = misc.save_uploaded_as_file(self.files['favicon'])
                rand_name = 'favicon.%s.ico' % uuid4().hex[:8]
                shutil.move(fname, '{}/{}'.format(settings.STATIC_ROOT,
                                                  rand_name))

                config.set_configuration(
                    'BOOKTYPE_SITE_FAVICON',
                    '{}{}'.format(settings.STATIC_URL, rand_name))

                # delete prev icon to avoid garbage
                if prev_favicon:
                    try:
                        prev_name = prev_favicon.rsplit('/', 1)[-1]
                        os.remove('{}/{}'.format(settings.STATIC_ROOT,
                                                 prev_name))
                    except Exception as err:
                        logger.exception(
                            "Unable to remove previous favicon. Msg: %s" % err)
            except:
                pass

        try:
            config.save_configuration()
        except config.ConfigurationError as err:
            raise err
Example #9
0
    def post(self, request, *args, **kwargs):
        book = create_book(request.user, request.POST.get('title'))
        lic = License.objects.get(abbrevation=request.POST.get('license'))

        book.license = lic
        book.description = request.POST.get('description', '')
        book.hidden = (request.POST.get('hidden', None) == 'on')

        if 'cover' in request.FILES:
            try:
                fh, fname = misc.save_uploaded_as_file(request.FILES['cover'])
                book.setCover(fname)
                os.unlink(fname)
            except:
                pass

        book.save()

        return render(request, 'account/create_book_redirect.html', {
            "request": request,
            "book": book
        })
Example #10
0
    def post(self, request, *args, **kwargs):
        book = create_book(request.user, request.POST.get('title'))
        lic = License.objects.get(abbrevation=request.POST.get('license'))

        book.license = lic
        book.description = request.POST.get('description', '')
        book.hidden = (request.POST.get('hidden', None) == 'on')

        if 'cover' in request.FILES:
            try:
                fh, fname = misc.save_uploaded_as_file(request.FILES['cover'])
                book.setCover(fname)
                os.unlink(fname)
            except:
                pass

        book.save()

        return render(
            request,
            'account/create_book_redirect.html',
            {"request": request, "book": book}
        )
Example #11
0
    def post(self, request, *args, **kwargs):
        # TODO: convert this into an atomic view
        # TODO: use the form class to achieve this process and simplify this view and add validations
        # TODO: we should print warnings so user knows what's going on

        data = request.POST
        book = create_book(request.user, data.get('title'))

        license = License.objects.get(abbrevation=data.get('license'))
        language = Language.objects.get(abbrevation=data.get('language'))

        # STEP 1: Details
        book.author = data.get('author')
        book.license = license
        book.language = language
        book.hidden = (data.get('visible_to_everyone', None) == 'off')
        book.description = data.get('description', '')

        # STEP 2: Metadata
        metaform = MetadataForm(book=book, data=data)
        if metaform.is_valid():
            metaform.save_settings(book, request)
        else:
            pass

        # STEP 3: Creation mode
        creation_mode = data.get('creation_mode', 'scratch')
        if creation_mode == 'based_on_book':
            try:
                base_book = Book.objects.get(id=request.POST.get('base_book'))
                base_book_version = base_book.get_version(None)
                result = import_based_on_book(base_book_version, book)
            except Book.DoesNotExist:
                logger.warn("Provided base book was not found")

        elif creation_mode == 'based_on_skeleton':
            try:
                base_skeleton = BookSkeleton.objects.get(
                    id=request.POST.get('base_skeleton'))
                result = import_based_on_epub(base_skeleton.skeleton_file,
                                              book)
            except BookSkeleton.DoesNotExist:
                logger.warn("Provided base skeleton was not found")

        elif creation_mode == 'based_on_file':
            import_file = request.FILES.get('import_file')
            if import_file is not None:
                try:
                    result = import_based_on_file(import_file, book)  # noqa
                except Exception as err:
                    logger.error(
                        "ImportError: Something went wrong importing file. Msg %s"
                        % err)

        # STEP 4: Book Cover
        if 'cover_image' in request.FILES:
            # first we create a cover registry and upload the file
            file_data = request.FILES['cover_image']
            filename = file_data.name

            cover_license = License.objects.get(
                abbrevation=data.get('cover_license'))

            cover = BookCover(book=book,
                              user=request.user,
                              cid=uuid.uuid4().hex,
                              title=data.get('cover_title'),
                              filename=filename[:250],
                              creator=data.get('cover_creator', '')[:40],
                              license=cover_license,
                              approved=False)
            cover.save()

            # now save the cover attachment
            cover.attachment.save(filename, file_data, save=False)
            cover.save()

            # and then finally, we set the book thumbnail
            try:
                fh, fname = misc.save_uploaded_as_file(file_data)
                book.set_cover(fname)
                os.unlink(fname)
            except:
                pass

        book.save()

        redirect_url = reverse('reader:infopage', args=[book.url_title])
        return HttpResponse(json.dumps({'redirect': redirect_url}),
                            'application/json')
Example #12
0
    def post(self, request, *args, **kwargs):
        # TODO: convert this into an atomic view
        # TODO: use the form class to achieve this process and simplify this view and add validations
        # TODO: we should print warnings so user knows what's going on

        data = request.POST
        book = create_book(request.user, data.get('title'))

        license = License.objects.get(abbrevation=data.get('license'))
        language = Language.objects.get(abbrevation=data.get('language'))

        # STEP 1: Details
        book.author = data.get('author')
        book.license = license
        book.language = language
        book.hidden = (data.get('visible_to_everyone', None) == 'off')
        book.description = data.get('description', '')

        # STEP 2: Metadata
        metaform = MetadataForm(book=book, data=data)
        if metaform.is_valid():
            metaform.save_settings(book, request)
        else:
            pass

        # STEP 3: Creation mode
        creation_mode = data.get('creation_mode', 'scratch')
        if creation_mode == 'based_on_book':
            try:
                base_book = Book.objects.get(id=request.POST.get('base_book'))
                base_book_version = base_book.get_version(None)
                result = import_based_on_book(base_book_version, book)
            except Book.DoesNotExist:
                logger.warn("Provided base book was not found")

        elif creation_mode == 'based_on_skeleton':
            try:
                base_skeleton = BookSkeleton.objects.get(id=request.POST.get('base_skeleton'))
                result = import_based_on_epub(base_skeleton.skeleton_file, book)
            except BookSkeleton.DoesNotExist:
                logger.warn("Provided base skeleton was not found")

        elif creation_mode == 'based_on_file':
            import_file = request.FILES.get('import_file')
            if import_file is not None:
                try:
                    result = import_based_on_file(import_file, book)  # noqa
                except Exception as err:
                    logger.error("ImportError: Something went wrong importing file. Msg %s" % err)

        # STEP 4: Book Cover
        if 'cover_image' in request.FILES:
            # first we create a cover registry and upload the file
            file_data = request.FILES['cover_image']
            filename = file_data.name

            cover_license = License.objects.get(abbrevation=data.get('cover_license'))

            cover = BookCover(
                book=book,
                user=request.user,
                cid=uuid.uuid4().hex,
                title=data.get('cover_title'),
                filename=filename[:250],
                creator=data.get('cover_creator', '')[:40],
                license=cover_license,
                approved=False)
            cover.save()

            # now save the cover attachment
            cover.attachment.save(filename, file_data, save=False)
            cover.save()

            # and then finally, we set the book thumbnail
            try:
                fh, fname = misc.save_uploaded_as_file(file_data)
                book.set_cover(fname)
                os.unlink(fname)
            except:
                pass

        book.save()

        redirect_url = reverse('reader:infopage', args=[book.url_title])
        return HttpResponse(json.dumps({'redirect': redirect_url}), 'application/json')