Beispiel #1
0
    def post(self):
        jinja = jinja2.get_jinja2(app=self.app)

        # Check if the client is logged in. If it's logged in, show the home page
        if self.session.get('session_role') == 'client':
            pages_to_show = self.session.get(
                'pages_to_show')  # Number of pages that shows the pagination
            pages = list(
            )  # Pages for the pagination (it's a list because of django for templates)

            # Retrieve the page number
            page_number = self.request.get(
                "page", self.session.get('current_number_page'))
            page_number = int(page_number)

            # If the page number sent by HTML is above 0
            if page_number > 0:
                # Initialize variables
                all_keys = list()  # New comic keys list
                comics = list()  # Comics list
                aux3 = list()  # All comic keys support list
                all_comics_user = list()  # ALL comics (for the search field)
                shelving_name = list()  # Shelving name

                # Get the shelvings
                shelvings = Shelving.query(
                    Shelving.username == self.session.get(
                        'session_name')).order(Shelving.name).fetch()

                # Set the offset for the query (offset allows to ignore an amount of query results given by its value)
                num_elems_page = self.session.get("num_elems_page")
                offset = num_elems_page * (page_number - 1)

                # Get ALL keys from ALL comics (I do this because I want to maintain the ordinations and filters done in the list)
                aux_all_keys = self.request.get("all_keys",
                                                "")  # All comic keys list

                # Check if the comics keys are empty
                if len(aux_all_keys) > 2:
                    # Transform the HTML string in a list
                    aux_all_keys = self.transform_keys(aux_all_keys)

                    # It's necessary to compare the HTML with the query list in order to obtain the desired list
                    if not self.session.get("shelving"):
                        comics = ComicBook.query(
                            ComicBook.users.username ==
                            self.session.get('session_name')).order(
                                ComicBook.users.addition_date
                            )  # All comics ordered by the addition date
                        all_comics_user = copy.copy(
                            comics)  # ALL comics (for the search field)
                        all_comics_user = all_comics_user.fetch()
                    else:
                        key = ndb.Key(urlsafe=self.session.get("shelving"))
                        comics = ComicBook.query(
                            ComicBook.users.username == self.session.get(
                                'session_name'),
                            ComicBook.users.shelving == key
                        ).order(
                            ComicBook.users.addition_date
                        )  # Comics in the shelving ordered by the addition date
                        shelving = key.get()
                        shelving_name = shelving.name
                        del shelving
                        all_comics_user = ComicBook.query(
                            ComicBook.users.username == self.session.get(
                                'session_name')).fetch(
                                )  # ALL comics (for the search field)

                    comics = comics.fetch(12)
                    # Get comics shown in the page (if --> default, else --> see shelving)
                    if not self.session.get("shelving"):
                        comics = self.get_comics_read_and_without_shelving(
                            comics
                        )  # Get read comics and the ones that aren't in a shelving
                    else:
                        self.get_comics_read(comics)

                    aux = list()
                    for comic in comics:  # Get ALL the keys
                        aux.append(comic.key.urlsafe())
                        del comic

                    for key in aux_all_keys:  # Compare the "list" given by HTML with aux for making the new all keys list (all_keys)
                        for key2 in aux:
                            if key == str(key2):
                                key2 = ndb.Key(urlsafe=key)
                                all_keys.append(key2)
                                aux3.append(key2.urlsafe())
                                break
                            del key2
                        del key

                    del aux  # Delete variables to free memory

                    # Get all db comics (Limited to the number given by the session variable [10 by default])
                    # Not ordered because it has to respect if the comic used some ordination or filter
                    comics = ComicBook.query(ComicBook.key.IN(all_keys)).fetch(
                        num_elems_page, offset=offset)

                num_total = len(aux_all_keys)  # Total number of elements

                # Setting all the comic keys
                all_keys = aux3
                del aux3  # Delete variables to free memory

                # If the total number of elements is above 0 do the pagination
                if num_total > 0:
                    # Get the number of pages for the pagination
                    num_pages = num_total / num_elems_page  # Number of pages

                    # If the page number sent by html is less than the last possible page
                    if page_number <= (num_pages + 1):
                        # Update the session current number page
                        self.session['current_number_page'] = page_number
                        current_number_page = page_number

                        # If there are less elements than session["num_elems_page"]
                        if num_pages == 0:
                            num_pages = 1  # At least one page
                        # Else
                        else:
                            # If the rest of the division is above 0
                            if (num_total % num_elems_page) > 0:
                                num_pages = (num_total / num_elems_page
                                             ) + 1  # It's necessary other page
                            else:
                                num_pages = (num_total / num_elems_page
                                             )  # It doesn't need other page

                        self.session['last_page'] = num_pages  # Last page

                        # Set the pages for the pagination
                        for i in range(1, num_pages + 1):
                            pages.append(i)

                        # If the current page is 1
                        if current_number_page == 1:
                            pages = pages[0:pages_to_show]  # Shows pages 1,2,3
                        # If the current page is the final page
                        elif current_number_page == num_pages:  # Shows the last three pages
                            if (num_pages - pages_to_show) >= 0:
                                pages = pages[(num_pages - pages_to_show):]
                            else:
                                pages = pages[0:pages_to_show]
                        # Else
                        else:
                            pages = pages[(current_number_page - 2):(
                                current_number_page +
                                1)]  # Show the current, last and next pages

                        self.session[
                            'pages'] = pages  # Pages for the pagination

                        # Set the default language of the app
                        if self.session['session_idiom'] == "spa":
                            lang = spa  # Spanish strings
                        elif self.session['session_idiom'] == "eng":
                            lang = eng  # English strings
                        else:
                            lang = eng  # Default english

                        # Setting the keys list to allow the use of the "Delete page" button
                        keys_page_list = list()
                        for comic in comics:
                            keys_page_list.append(comic.key.urlsafe())
                            del comic

                        all_comics = ComicBook.query().fetch()

                        # Variables to be sent to the HTML page
                        values = {
                            "lang":
                            lang,  # Language strings
                            "session_name":
                            self.session.get('session_name'),  # User name
                            "session_role":
                            self.session.get('session_role'),  # User role
                            "session_picture":
                            self.get_session_image(
                                self.session.get(
                                    'session_name')),  # User picture
                            "session_genre":
                            self.session.get('session_genre'),  # User genre
                            "comics":
                            comics,  # Comics
                            "current_number_page":
                            self.session.get(
                                'current_number_page'),  # Current number page
                            "pages":
                            self.session.get(
                                'pages'),  # Pages for the pagination
                            "last_page":
                            self.session.get('last_page'),  # Last page number
                            "keys_page_list":
                            keys_page_list,  # Comics keys that are currently in the page
                            "all_keys":
                            all_keys,  # All comic keys
                            "all_comics_user":
                            all_comics_user,  # All user comic (for the search field)
                            "all_comics":
                            all_comics,  # ALL comics (for the user search field)
                            "shelvings":
                            shelvings,  # All user shelvings
                            "shelving_name":
                            shelving_name  # Shelving name
                        }

                        del pages_to_show, page_number, num_elems_page, num_total, offset, \
                            num_pages, current_number_page, pages, keys_page_list, comics, aux_all_keys, all_keys,\
                            all_comics_user, shelving_name  # Delete variables to free memory

                        self.session_store.save_sessions(
                            self.response)  # Save sessions
                        self.response.write(
                            jinja.render_template(
                                "/library/default.html",
                                **values))  # Go to the library home page

                    # If it isn't less redirect to library home page
                    else:
                        del pages_to_show, page_number, pages, num_elems_page, num_total, offset, comics, num_pages, \
                            aux_all_keys, all_comics_user   # Delete variables to free memory
                        self.redirect("/library")

                # If the total number is not above 0, redirect to the library home page
                else:
                    del pages_to_show, page_number, pages, offset, comics, num_elems_page, aux_all_keys  # Delete variables to free memory
                    self.redirect("/library")

            # If it isn't above redirect to library home page
            else:
                del pages_to_show, page_number, pages  # Delete variables to free memory
                self.redirect("/library")

        # If it isn't logged in, redirect to the login page
        else:
            self.redirect("/login")
