コード例 #1
0
ファイル: modelpost.py プロジェクト: asdlei99/enkiWS
 def get_thread_data(cls,
                     thread_selected,
                     post_requested=POST_DEFAULT,
                     post_count=POSTS_PER_PAGE):
     # get posts by thread
     forums_url = enki.libutil.get_local_url('forums')
     thread = EnkiModelThread.get_by_id(int(thread_selected))
     thread_url = enki.libutil.get_local_url(
         'thread', {'thread': str(thread_selected)})
     forum = EnkiModelForum.get_by_id(thread.forum)
     forum_url = enki.libutil.get_local_url('forum',
                                            {'forum': str(forum.key.id())})
     if post_requested == cls.POST_LAST:
         post_requested = thread.num_posts
     list = cls.fetch_by_thread(int(thread_selected),
                                offset=(int(post_requested) - 1),
                                limit=int(post_count))
     if list:
         for i, item in enumerate(list):
             item.author_data = EnkiModelDisplayName.get_user_id_display_name_url(
                 EnkiModelDisplayName.get_by_user_id_current(item.author))
             item.post_page = enki.libutil.get_local_url(
                 'post', {'post': str(item.key.id())})
             item.sticky = True if (item.sticky_order > 0) else False
             list[i] = item
     thread_data = threadData(forums_url, forum, forum_url, thread,
                              thread_url, list,
                              enki.libutil.markdown_escaped_extras,
                              thread_selected)
     return thread_data
コード例 #2
0
ファイル: modelpost.py プロジェクト: asdlei99/enkiWS
 def add_thread_and_post(cls, user_id, forum, thread_title,
                         thread_sticky_order, post_body, post_sticky_order):
     result = enki.libutil.ENKILIB_OK
     if user_id and forum and thread_title and post_body:
         if len(thread_title
                ) <= EnkiModelThread.THREAD_TITLE_LENGTH_MAX and len(
                    post_body) <= cls.POST_LENGTH_MAX:
             if EnkiModelDisplayName.get_by_user_id_current(user_id):
                 thread = EnkiModelThread(
                     author=user_id,
                     forum=int(forum),
                     title=thread_title,
                     num_posts=1,
                     sticky_order=int(thread_sticky_order))
                 thread.put()
                 post = cls(author=user_id,
                            body=post_body,
                            thread=thread.key.id(),
                            sticky_order=int(post_sticky_order))
                 post.put()
                 forum_selected = ndb.Key(EnkiModelForum, int(forum)).get()
                 forum_selected.num_posts += 1
                 forum_selected.num_threads += 1
                 forum_selected.put()
             else:
                 result = cls.ERROR_POST_CREATION
         else:
             result = cls.ERROR_POST_LENGTH
     else:
         result = cls.ERROR_POST_CREATION
     return result
コード例 #3
0
ファイル: modelpost.py プロジェクト: asdlei99/enkiWS
 def get_author_posts(cls, author_selected):
     # get posts by author to display on their profile. If the author hasn't set a display name, return nothing
     author_display_name = EnkiModelDisplayName.get_by_user_id_current(
         int(author_selected))
     if author_display_name:
         forums_url = enki.libutil.get_local_url('forums')
         author_data = EnkiModelDisplayName.get_user_id_display_name_url(
             author_display_name)
         list = cls.fetch_by_author(int(author_selected))
         if list:
             for i, item in enumerate(list):
                 thread = EnkiModelThread.get_by_id(item.thread)
                 forum = EnkiModelForum.get_by_id(thread.forum)
                 item.thread_title = thread.title
                 item.thread_url = enki.libutil.get_local_url(
                     'thread', {'thread': str(item.thread)})
                 item.forum_title = forum.title
                 item.forum_group = forum.group
                 item.forum_url = enki.libutil.get_local_url(
                     'forum', {'forum': str(forum.key.id())})
                 item.post_page = enki.libutil.get_local_url(
                     'post', {'post': str(item.key.id())})
                 item.sticky = True if (item.sticky_order > 0) else False
                 list[i] = item
         author_posts_data = authorpostsData(
             forums_url, author_data, list,
             enki.libutil.markdown_escaped_extras)
         return author_posts_data