Beispiel #2
0
    def post(self):
        jinja = jinja2.get_jinja2(app=self.app)

        # Check if the client is logged in
        if self.session.get('session_role') == 'client':
            # If it's logged in, get the session variables, show the home page
            # Get the search field
            search = self.request.get("search", "")  # Sort option
            search = search.encode("utf8")

            # Set the default language of the app
            if self.session['session_idiom'] == "spa":
                lang = spa  # Spanish strings
            elif self.session['session_idiom'] == "eng":
                lang = eng  # English strings
            else:
                lang = eng  # Default english

            # Initializing variables
            all_keys = list()
            comics = list()
            pages = list()
            keys_page_list = list()
            all_comics = ComicBook.query().fetch()

            all_comics_user = ComicBook.query(
                ComicBook.users.username == self.session.get(
                    'session_name')).fetch()

            # Get the shelvings
            shelvings = Shelving.query(
                Shelving.username == self.session.get('session_name')).order(
                    Shelving.name).fetch()

            # Variables to be sent to the HTML page
            values = {
                "lang":
                lang,  # Language strings
                "session_name":
                self.session.get('session_name'),  # User name
                "session_role":
                self.session.get('session_role'),  # User role
                "session_picture":
                self.get_session_image(
                    self.session.get('session_name')),  # User picture
                "session_genre":
                self.session.get('session_genre'),  # User genre
                "comics":
                comics,  # Comics
                "current_number_page":
                self.session.get('current_number_page'),  # Current number page
                "pages":
                self.session.get('pages'),  # Pages for the pagination
                "last_page":
                self.session.get('last_page'),  # Last page number
                "keys_page_list":
                keys_page_list,  # Comics keys that are currently in the page
                "all_keys":
                all_keys,  # All comic keys
                "all_comics_user":
                all_comics_user,  # All user comic (for the search field)
                "all_comics":
                all_comics,  # ALL comics (for the user search field)
                "shelvings":
                shelvings  # All user shelvings
            }

            # Check if there is a field to search
            if search != "" and len(search) > 0:
                # Get the key sent in the search field
                key = ndb.Key(urlsafe=search)

                # Get the comics with that key
                comic = key.get()

                # Check if the comics exists
                if comic and comic is not None:
                    comics.append(comic)  # Comics list
                    comics = self.get_comics_read_and_without_shelving(
                        comics)  # Get only the comics without a shelving
                    values["comics"] = comics  # Search results

                    # Setting all the comic keys
                    all_keys.append(comic.key.urlsafe())
                    values["all_keys"] = all_keys
                    # Setting the keys list to allow the use of the "Delete page" button
                    keys_page_list.append(comic.key.urlsafe())
                    values["keys_page_list"] = keys_page_list

                # If not exists, shows a message
                else:
                    values["ok_message"] = lang[
                        "search_not_results"]  # Ok message (No matches found)

                del key, comic  # Delete variables to free memory

            # If not exists, shows a message
            else:
                values["ok_message"] = lang[
                    "search_not_results"]  # Ok message (No matches found)

            del search, comics, pages, keys_page_list, all_keys, lang, all_comics_user, all_comics  # Delete variables to free memory
            self.response.write(
                jinja.render_template("/library/default.html",
                                      **values))  # Go to the library home page

        # If it isn't logged in, redirect to the login page
        else:
            self.redirect("/login")
Beispiel #3
0
    def post(self):
        jinja = jinja2.get_jinja2(app=self.app)

        # If an client is logged in delete the comic
        if self.session.get('session_role') == 'client':
            # Retrieving the comic key
            key = self.request.get("key", "")
            key = ndb.Key(urlsafe=key)
            shelving = key.get()  # Get the db shelving with that key

            keys_page_list = self.request.get(
                "keys_page_list",
                "")  # Comic keys (only comics in the current page)
            aux_all_keys = self.request.get(
                "all_keys", "")  # All the comic keys (for the order field)

            # Initialize variables
            all_keys = list()  # All the comic keys (for the order field)
            aux = list()  # Support variable
            aux3 = list()  # Support variable
            shelving_name = list()  # Shelving name

            # Transform the HTML string in a list
            aux_all_keys = self.transform_keys(aux_all_keys)

            # Get the shelvings
            shelvings = Shelving.query(
                Shelving.username == self.session.get('session_name')).order(
                    Shelving.name).fetch()

            all_comics = ComicBook.query().fetch()
            # Get all comics that belongs to the current user
            if not self.session.get("shelving"):
                comics = ComicBook.query(
                    ComicBook.users.username ==
                    self.session.get('session_name')).order(
                        ComicBook.users.addition_date
                    )  # All comics ordered by the addition date
                all_comics_user = copy.copy(
                    comics)  # ALL comics (for the search field)
                all_comics_user = all_comics_user.fetch()
            else:
                key = ndb.Key(urlsafe=self.session.get("shelving"))
                comics = ComicBook.query(
                    ComicBook.users.username == self.session.get(
                        'session_name'),
                    ComicBook.users.shelving == key).order(
                        ComicBook.users.addition_date
                    )  # Comics in the shelving ordered by the addition date
                shelving2 = key.get()
                shelving_name = shelving2.name
                del shelving2
                all_comics_user = ComicBook.query(
                    ComicBook.users.username == self.session.get(
                        'session_name')).fetch(
                        )  # ALL comics (for the search field)

            for comic2 in comics:  # Get ALL the keys
                aux.append(comic2.key.urlsafe())
                del comic2

            for key3 in aux_all_keys:  # Compare the "list" given by HTML with aux for making the new all keys list (all_keys)
                for key2 in aux:
                    if key3 == str(key2):
                        key2 = ndb.Key(urlsafe=key2)
                        aux3.append(key2)
                        all_keys.append(key2.urlsafe())
                        break
                    del key2
                del key3

            # Get db comics
            offset = (self.session.get('current_number_page') -
                      1) * self.session.get('num_elems_page')
            if len(aux3) > 0:
                comics = ComicBook.query(ComicBook.key.IN(aux3)).fetch(
                    self.session.get('num_elems_page'), offset=offset)
                # Get the comics (if --> default, else --> see shelving)
                if not self.session.get('shelving'):
                    comics = self.get_comics_read_and_without_shelving(
                        comics
                    )  # Get read comics and the ones that aren't in a shelving
                else:
                    self.get_comics_read(comics)  # Get read comics
            else:
                comiss = list()

            # Set the default language of the app
            if self.session['session_idiom'] == "spa":
                lang = spa  # Spanish strings
            elif self.session['session_idiom'] == "eng":
                lang = eng  # English strings
            else:
                lang = eng  # Default english

            # Variables to be sent to the HTML page
            values = {
                "lang":
                lang,  # Language strings
                "session_name":
                self.session.get('session_name'),  # User name
                "session_role":
                self.session.get('session_role'),  # User role
                "session_picture":
                self.get_session_image(
                    self.session.get('session_name')),  # User picture
                "session_genre":
                self.session.get('session_genre'),  # User genre
                "comics":
                comics,  # Comics
                "current_number_page":
                self.session.get('current_number_page'),  # Current number page
                "pages":
                self.session.get('pages'),  # Pages for the pagination
                "last_page":
                self.session.get('last_page'),  # Last page number
                "keys_page_list":
                keys_page_list,  # Comic keys that are currently in the page
                "all_keys":
                all_keys,  # All comic keys
                "all_comics":
                all_comics,  # ALL comic (for the user search field)
                "all_comics_user":
                all_comics_user,  # All user comics (for the search field)
                "authors":
                self.get_authors(),  # Authors for adding them to the comics
                "shelvings":
                shelvings,  # Shelvings list
                "shelving_name":
                shelving_name  # Shelving name
            }

            # If the comic exists
            if shelving and shelving is not None:
                # Delete all shelves of the shelving and quit all comics
                self.delete_shelving(shelving, all_comics_user)

                # Delete db comic
                shelving.key.delete()
                values["ok_message"] = lang[
                    "shelving_deleted_successfully"]  # Ok message (shelving deleted successfully)

                # Get the shelvings
                shelvings = Shelving.query(
                    Shelving.username == self.session.get(
                        'session_name')).order(Shelving.name).fetch()
                values["shelvings"] = shelvings

                # Setting pagination
                ##############################################################################################
                pages_to_show = self.session.get(
                    'pages_to_show'
                )  # Number of pages that shows the pagination
                pages = list(
                )  # Pages for the pagination (it's a list because of django for templates)

                # Get all db comics (Limited to the number given by the session variable [10 by default])
                num_total = len(aux3)  # Total number of elements
                if len(aux3) > 0:
                    if not self.session.get("shelving"):
                        comics = ComicBook.query(ComicBook.key.IN(aux3)).fetch(
                            self.session.get('num_elems_page'),
                            offset=offset)  # List not empty
                    else:
                        comics = ComicBook.query(
                            ComicBook.users.username == self.session.get(
                                "session_name"))  # List not empty
                        num_total = len(aux3)
                        aux3 = list()
                        for comic in comics:
                            aux3.append(comic.key)
                            del comic
                        comics = comics.fetch(
                            self.session.get('num_elems_page'))
                else:
                    if not self.session.get("shelving"):
                        comics = list()
                    else:
                        comics = ComicBook.query(
                            ComicBook.users.username == self.session.get(
                                "session_name"))  # List not empty
                        num_total = len(aux3)
                        aux3 = list()
                        for comic in comics:
                            aux3.append(comic.key)
                            del comic
                        comics = comics.fetch(
                            self.session.get('num_elems_page'))

                # If the total number of elements is above 0 do the pagination
                if num_total > 0 and len(comics) > 0:
                    # Get the number of pages for the pagination
                    num_elems_page = self.session.get(
                        'num_elems_page'
                    )  # Number of elements (comics) per page
                    num_pages = num_total / num_elems_page  # Number of pages

                    # If there are less elements than session["num_elems_page"]
                    if num_pages == 0:
                        num_pages = 1  # At least one page
                    # Else
                    else:
                        # If the rest of the division is above 0
                        if (num_total % num_elems_page) > 0:
                            num_pages = (num_total / num_elems_page
                                         ) + 1  # It's necessary other page
                        else:
                            num_pages = (num_total / num_elems_page
                                         )  # It doesn't need other page

                    self.session['last_page'] = num_pages  # Last page

                    # Set the pages for the pagination
                    for i in range(1, num_pages + 1):
                        pages.append(i)

                    # Set number of pages for the pagination (pagination only shows 3 pages)
                    current_number_page = self.session.get(
                        'current_number_page')
                    # If the current page is 1
                    if current_number_page == 1:
                        pages = pages[0:pages_to_show]  # Shows pages 1,2,3
                    # If the current page is the final page
                    elif current_number_page == num_pages:  # Shows the last three pages
                        if (num_pages - pages_to_show) >= 0:
                            pages = pages[(num_pages - pages_to_show):]
                        else:
                            pages = pages[0:pages_to_show]
                    # Else
                    else:
                        pages = pages[(current_number_page - 2):(
                            current_number_page +
                            1)]  # Show the current, last and next pages

                    self.session['pages'] = pages  # Pages for the pagination

                    del num_elems_page, num_pages, current_number_page  # Delete variables to free memory

                # If page is empty do the same, but return to the to the last page next to the current page
                elif num_total > 0 and len(comics) == 0:
                    # Get all db comics (Limited to the number given by the session variable [10 by default])
                    offset = (self.session.get('current_number_page') -
                              2) * self.session.get('num_elems_page')
                    comics = ComicBook.query(ComicBook.key.IN(aux3)).fetch(
                        self.session.get('num_elems_page'), offset=offset)

                    # Get the number of pages for the pagination
                    num_elems_page = self.session.get(
                        'num_elems_page'
                    )  # Number of elements (comics) per page
                    num_pages = num_total / num_elems_page  # Number of pages

                    # If there are less elements than session["num_elems_page"]
                    if num_pages == 0:
                        num_pages = 1  # At least one page
                    # Else
                    else:
                        # If the rest of the division is above 0
                        if (num_total % num_elems_page) > 0:
                            num_pages = (num_total / num_elems_page
                                         ) + 1  # It's necessary other page
                        else:
                            num_pages = (num_total / num_elems_page
                                         )  # It doesn't need other page

                    current_number_page = num_pages  # The previous last page doesn't already exist, so it has to be the last page of the new list
                    self.session['last_page'] = num_pages  # Last page

                    # Set the pages for the pagination
                    for i in range(1, num_pages + 1):
                        pages.append(i)

                    # Set number of pages for the pagination (pagination only shows 3 pages)
                    # If the current page is 1
                    if current_number_page == 1:
                        pages = pages[0:pages_to_show]  # Shows pages 1,2,3
                    # If the current page is the final page
                    elif current_number_page == num_pages:  # Shows the last three pages
                        if (num_pages - pages_to_show) >= 0:
                            pages = pages[(num_pages - pages_to_show):]
                        else:
                            pages = pages[0:pages_to_show]
                    # Else
                    else:
                        pages = pages[(current_number_page - 2):(
                            current_number_page +
                            1)]  # Show the current, last and next pages

                    self.session['pages'] = pages  # Pages for the pagination
                    self.session[
                        'current_number_page'] = current_number_page  # Current number page

                    del num_elems_page, num_pages, current_number_page  # Delete variables to free memory
                ###########################################################################################

                # Variables to be sent to the html
                if not self.session.get("shelving"):
                    values[
                        "comics"] = self.get_comics_read_and_without_shelving(
                            comics)
                else:
                    self.session["shelving"] = None
                    values["shelving_name"] = list()
                    values[
                        "comics"] = self.get_comics_read_and_without_shelving(
                            comics)

                values["all_comics_user"] = copy.copy(comics)
                values["pages"] = self.session.get(
                    'pages')  # Pages for the pagination
                values["last_page"] = self.session.get(
                    'last_page')  # Last page number
                values["all_keys"] = all_keys  # All comic keys
                values["current_number_page"] = self.session.get(
                    'current_number_page')  # Current number page

                # Setting the comic keys list that are currently in the page
                keys_page_list = list()
                for comic in comics:
                    keys_page_list.append(comic.key.urlsafe())
                values["keys_page_list"] = keys_page_list

                del pages_to_show, pages, num_total  # Delete variables to free memory

            # Else show an error message
            else:
                values["error_message"] = lang[
                    "shelving_not_deleted"]  # Error message (Shelving couldn't be deleted)

            del key, shelving, keys_page_list, aux_all_keys, all_keys, aux, aux3, all_comics, offset, comics,\
                lang, shelving_name  # Delete variables to free memory
            self.session_store.save_sessions(self.response)  # Save sessions
            self.response.write(
                jinja.render_template("/library/default.html",
                                      **values))  # Go to the comics home page

        # Else redirect to the login page
        else:
            self.redirect("/login")