コード例 #4
0
 def delete_account(self, delete_posts=False, token=''):
     token_to_save = 'accountdelete'
     if not token:
         # there is no token if the user has no email address: they are deleted immediately. They must be logged in.
         user_to_delete = self.enki_user
     else:
         # a user has followed a accountdelete token link. The user account associated with the token will be deleted
         tokenEntity = EnkiModelTokenVerify.get_by_token(token)
         user_to_delete = EnkiModelUser.get_by_id(tokenEntity.user_id)
         # delete all user related tokens except any verify token related to account deletion that's not yet been used
         if tokenEntity.type == token_to_save:
             token_to_save = 'accountandpostsdelete'
     verify_tokens_to_delete = EnkiModelTokenVerify.fetch_keys_by_user_id_except_type(
         user_to_delete.key.id(), token_to_save)
     if verify_tokens_to_delete:
         ndb.delete_multi(verify_tokens_to_delete)
     email_rollback_tokens_to_delete = EnkiModelTokenEmailRollback.fetch_keys_by_user_id(
         user_to_delete.key.id())
     if email_rollback_tokens_to_delete:
         ndb.delete_multi(email_rollback_tokens_to_delete)
     # Delete the user account and log them out.
     if not HandlerBase.account_is_active(user_to_delete.key.id()):
         # delete user if the account is inactive
         display_names = EnkiModelDisplayName.fetch_keys_by_user_id(
             user_to_delete.key.id())
         if display_names:
             ndb.delete_multi(display_names)
         user_to_delete.key.delete()
     else:
         # anonymise the user
         if user_to_delete.email:
             # delete email subscriptions
             EnkiModelEmailSubscriptions.remove_by_email(
                 user_to_delete.email)
             user_to_delete.email = None
         if user_to_delete.password:
             user_to_delete.password = None
         if user_to_delete.auth_ids_provider:
             user_to_delete.auth_ids_provider = []
         user_to_delete.put()
         # keep all historical display_names. Add a new current display_name '[deleted]' (unless it's already been deleted)
         display_name = EnkiModelDisplayName.get_by_user_id_current(
             user_to_delete.key.id())
         if display_name:
             if display_name.prefix != EnkiModelDisplayName.DELETED_PREFIX or display_name.suffix != EnkiModelDisplayName.DELETED_SUFFIX:
                 EnkiModelDisplayName.set_display_name(
                     user_to_delete.key.id(),
                     EnkiModelDisplayName.DELETED_PREFIX,
                     EnkiModelDisplayName.DELETED_SUFFIX)
         # delete user's sent and received messages
         EnkiModelMessage.delete_user_messages(user_to_delete.key.id())
         # delete user's posts if required
         if delete_posts:
             EnkiModelPost.delete_user_posts(user_to_delete.key.id())
     # log the deleted user out
     if self.enki_user == user_to_delete.key.id():
         self.log_out()
     EnkiModelTokenAuth.revoke_user_authentications(user_to_delete.key.id())
コード例 #5
0
 def get_friends_user_id_display_name_url(cls, user_id):
     friend_list = []
     list = cls.get_friends_user_id(user_id)
     if list:
         for friend_id in list:
             friend = EnkiModelDisplayName.get_user_id_display_name_url(
                 EnkiModelDisplayName.get_by_user_id_current(friend_id))
             friend_list.append(friend)
     return friend_list
コード例 #6
0
 def ensure_has_display_name(self, url=None):
     # user must set their display_name to continue
     user_display_name = EnkiModelDisplayName.get_by_user_id_current(
         self.user_id)
     if not user_display_name:
         if not url:
             url = self.request.url
         # get referal path to return the user to it after they've set their display name
         self.session['sessiondisplaynamerefpath'] = url
         self.add_infomessage(MSG.INFORMATION(), MSG.DISPLAYNAME_NEEDED())
         self.redirect(enki.libutil.get_local_url('displayname'))
         return False
     return True
コード例 #7
0
 def get_messages(cls, user_id):
     list = cls.fetch_by_recipient(user_id)
     message_list = []
     if list:
         for i, item in enumerate(list):
             entity = EnkiModelDisplayName.get_by_user_id_current(
                 item.sender)
             sender = EnkiModelDisplayName.get_user_id_display_name_url(
                 entity)
             type = item.type
             message_id = item.key.id()
             message = messageData(message_id, type, sender)
             message_list.append(message)
         return message_list
コード例 #8
0
ファイル: modelpost.py プロジェクト: asdlei99/enkiWS
 def get_post_data(cls, post_selected):
     # get a post
     forums_url = enki.libutil.get_local_url('forums')
     post = cls.get_by_id(int(post_selected))
     sticky = True if (post.sticky_order > 0) else False
     post_page = enki.libutil.get_local_url('post',
                                            {'post': str(post.key.id())})
     thread = EnkiModelThread.get_by_id(post.thread)
     thread_url = enki.libutil.get_local_url(
         'thread', {'thread': str(thread.key.id())})
     forum = EnkiModelForum.get_by_id(thread.forum)
     forum_url = enki.libutil.get_local_url('forum',
                                            {'forum': str(forum.key.id())})
     author_data = EnkiModelDisplayName.get_user_id_display_name_url(
         EnkiModelDisplayName.get_by_user_id_current(post.author))
     post_data = postData(forums_url, forum, forum_url, thread, thread_url,
                          post, sticky, post_page, author_data,
                          enki.libutil.markdown_escaped_extras)
     return post_data
コード例 #9
0
 def get_forum_data(cls, forum_selected):
     forums_url = enki.libutil.get_local_url('forums')
     forum = EnkiModelForum.get_by_id(int(forum_selected))
     num_posts = 0
     threads = cls.fetch_by_forum(int(forum_selected))
     if threads:
         for i, thread in enumerate(threads):
             num_posts += thread.num_posts
             url = enki.libutil.get_local_url(
                 'thread', {'thread': str(thread.key.id())})
             thread.url = url
             thread.author_data = EnkiModelDisplayName.get_user_id_display_name_url(
                 EnkiModelDisplayName.get_by_user_id_current(thread.author))
             thread.sticky = True if (thread.sticky_order > 0) else False
             threads[i] = thread
     forum_data = forumData(forums_url, forum, num_posts, threads,
                            enki.libutil.markdown_escaped_extras,
                            forum_selected)
     return forum_data