Beispiel #4
0
    def get(self):
        jinja = jinja2.get_jinja2(app=self.app)

        # Check if the client is logged in. If it's logged in, show the home page
        if self.session.get('session_role') == 'client':
            # Initialize variables
            pages_to_show = self.session.get(
                'pages_to_show')  # Number of pages that shows the pagination
            pages = list(
            )  # Pages for the pagination (it's a list because of django for templates)
            self.session[
                'current_number_page'] = 1  # Session current number page
            all_keys = list()  # All comic keys
            keys_page_list = list()  # Comic keys currently in the page
            shelving_name = list()  # Shelving name

            self.session['num_elems_page'] = 12  # Amount of elements

            # Get all comics that belongs to the current user
            if not self.session.get("shelving"):
                comics = ComicBook.query(
                    ComicBook.users.username ==
                    self.session.get('session_name')).order(
                        ComicBook.users.addition_date
                    )  # All comics ordered by the addition date
                all_comics_user = copy.copy(
                    comics)  # ALL comics (for the search field)
                all_comics_user = all_comics_user.fetch()
            else:
                key = ndb.Key(urlsafe=self.session.get("shelving"))
                comics = ComicBook.query(
                    ComicBook.users.username == self.session.get(
                        'session_name'),
                    ComicBook.users.shelving == key).order(
                        ComicBook.users.addition_date
                    )  # Comics in the shelving ordered by the addition date
                shelving = key.get()
                shelving_name = shelving.name
                del shelving
                all_comics_user = ComicBook.query(
                    ComicBook.users.username == self.session.get(
                        'session_name')).fetch(
                        )  # ALL comics (for the search field)

            # Get ALL the comic keys (they are necessary to do the order and filter)
            for comic in comics:
                all_keys.append(comic.key.urlsafe())
                del comic

            # Number of comics shown in the page
            comics = comics.fetch(12)
            # Get the comics (if --> default, else --> see shelving)
            if not self.session.get('shelving'):
                comics = self.get_comics_read_and_without_shelving(
                    comics
                )  # Get read comics and the ones that aren't in a shelving
            else:
                self.get_comics_read(comics)  # Get read comics

            num_total = len(all_comics_user)  # Total number of elements

            # Get the shelvings
            shelvings = Shelving.query(
                Shelving.username == self.session.get('session_name')).order(
                    Shelving.name).fetch()

            self.session['page_name'] = "/library"  # Current page name

            # If the total number of elements is above 0 do the pagination
            if num_total > 0:
                # Get the number of pages for the pagination
                num_elems_page = self.session.get(
                    "num_elems_page")  # Number of elements (comics) per page
                num_pages = num_total / num_elems_page  # Number of pages

                # If there are less elements than session["num_elems_page"]
                if num_pages == 0:
                    num_pages = 1  # At least one page
                # Else
                else:
                    # If the rest of the division is above 0
                    if (num_total % num_elems_page) > 0:
                        num_pages = (num_total / num_elems_page
                                     ) + 1  # It's necessary other page
                    else:
                        num_pages = (num_total / num_elems_page
                                     )  # It doesn't need other page

                self.session['last_page'] = num_pages  # Last page

                # Set the pages for the pagination
                for i in range(1, num_pages + 1):
                    pages.append(i)

                # Set number of pages for the pagination (pagination only shows 3 pages)
                current_number_page = 1
                # If the current page is 1
                if current_number_page == 1:
                    pages = pages[0:pages_to_show]  # Shows pages 1,2,3
                # If the current page is the final page
                elif current_number_page == num_pages:  # Shows the last three pages
                    if (num_pages - pages_to_show) >= 0:
                        pages = pages[(num_pages - pages_to_show):]
                    else:
                        pages = pages[0:pages_to_show]
                # Else
                else:
                    pages = pages[(current_number_page - 1):(
                        current_number_page +
                        1)]  # Show the current, last and next pages

                self.session['pages'] = pages  # Pages for the pagination

                # Setting the keys list to allow the use of the "Delete page" button
                for comic in comics:
                    keys_page_list.append(comic.key.urlsafe())
                    del comic

                del num_elems_page, num_pages, current_number_page, pages  # Delete variables to free memory

            # If num_total < 0
            else:
                comics = all_comics_user

            # Set the default language of the app
            if self.session['session_idiom'] == "spa":
                lang = spa  # Spanish strings
            elif self.session['session_idiom'] == "eng":
                lang = eng  # English strings
            else:
                lang = eng  # Default english

            all_comics = ComicBook.query().fetch()

            # Variables to be sent to the HTML page
            values = {
                "lang":
                lang,  # Language strings
                "session_name":
                self.session.get('session_name'),  # User name
                "session_role":
                self.session.get('session_role'),  # User role
                "session_picture":
                self.get_session_image(
                    self.session.get('session_name')),  # User picture
                "session_genre":
                self.session.get('session_genre'),  # User genre
                "comics":
                comics,  # Comics
                "current_number_page":
                1,  # Current number page
                "pages":
                self.session.get('pages'),  # Pages for the pagination
                "last_page":
                self.session.get('last_page'),  # Last page number
                "keys_page_list":
                keys_page_list,  # Comics keys that are currently in the page
                "all_keys":
                all_keys,  # All comic keys
                "all_comics_user":
                all_comics_user,  # All user comics (for the search field)
                "all_comics":
                all_comics,  # ALL comics (for the user search field)
                "shelvings":
                shelvings,  # All user shelvings
                "shelving_name":
                shelving_name  # Shelving name
            }

            del num_total, pages_to_show, keys_page_list, all_keys, lang, comics, all_comics_user, all_comics, shelving_name  # Delete variables to free memory

            self.session_store.save_sessions(self.response)  # Save sessions
            self.response.write(
                jinja.render_template("/library/default.html",
                                      **values))  # Go to the library home page

        # If it isn't logged in, redirect to the login page
        else:
            self.redirect("/login")
Beispiel #5
0
    def post(self):
        jinja = jinja2.get_jinja2(app=self.app)

        # Check if the admin is logged in
        if self.session.get('session_role') == 'client':
            # If it's logged in, get the session variables, show the home page
            # Get the shelving attributes
            name = self.request.get("name", "")                           # Shelving name
            name = name.encode("utf8")
            picture = self.request.get("picture", "")                     # Shelving picture

            keys_page_list = self.request.get("keys_page_list", "")     # Comic keys (only comics in the current page)
            aux_all_keys = self.request.get("all_keys", "")             # All the comic keys (for the order field)

            # Initialize variables
            all_keys = list()                                           # All the comic keys (for the order field)
            aux = list()                                                # Support list
            aux3 = list()                                               # Support list
            shelving_name = list()                                      # Shelving name

            all_comics = ComicBook.query().fetch()

            # Get the shelvings
            shelvings = Shelving.query(Shelving.username == self.session.get('session_name')).order(Shelving.name).fetch()

            offset = (self.session.get('current_number_page') - 1) * self.session.get('num_elems_page')  # Number of elements to ignore in the query

            # Transform the HTML string in a list
            aux_all_keys = self.transform_keys(aux_all_keys)

            # Get all comics that belongs to the current user
            if not self.session.get("shelving"):
                comics = ComicBook.query(ComicBook.users.username == self.session.get('session_name')).order(ComicBook.users.addition_date)  # All comics ordered by the addition date
                all_comics_user = copy.copy(comics)  # ALL comics (for the search field)
                all_comics_user = all_comics_user.fetch()
            else:
                key = ndb.Key(urlsafe=self.session.get("shelving"))
                comics = ComicBook.query(ComicBook.users.username == self.session.get('session_name'), ComicBook.users.shelving == key).order(ComicBook.users.addition_date)  # Comics in the shelving ordered by the addition date
                shelving = key.get()
                shelving_name = shelving.name
                del shelving
                all_comics_user = ComicBook.query(ComicBook.users.username == self.session.get('session_name')).fetch()  # ALL comics (for the search field)

            for comic in comics:  # Get ALL the keys
                aux.append(comic.key.urlsafe())
                del comic

            for key in aux_all_keys:  # Compare the "list" given by HTML with aux for making the new all keys list (all_keys)
                for key2 in aux:
                    if key == str(key2):
                        key2 = ndb.Key(urlsafe=key)
                        aux3.append(key2)
                        all_keys.append(key2.urlsafe())
                        break
                    del key2
                del key

            # Get db comics
            if len(aux3) > 0:
                comics = ComicBook.query(ComicBook.key.IN(aux3)).fetch(self.session.get('num_elems_page'), offset=offset)
                # Get the comics (if --> default, else --> see shelving)
                if not self.session.get('shelving'):
                    comics = self.get_comics_read_and_without_shelving(comics)  # Get read comics and the ones that aren't in a shelving
                else:
                    self.get_comics_read(comics)  # Get read comics
            else:
                comics = list()

            # Set the default language of the app
            if self.session['session_idiom'] == "spa":
                lang = spa  # Spanish strings
            elif self.session['session_idiom'] == "eng":
                lang = eng  # English strings
            else:
                lang = eng  # Default english

            keys_page_list = list()

            # Variables to be sent to the HTML page
            values = {
                "lang": lang,                                                                   # Language strings
                "session_name": self.session.get('session_name'),                               # User name
                "session_role": self.session.get('session_role'),                               # User role
                "session_picture": self.get_session_image(self.session.get('session_name')),    # User picture
                "session_genre": self.session.get('session_genre'),                             # User genre
                "comics": comics,                                                               # Comics
                "current_number_page": self.session.get('current_number_page'),                 # Current number page
                "pages": self.session.get('pages'),                                             # Pages for the pagination
                "last_page": self.session.get('last_page'),                                     # Last page number
                "keys_page_list": keys_page_list,                                               # Comic keys that are currently in the page
                "all_keys": all_keys,                                                           # All comic keys
                "all_comics": all_comics,                                                       # ALL comic (for the user search field)
                "all_comics_user": all_comics_user,                                             # All user comics (for the search field)
                "authors": self.get_authors(),                                                  # Authors for adding them to the comics
                "shelvings": shelvings,                                                         # Shelvings list
                "shelving_name": shelving_name                                                  # Shelving name
            }

            # If the user enters all the attributes (the database can have more than one shelving with the same name)
            if len(name) > 0:
                # Check the comic attributes
                if picture != "":
                    picture = images.resize(picture, 300, 250)
                else:
                    picture = None

                # Add the new shelving to the home page
                shelving = Shelving(name=name, picture=picture, username=self.session.get('session_name'))

                aux2 = shelving.put()
                time.sleep(1)

                # If the shelving was successfully added
                if aux2 is not None:
                    # Adding the new shelving to the list
                    shelvings.append(shelving)

                    # Setting pagination
                    ##############################################################################################
                    pages_to_show = self.session.get('pages_to_show')   # Number of pages that shows the pagination
                    pages = list()  # Pages for the pagination (it's a list because of django for templates)

                    # Get all db comics (Limited to the number given by the session variable [10 by default])
                    if len(aux3) > 0:
                        comics = ComicBook.query(ComicBook.key.IN(aux3)).order(-ComicBook.save_date).fetch(self.session.get('num_elems_page'), offset=offset)
                    else:
                        comics = ComicBook.query().fetch()

                    # Setting the new keys list for the comics currently in the page (allows to use the "Delete page" button)
                    for comic in comics:
                        keys_page_list.append(comic.key.urlsafe())
                        del comic

                    num_total = len(all_comics_user)  # Total number of elements

                    # If the total number of elements is above 0 do the pagination
                    if num_total > 0:
                        # Get the number of pages for the pagination
                        num_elems_page = self.session.get('num_elems_page')  # Number of elements (comics) per page
                        num_pages = num_total / num_elems_page               # Number of pages

                        # If there are less elements than session["num_elems_page"]
                        if num_pages == 0:
                            num_pages = 1  # At least one page
                        # Else
                        else:
                            # If the rest of the division is above 0
                            if (num_total % num_elems_page) > 0:
                                num_pages = (num_total / num_elems_page) + 1    # It's necessary other page
                            else:
                                num_pages = (num_total / num_elems_page)        # It doesn't need other page

                        self.session['last_page'] = num_pages  # Last page

                        # Set the pages for the pagination
                        for i in range(1, num_pages + 1):
                            pages.append(i)

                        # Set number of pages for the pagination (pagination only shows 3 pages)
                        current_number_page = self.session.get('current_number_page')
                        # If the current page is 1
                        if current_number_page == 1:
                            pages = pages[0:pages_to_show]  # Shows pages 1,2,3
                        # If the current page is the final page
                        elif current_number_page == num_pages:  # Shows the last three pages
                            if (num_pages - pages_to_show) >= 0:
                                pages = pages[(num_pages - pages_to_show):]
                            else:
                                pages = pages[0:pages_to_show]
                        # Else
                        else:
                            pages = pages[(current_number_page - 2):(current_number_page + 1)]  # Show the current, last and next pages

                        self.session['pages'] = pages  # Pages for the pagination

                        # Variables to be sent to the HTML page
                        # Get the comics (if --> default, else --> see shelving)
                        if not self.session.get('shelving'):
                            values["comics"] = self.get_comics_read_and_without_shelving(comics)  # Get read comics and the ones that aren't in a shelving
                        else:
                            self.get_comics_read(comics)  # Get read comics
                            values["comics"] = comics

                        values["pages"] = self.session.get('pages')                             # Pages for the pagination
                        values["last_page"] = self.session.get('last_page')                     # Last page number

                        del num_elems_page, num_pages, current_number_page  # Delete variables to free memory
                    ###########################################################################################
                    # Variables to be sent to the HTML page
                    values["ok_message"] = lang["shelving_added_successfully"]    # Ok message (shelving added successfully)
                    values["keys_page_list"] = keys_page_list                     # Comics keys that are currently in the page
                    values["all_keys"] = all_keys                                 # All comic keys
                    values["shelvings"] = shelvings                               # Shelvings list

                    del pages_to_show, pages, comics, num_total, shelving    #  Delete variables to free memory

                # If wasn't successfully added
                else:
                    del shelving, aux2        # Delete variables to free memory

                    # Variables to be sent to the HTML page
                    values["error_message"] = lang["error_add"]  # Error message (The addition failed)

            # Else show an error message
            else:
                # Values to be sent to the HTML page
                values["error_message"] = lang["must_insert_all_shelving_attributes"]   # Error message (You must enter all shelving data)

            del lang, offset, keys_page_list, aux_all_keys, all_keys, all_comics, aux, aux3, picture,\
                name, shelvings, all_comics_user, shelving_name     # Delete variables to free memory
            self.session_store.save_sessions(self.response)  # Save sessions
            self.response.write(jinja.render_template("/library/default.html", **values))  # Go to the comicss home page

        # If it isn't logged in, redirect to the login page
        else:
            self.redirect("/login")
Beispiel #6
0
    def post(self):
        jinja = jinja2.get_jinja2(app=self.app)

        # Check if the admin or client are logged in
        if self.session.get('session_role') == 'admin' or self.session.get(
                'session_role') == 'client':
            # If it's logged in, get the session variables
            # Get the user attributes
            key = self.request.get("key", "")  # User key
            key = ndb.Key(urlsafe=key)

            user = key.get()  # Get the user with that key

            # Set the default language of the app
            if self.session['session_idiom'] == "spa":
                lang = spa  # Spanish strings
            elif self.session['session_idiom'] == "eng":
                lang = eng  # English strings
            else:
                lang = eng  # Default english

            # Variables to be sent to the HTML page
            values = {
                "lang":
                lang,  # Language strings
                "session_name":
                self.session.get('session_name'),  # User name
                "session_role":
                self.session.get('session_role'),  # User role
                "session_picture":
                self.get_session_image(
                    self.session.get('session_name')),  # User picture
                "user_email":
                user.email,  # User email
                "user_key":
                user.key.urlsafe(),  # User key
                "user_genre":
                self.session.get('session_genre'),  # User genre
                "statistics":
                self.get_statistics()  # Client statistics
            }

            # If the user and key exist
            if user is not None and key is not None:
                # Delete all associations between ComicBook and User_ComicBook
                aux = list()
                comics = ComicBook.query(ComicBook.users.username == user.name)
                for comic in comics:
                    for user_comic in comic.users:
                        if user_comic.username != user.name:
                            aux.append(user_comic)
                    comic.users = aux
                    comic.put()
                    del comic
                    aux = list()
                del aux

                # Delete the client library
                shelvings = Shelving.query(Shelving.username == user.name)
                for shelving in shelvings:
                    shelving.key.delete()
                    del shelving

                # Delete all user User_ComicBook rows
                user_comics = User_ComicBook.query(
                    User_ComicBook.username == user.name)
                for user_comic in user_comics:
                    user_comic.key.delete()
                    del user_comic

                # Delete all user friends
                friends = Friend.query(
                    ndb.OR(Friend.who_ask == user.key,
                           Friend.who_answer == user.key))
                for friend in friends:
                    friend.key.delete()

                # Delete the user
                user.key.delete()
                del lang, key, user, user_comics, comics, shelvings, friends  # Delete variables to free memory

                self.redirect("/logout")  # Redirect to the login page

            # Else show an error message
            else:
                # Values to be sent to the HTML page
                values["error_message"] = lang[
                    "account_not_deleted"]  # Error message (Account couldn't be modified)
                del lang, key, user  # Delete variables to free memory

                self.session_store.save_sessions(
                    self.response)  # Save sessions
                self.response.write(
                    jinja.render_template(
                        "/profile/default.html",
                        **values))  # Go to the profile home page

        # If they aren't logged in, redirect to the login page
        else:
            self.redirect("/login")
Beispiel #7
0
    def post(self):
        jinja = jinja2.get_jinja2(app=self.app)

        # Check if the client is logged in
        if self.session.get('session_role') == 'client':
            # Initialize variables
            all_keys = list()  # New comic keys list
            comics = None  # Comics list
            all_comics_user = list()  # ALL comics (for the search field)
            pages = list()  # Pages for the pagination
            shelving_name = list()  # Shelving name

            # Get the shelvings
            shelvings = Shelving.query(
                Shelving.username == self.session.get('session_name')).order(
                    Shelving.name).fetch()

            # If it's logged in, get the session variables, show the home page
            # Get the order attributes
            order_by = self.request.get("order_by", "")  # Sort option
            order_by = order_by.encode("utf8")
            aux_all_keys = self.request.get("all_keys",
                                            "")  # All comic keys list

            if len(aux_all_keys) > 2:
                # Transform the HTML string in a list
                aux_all_keys = self.transform_keys(aux_all_keys)

                # It's necessary to compare the HTML with the query list in order to obtain the desired list
                if not self.session.get("shelving"):
                    comics = ComicBook.query(
                        ComicBook.users.username ==
                        self.session.get('session_name')).order(
                            ComicBook.users.addition_date
                        )  # All comics ordered by the addition date
                    all_comics_user = copy.copy(
                        comics)  # ALL comics (for the search field)
                    all_comics_user = all_comics_user.fetch()
                else:
                    key = ndb.Key(urlsafe=self.session.get("shelving"))
                    comics = ComicBook.query(
                        ComicBook.users.username == self.session.get(
                            'session_name'), ComicBook.users.shelving == key
                    ).order(
                        ComicBook.users.addition_date
                    )  # Comics in the shelving ordered by the addition date
                    shelving = key.get()
                    shelving_name = shelving.name
                    del shelving
                    all_comics_user = ComicBook.query(
                        ComicBook.users.username == self.session.get(
                            'session_name')).fetch(
                            )  # ALL comics (for the search field)

                aux = list()
                for comic in comics:  # Get ALL the keys
                    aux.append(comic.key.urlsafe())
                    del comic

                for key in aux_all_keys:  # Compare the "list" given by HTML with aux for making the new all keys list (all_keys)
                    for key2 in aux:
                        if key == str(key2):
                            key2 = ndb.Key(urlsafe=key)
                            all_keys.append(key2)
                            break
                        del key2
                    del key

                del aux  # Delete variables to free memory

                # Get all db comics (Limited to the number given by the session variable [10 by default])
                # Not ordered because it has to respect if the comic used some ordination or filter
                comics = ComicBook.query(ComicBook.key.IN(all_keys))

            # If there is a list of comics and a sort option
            if order_by != "" and comics is not None:
                # Get the number of pages for the pagination
                num_total = len(all_keys)
                num_elems_page = self.session.get(
                    'num_elems_page')  # Number of elements (comics) per page
                num_pages = num_total / num_elems_page  # Number of pages

                if num_pages > 0:
                    # If the rest of the division is above 0
                    if (num_total % num_elems_page) > 0:
                        num_pages = (num_total / num_elems_page
                                     ) + 1  # It's necessary other page
                    else:
                        num_pages = (num_total / num_elems_page
                                     )  # It doesn't need other page

                    # Set the pages for the pagination
                    if num_pages >= self.session.get('pages_to_show'):
                        for i in range(1,
                                       self.session.get('pages_to_show') + 1):
                            pages.append(i)
                    else:
                        for i in range(1, num_pages + 1):
                            pages.append(i)

                # Order the comic list
                if order_by == "title":
                    comics = comics.order(ComicBook.title)  # Title A-Z

                    # Setting the all comic keys list
                    all_keys = list()
                    for comic in comics:
                        all_keys.append(comic.key.urlsafe())
                        del comic

                    comics = comics.fetch(self.session.get('num_elems_page'))
                elif order_by == "-title":
                    comics = comics.order(-ComicBook.title)  # Title Z-A

                    # Setting the all comic keys list
                    all_keys = list()
                    for comic in comics:
                        all_keys.append(comic.key.urlsafe())
                        del comic

                    comics = comics.fetch(self.session.get('num_elems_page'))
                elif order_by == "save_date":
                    comics = comics.order(ComicBook.save_date)  # Older first

                    # Setting the all comic keys list
                    all_keys = list()
                    for comic in comics:
                        all_keys.append(comic.key.urlsafe())
                        del comic

                    comics = comics.fetch(self.session.get('num_elems_page'))
                elif order_by == "-save_date":
                    comics = comics.order(-ComicBook.save_date)  # Newest first

                    # Setting the all comic keys list
                    all_keys = list()
                    for comic in comics:
                        all_keys.append(comic.key.urlsafe())
                        del comic

                    comics = comics.fetch(self.session.get('num_elems_page'))
                elif order_by == "addition_date":
                    comics = comics.order(
                        ComicBook.users.addition_date)  # Value ascendant

                    # Setting the all comic keys list
                    all_keys = list()
                    for comic in comics:
                        all_keys.append(comic.key.urlsafe())
                        del comic

                    comics = comics.fetch(self.session.get('num_elems_page'))
                elif order_by == "-addition_date":
                    comics = comics.order(
                        -ComicBook.users.addition_date)  # Value descendant

                    # Setting the all comic keys list
                    all_keys = list()
                    for comic in comics:
                        all_keys.append(comic.key.urlsafe())
                        del comic

                    comics = comics.fetch(self.session.get('num_elems_page'))
                else:
                    comics = comics.order(-ComicBook.save_date)  # Newest first

                    # Setting the all comic keys list
                    all_keys = list()
                    for comic in comics:
                        all_keys.append(comic.key.urlsafe())
                        del comic

                    comics = comics.fetch(
                        self.session.get('num_elems_page'))  # Name ascendant

                # Setting the comic keys list (only on the current page)
                keys_page_list = list()
                for comic in comics:
                    keys_page_list.append(comic.key.urlsafe())
                    del comic

                # Set the default language of the app
                if self.session['session_idiom'] == "spa":
                    lang = spa  # Spanish strings
                elif self.session['session_idiom'] == "eng":
                    lang = eng  # English strings
                else:
                    lang = eng  # Default english

                all_comics = ComicBook.query().fetch()
                # Get the comics (if --> default, else --> see shelving)
                if not self.session.get('shelving'):
                    comics = self.get_comics_read_and_without_shelving(
                        comics
                    )  # Get read comics and the ones that aren't in a shelving
                else:
                    self.get_comics_read(comics)  # Get read comics

                # Variables to be sent to the HTML page
                values = {
                    "lang":
                    lang,  # Language strings
                    "session_name":
                    self.session.get('session_name'),  # User name
                    "session_role":
                    self.session.get('session_role'),  # User role
                    "session_picture":
                    self.get_session_image(
                        self.session.get('session_name')),  # User picture
                    "session_genre":
                    self.session.get('session_genre'),  # User genre
                    "comics":
                    comics,  # Comics
                    "current_number_page":
                    self.session.get(
                        'current_number_page'),  # Current number page
                    "pages":
                    self.session.get('pages'),  # Pages for the pagination
                    "last_page":
                    self.session.get('last_page'),  # Last page number
                    "keys_page_list":
                    keys_page_list,  # Comics keys that are currently in the page
                    "all_keys":
                    all_keys,  # All comic keys
                    "all_comics_user":
                    all_comics_user,  # All user comic (for the search field)
                    "all_comics":
                    all_comics,  # ALL comics (for the user search field)
                    "shelvings":
                    shelvings,  # All user shelvings
                    "shelving_name":
                    shelving_name  # Shelving name
                }

                del order_by, aux_all_keys, all_keys, comics, lang, keys_page_list, pages,\
                    num_total, num_pages, num_elems_page, all_comics_user, all_comics, shelving_name    # Delete variables to free memory

                self.session_store.save_sessions(
                    self.response)  # Save sessions
                self.response.write(
                    jinja.render_template(
                        "/library/default.html",
                        **values))  # Go to the comics home page

            # Else redirect to the comics home page
            else:
                del order_by, aux_all_keys, all_keys, comics  # Delete variables to free memory
                self.redirect("/library")

        # If it isn't logged in, redirect to the login page
        else:
            self.redirect("/login")
Beispiel #8
0
    def post(self):
        jinja = jinja2.get_jinja2(app=self.app)

        # Check if the client is logged in
        if self.session.get('session_role') == 'client':
            # If it's logged in, get the session variables, show the home page
            # Get the comic attributes
            name = self.request.get("m_name", "")                     # Shelving name
            name = name.encode("utf8")
            picture = self.request.get("m_picture", "")               # Shelving picture

            key = self.request.get("key", "")
            key = ndb.Key(urlsafe=key)
            shelving = key.get()      # Get the shelving with that key

            keys_page_list = self.request.get("keys_page_list", "")     # Comic keys (only comics in the current page)
            aux_all_keys = self.request.get("all_keys", "")             # All the comic keys (for the order field)

            # Initialize variables
            aux = list()              # Support variable
            aux3 = list()             # Support variable
            all_comics = list()       # List with all comics (for the search field)
            shelving_name = list()    # Shelving name

            # Get the user shelvings
            shelvings = Shelving.query(Shelving.username == self.session.get("session_name")).order(Shelving.name).fetch()

            # Transform the HTML string in a list
            all_keys = copy.copy(aux_all_keys)
            aux_all_keys = self.transform_keys(aux_all_keys)

            # Get all comics that belongs to the current user
            if not self.session.get("shelving"):
                comics = ComicBook.query(ComicBook.users.username == self.session.get('session_name')).order(ComicBook.users.addition_date)  # All comics ordered by the addition date
                all_comics_user = copy.copy(comics)  # ALL comics (for the search field)
                all_comics_user = all_comics_user.fetch()
            else:
                key = ndb.Key(urlsafe=self.session.get("shelving"))
                comics = ComicBook.query(ComicBook.users.username == self.session.get('session_name'),ComicBook.users.shelving == key).order(ComicBook.users.addition_date)  # Comics in the shelving ordered by the addition date
                shelving2 = key.get()
                shelving_name = shelving2.name
                del shelving2
                all_comics_user = ComicBook.query(ComicBook.users.username == self.session.get('session_name')).fetch()  # ALL comics (for the search field)

            for comic2 in comics:  # Get ALL the keys
                aux.append(comic2.key.urlsafe())
                del comic2

            for key3 in aux_all_keys:  # Compare the "list" given by HTML with aux for making the new all keys list (all_keys)
                for key2 in aux:
                    if key3 == str(key2):
                        key2 = ndb.Key(urlsafe=key2)
                        aux3.append(key2)
                        break
                    del key2
                del key3

            # Get all db comics
            offset = (self.session.get('current_number_page') - 1) * self.session.get('num_elems_page')
            if len(aux3) > 0:
                comics = ComicBook.query(ComicBook.key.IN(aux3)).fetch(self.session.get('num_elems_page'), offset=offset)
                # Get the comics (if --> default, else --> see shelving)
                if not self.session.get('shelving'):
                    comics = self.get_comics_read_and_without_shelving(comics)  # Get read comics and the ones that aren't in a shelving
                else:
                    self.get_comics_read(comics)  # Get read comics
            else:
                comics = list()

            # Set the default language of the app
            if self.session['session_idiom'] == "spa":
                lang = spa  # Spanish strings
            elif self.session['session_idiom'] == "eng":
                lang = eng  # English strings
            else:
                lang = eng  # Default english

            # Variables to be sent to the HTML page
            values = {
                "lang": lang,                                                                   # Language strings
                "session_name": self.session.get('session_name'),                               # User name
                "session_role": self.session.get('session_role'),                               # User role
                "session_picture": self.get_session_image(self.session.get('session_name')),    # User picture
                "session_genre": self.session.get('session_genre'),                             # User genre
                "comics": comics,                                                               # Comics
                "current_number_page": self.session.get('current_number_page'),                 # Current number page
                "pages": self.session.get('pages'),                                             # Pages for the pagination
                "last_page": self.session.get('last_page'),                                     # Last page number
                "keys_page_list": keys_page_list,                                               # Comics keys that are currently in the page
                "all_keys": all_keys,                                                           # All comic keys
                "all_comics": all_comics,                                                       # ALL comic (for the user search field)
                "authors": self.get_authors(),                                                  # Authors for adding them to the comics
                "all_comics_user": all_comics_user,                                             # All user comics (for the user search field)
                "shelvings": shelvings,                                                         # Shelvings
                "shelving_name": shelving_name                                                  # Shelving name
            }

            # If the key is from an shelving
            if shelving and shelving is not None:
                # Check the shelving attributes
                if len(name) > 0:
                    shelving.name = name

                if picture != "":
                    shelving.picture = images.resize(picture, 300, 250)

                aux2 = shelving.put()
                time.sleep(1)

                # If the modification was successful
                if aux2 is not None:
                    # Variables to be sent to the HTML page
                    values["ok_message"] = lang["shelving_modified_successfully"]    # Ok message (Shelving modified successfully)

                    # Get all db Comics (Limited to the number given by the session variable [10 by default])
                    if len(aux3) > 0:
                        comics = ComicBook.query(ComicBook.key.IN(aux3)).fetch(self.session.get('num_elems_page'), offset=offset)
                        # Get the comics (if --> default, else --> see shelving)
                        if not self.session.get('shelving'):
                            comics = self.get_comics_read_and_without_shelving(
                                comics)  # Get read comics and the ones that aren't in a shelving
                        else:
                            self.get_comics_read(comics)  # Get read comics
                        values["comics"] = comics
                    else:
                        comics = ComicBook.query().fetch()

                    # Get the user shelvings
                    shelvings = Shelving.query(Shelving.username == self.session.get("session_name")).order(Shelving.name).fetch()
                    values["shelvings"] = shelvings

                # Else show an error message
                else:
                    # Variables to be sent to the HTML page
                    values["error_message"] = lang["error_modify"]  # Error message (The modification couldn't be done)

                del aux2    # Delete variables to free memory

            # Else show an error message
            else:
                # Values to be sent to the HTML page
                values["error_message"] = lang["shelving_not_modified"]   # Error message (Shelving couldn't be modified)

            all_comics = ComicBook.query().fetch()  # ALL comics (for the search field)
            values["all_comics"] = all_comics

            del lang, name, key, shelving, keys_page_list, aux_all_keys, aux, aux3, \
                all_comics, offset, all_keys, all_comics_user, shelvings     # Delete variables to free memory
            self.session_store.save_sessions(self.response)  # Save sessions
            self.response.write(jinja.render_template("/library/default.html", **values))  # Go to the library home page

        # If it isn't logged in, redirect to the login page
        else:
            self.redirect("/login")
Beispiel #9
0
    def post(self):
        jinja = jinja2.get_jinja2(app=self.app)

        # Check if the admin is logged in
        if self.session.get('session_role') == 'admin' or self.session.get(
                'session_role') == 'client':
            # If it's logged in, get the session variables
            # Get the user attributes
            username = self.request.get("username", "")  # Username
            username = username.encode("utf8")
            key = self.request.get("key", "")  # User key
            key = ndb.Key(urlsafe=key)

            user = key.get()  # Get the user with that key

            # Set the default language of the app
            if self.session['session_idiom'] == "spa":
                lang = spa  # Spanish strings
            elif self.session['session_idiom'] == "eng":
                lang = eng  # English strings
            else:
                lang = eng  # Default english

            # Variables to be sent to the HTML page
            values = {
                "lang":
                lang,  # Language strings
                "session_name":
                self.session.get('session_name'),  # User name
                "session_role":
                self.session.get('session_role'),  # User role
                "session_picture":
                self.get_session_image(
                    self.session.get('session_name')),  # User picture
                "user_email":
                user.email,  # User email
                "user_key":
                user.key.urlsafe(),  # User key
                "user_genre":
                self.session.get('session_genre'),  # User genre
                "statistics":
                self.get_statistics()  # Client statistics
            }

            # If the user exists and there is an username to change
            if user is not None and len(username) > 0:
                repeated_user = User.query(User.name == username)

                # If it doesn't exist an user with the name provided
                if repeated_user.count() == 0:
                    # Set the new username
                    username_aux = copy.copy(user.name)
                    user.name = username
                    aux = user.put()
                    time.sleep(1)

                    # If the modification was successful
                    if aux is not None:
                        # Variables to be sent to the HTML page
                        # Ok message (Username modified successfully)
                        values["ok_message"] = lang[
                            "username_modified_successfully_" +
                            str(self.session.get("session_genre"))]

                        # Change the username in the comics
                        comics = ComicBook.query(
                            ComicBook.users.username == username_aux)
                        for comic in comics:
                            for user_comic in comic.users:
                                if user_comic.username == username_aux:
                                    user_comic.username = user.name
                                del user_comic
                            comic.put()
                            del comic

                        # Change the username in the User_ComicBook rows
                        user_comics = User_ComicBook.query(
                            User_ComicBook.username == username_aux)
                        for user_comic in user_comics:
                            if user_comic.username == username_aux:
                                user_comic.username = user.name
                            user_comic.put()
                            del user_comic

                        # Change the username in the shelves and shelvings
                        shelvings = Shelving.query(
                            Shelving.username == username_aux)
                        for shelving in shelvings:
                            shelving.username = user.name
                            shelving.put()
                            del shelving

                        del user_comics, shelvings  # Delete variables to free memory
                        self.session[
                            'session_name'] = user.name  # Setting the new session username
                        values["session_name"] = user.name

                    # Else show an error message
                    else:
                        # Variables to be sent to the HTML page
                        values["error_message"] = lang[
                            "error_modify"]  # Error message (The modification couldn't be done)

                    del aux, username_aux  # Delete variables to free memory

                # If already exists show an error message
                else:
                    # Values to be sent to the HTML page
                    values["error_message"] = lang[
                        "username_already_exists"]  # Error message (Username already used by other)

                del repeated_user  # Delete variables to free memory

            # Else show an error message
            else:
                # Values to be sent to the HTML page
                # Error message (Username couldn't be modified)
                values["error_message"] = lang[
                    "username_not_modified_" +
                    str(self.session.get("session_genre"))]

            del lang, username, key, user  # Delete variables to free memory
            self.session_store.save_sessions(self.response)  # Save sessions
            self.response.write(
                jinja.render_template("/profile/default.html",
                                      **values))  # Go to the profile home page

        # If it isn't logged in, redirect to the login page
        else:
            self.redirect("/login")