Example #1
0
 def post(self, *args, **kwargs):
     tid = kwargs.get('tid')
     if not tid:
         raise HTTPError(404)
     task = Task.get(id=tid)
     form = CommentForm(self.request.arguments)
     # set form data
     form.from_user_id.data = self.user.id
     form.from_user_name.data = self.user.name
     form.to_user_id.data = task.creator_id
     form.to_user_name.data = task.creator_name
     form.task_id.data = task.id
     form.task_title.data = task.title
     # 分析content 识别链接, 识别@
     # 链接 <a>url</a>
     content, at_users = analyse_content(form.content.data)
     print '****************content: ', repr(content)
     form.type.data = Comment._type_at if at_users else Comment._type_reply
     form.content.data = content
     if form.validate():
         comment = Comment.new(**form.data)
         # 评论消息 自己回复自己或者自己@自己不发消息
         if int(self.user.id) != int(task.creator_id):
             Message.set(
                 user_id=task.creator_id,
                 from_user=self.user,
                 task=task,
                 pid=self.pid,
                 pname=self.auth.project_name,
                 type='apply',
                 content=content,
             )
         # @消息
         for name in at_users:
             user = User.get(name=name, status=User._status_ok)
             if user and user.id != int(self.user.id):
                 Message.set(
                     user_id=user.id,
                     from_user=self.user,
                     task=task,
                     pid=self.pid,
                     pname=self.auth.project_name,
                     type='@',
                     content=content,
                 )
         return self.redirect('/%s/task/%s' % (self.pid, task.id))
     else:
         return self.render('comment.html',
                            errors=form.errors,
                            auth=self.auth,
                            task=task)
Example #2
0
 def get(self, *args, **kwargs):
     self.set_cookie('index-mode', self._mode)
     page = self.get_args('p', 1, int)
     messages = Message.user_msgs(user_id=self.user.id, page=page)
     Message.mark_read(user_id=self.user.id)
     # for m in messages:
     #     if m.status == m._status_unread:
     #         self.add_message(u'你有新的消息')
     #         break
     num = Message.number(user_id=self.user.id)
     paginator = Paginator(page, num, Message._per_page)
     # auth
     auths = Auth.find_user_projects(self.user.id)
     return self.render('index.html', datas=messages, auths=auths, paginator=paginator, page=page)
Example #3
0
 def post(self, *args, **kwargs):
     tid = kwargs.get('tid')
     if not tid:
         raise HTTPError(404)
     task = Task.get(id=tid)
     form = CommentForm(self.request.arguments)
     # set form data
     form.from_user_id.data = self.user.id
     form.from_user_name.data = self.user.name
     form.to_user_id.data = task.creator_id
     form.to_user_name.data = task.creator_name
     form.task_id.data = task.id
     form.task_title.data = task.title
     # 分析content 识别链接, 识别@
     # 链接 <a>url</a>
     content, at_users = analyse_content(form.content.data)
     print '****************content: ', repr(content)
     form.type.data = Comment._type_at if at_users else Comment._type_reply
     form.content.data = content
     if form.validate():
         comment = Comment.new(**form.data)
         # 评论消息 自己回复自己或者自己@自己不发消息
         if int(self.user.id) != int(task.creator_id):
             Message.set(
                 user_id=task.creator_id,
                 from_user=self.user,
                 task=task,
                 pid=self.pid,
                 pname=self.auth.project_name,
                 type='apply',
                 content=content,
             )
         # @消息
         for name in at_users:
             user = User.get(name=name, status=User._status_ok)
             if user and user.id != int(self.user.id):
                 Message.set(
                     user_id=user.id,
                     from_user=self.user,
                     task=task,
                     pid=self.pid,
                     pname=self.auth.project_name,
                     type='@',
                     content=content,
                 )
         return self.redirect('/%s/task/%s' % (self.pid, task.id))
     else:
         return self.render('comment.html', errors=form.errors, auth=self.auth, task=task)
Example #4
0
    def post(self, *args, **kwargs):
        # todo
        p_users = Auth.find_project_users(pid=self.pid)
        p_users = [{
            'id': auth.user_id,
            'name': auth.user_name
        } for auth in p_users]
        json_p_users = json.dumps(p_users)
        self.p_users = p_users  # form填充需要使用
        form = TaskForm(self, self.request.arguments)
        is_continue = int(self.get_args('continue', 0))
        if form.validate():
            form.created.data = datetime.now()
            data = dict(form.data)
            if not data['expires']:
                data.pop('expires')
            # return
            task = Task.new(**data)
            # 指派用户, 记录消息
            for ud in task.assigned_users:
                Message.set(user_id=ud['id'],
                            from_user=self.user,
                            task=task,
                            pid=self.pid,
                            pname=self.auth.project_name,
                            type='assigned')
            if task and is_continue:
                self.add_message(u'发布任务成功')
                return self.redirect(self.request.uri)
            return self.redirect('/%s/task' % self.pid)
        else:

            return self.render(
                'task-new.html',
                task=form.data,  # 字典
                auth=self.auth,
                json_users=json_p_users,
                statuses=self.statuses,
                types=self.types,
                priorities=self.priorities,
                errors=form.errors,
                update=False)
Example #5
0
    def post(self, *args, **kwargs):
        # todo
        p_users = Auth.find_project_users(pid=self.pid)
        p_users = [{'id': auth.user_id, 'name': auth.user_name} for auth in p_users]
        json_p_users = json.dumps(p_users)
        self.p_users = p_users  # form填充需要使用
        form = TaskForm(self, self.request.arguments)
        is_continue = int(self.get_args('continue', 0))
        if form.validate():
            form.created.data = datetime.now()
            data = dict(form.data)
            if not data['expires']:
                data.pop('expires')
            # return
            task = Task.new(**data)
            # 指派用户, 记录消息
            for ud in task.assigned_users:
                Message.set(user_id=ud['id'],
                            from_user=self.user,
                            task=task,
                            pid=self.pid,
                            pname=self.auth.project_name,
                            type='assigned')
            if task and is_continue:
                self.add_message(u'发布任务成功')
                return self.redirect(self.request.uri)
            return self.redirect('/%s/task' % self.pid)
        else:

            return self.render(
                'task-new.html',
                task=form.data,  # 字典
                auth=self.auth,
                json_users=json_p_users,
                statuses=self.statuses,
                types=self.types,
                priorities=self.priorities,
                errors=form.errors,
                update=False)
Example #6
0
 def get(self, *args, **kwargs):
     """ order: p, s, t default desc p_, s_, t_ - asc
     """
     # get args
     status = self.get_args('s') or self.get_cookie('status', 'unsolved')
     order = self.get_args('o') or self.get_cookie('order', 'p')  # _o - desc, o_ - asc
     page = self.get_args('p', 1)
     # 记录状态
     self.set_cookie('status', status)
     self.set_cookie('order', order)
     self.set_cookie('cur_auth', str(self.auth.id))
     # set order_by
     if order not in self._order.keys():
         order = 'p'
     order_by = self._order.get(order)
     page = int(page)
     pros = Auth.find_user_projects(uid=self.user.id)
     where = dict(
         uid=self.user.id,
         pid=self.pid,
         status=status
     )
     if status != 'assigned':
         tasks, num = Task.find_project_tasks(
             page=page,
             order_by=order_by,
             get_num=True,
             **where)
         paginator = Paginator(page, num, Task._per_page)
     else:
         tasks = Task.assigned_tasks(
             user_id=self.user.id,
             order_by=order_by,
             pid=self.pid,
         )
         paginator = None
     unread_num = Message.unread_num(user_id=self.user.id)
     return self.render(
         'task-home.html',
         cur_pro=self.auth,
         pros=pros,
         tasks=tasks,
         status=status,
         order=order,
         page=page,
         paginator=paginator,
         unread_num=unread_num)
Example #7
0
 def get(self, *args, **kwargs):
     """ order: p, s, t default desc p_, s_, t_ - asc
     """
     # get args
     status = self.get_args('s') or self.get_cookie('status', 'unsolved')
     order = self.get_args('o') or self.get_cookie(
         'order', 'p')  # _o - desc, o_ - asc
     page = self.get_args('p', 1)
     # 记录状态
     self.set_cookie('status', status)
     self.set_cookie('order', order)
     self.set_cookie('cur_auth', str(self.auth.id))
     # set order_by
     if order not in self._order.keys():
         order = 'p'
     order_by = self._order.get(order)
     page = int(page)
     pros = Auth.find_user_projects(uid=self.user.id)
     where = dict(uid=self.user.id, pid=self.pid, status=status)
     if status != 'assigned':
         tasks, num = Task.find_project_tasks(page=page,
                                              order_by=order_by,
                                              get_num=True,
                                              **where)
         paginator = Paginator(page, num, Task._per_page)
     else:
         tasks = Task.assigned_tasks(
             user_id=self.user.id,
             order_by=order_by,
             pid=self.pid,
         )
         paginator = None
     unread_num = Message.unread_num(user_id=self.user.id)
     return self.render('task-home.html',
                        cur_pro=self.auth,
                        pros=pros,
                        tasks=tasks,
                        status=status,
                        order=order,
                        page=page,
                        paginator=paginator,
                        unread_num=unread_num)
Example #8
0
 def post(self, *args, **kwargs):
     """ 编辑任务 并记录更新历史
     """
     tid = kwargs.get('tid')
     mode = kwargs.get('mode')
     if not tid or mode != 'edit':
         raise HTTPError(404)
     p_users = Auth.find_project_users(pid=self.pid)
     self.p_users = [{'id': auth.user_id, 'name': auth.user_name} for auth in p_users]
     self.json_p_users = json.dumps(self.p_users)
     task = Task.get(id=tid)
     post_data = self.request.arguments
     # log note
     log_note = post_data['note'][0].decode('utf8')
     form = TaskForm(self, post_data)
     # redefine task message
     form.creator_id.data = task.creator_id
     form.creator_name.data = task.creator_name
     form.project_id.data = self.pid
     form.created.data = task.created
     # 旧的指派者
     assigned_users = task.assigned_users
     if form.validate():
         task = task.update_and_log(
             data=form.data,
             actor_id=self.user.id,
             actor_name=self.user.name,
             note=log_note)
         if task:
             # 指派用户, 记录消息
             for ud in task.assigned_users:
                 Message.set(user_id=ud['id'],
                             from_user=self.user,
                             task=task,
                             pid=self.pid,
                             pname=self.auth.project_name,
                             type='assigned')
             # 删除更新 未指派用户的消息 为获取用户消息提供服务 物理删除记录
             del_msg_user_ids = [u['id'] for u in assigned_users if u['id'] not in task.assigned_ids]
             for duid in del_msg_user_ids:
                 Message.delete(
                     user_id=duid,
                     type=Message._type_assigned,
                     task_id=task.id,
                     project_id=self.pid
                 )
             # 任务更新消息
             if task.creator_id != self.user.id:
                 Message.set(
                     user_id=task.creator_id,
                     from_user=self.user,
                     task=task,
                     pid=self.pid,
                     pname=self.auth.project_name,
                     type='edit'
                 )
             return self.redirect('/%s/task/%s' % (self.pid, task.id))
         self.add_message(u'更新任务失败, 请重试')
         return self.render('failed.html')
     else:
         # 去除已经填写的用户
         assigneds = json.loads(form.assigneds.data)
         aids = set([ud['id'] for ud in assigneds])
         json_users = json.dumps([ud for ud in self.p_users if ud['id'] not in aids])
         return self.render(
             'task-new.html',
             task=form.data,
             auth=self.auth,
             json_users=json_users,
             statuses=self.statuses,
             types=self.types,
             priorities=self.priorities,
             errors=form.errors,
             update=True)
Example #9
0
 def post(self, *args, **kwargs):
     """ 编辑任务 并记录更新历史
     """
     tid = kwargs.get('tid')
     mode = kwargs.get('mode')
     if not tid or mode != 'edit':
         raise HTTPError(404)
     p_users = Auth.find_project_users(pid=self.pid)
     self.p_users = [{
         'id': auth.user_id,
         'name': auth.user_name
     } for auth in p_users]
     self.json_p_users = json.dumps(self.p_users)
     task = Task.get(id=tid)
     post_data = self.request.arguments
     # log note
     log_note = post_data['note'][0].decode('utf8')
     form = TaskForm(self, post_data)
     # redefine task message
     form.creator_id.data = task.creator_id
     form.creator_name.data = task.creator_name
     form.project_id.data = self.pid
     form.created.data = task.created
     # 旧的指派者
     assigned_users = task.assigned_users
     if form.validate():
         task = task.update_and_log(data=form.data,
                                    actor_id=self.user.id,
                                    actor_name=self.user.name,
                                    note=log_note)
         if task:
             # 指派用户, 记录消息
             for ud in task.assigned_users:
                 Message.set(user_id=ud['id'],
                             from_user=self.user,
                             task=task,
                             pid=self.pid,
                             pname=self.auth.project_name,
                             type='assigned')
             # 删除更新 未指派用户的消息 为获取用户消息提供服务 物理删除记录
             del_msg_user_ids = [
                 u['id'] for u in assigned_users
                 if u['id'] not in task.assigned_ids
             ]
             for duid in del_msg_user_ids:
                 Message.delete(user_id=duid,
                                type=Message._type_assigned,
                                task_id=task.id,
                                project_id=self.pid)
             # 任务更新消息
             if task.creator_id != self.user.id:
                 Message.set(user_id=task.creator_id,
                             from_user=self.user,
                             task=task,
                             pid=self.pid,
                             pname=self.auth.project_name,
                             type='edit')
             return self.redirect('/%s/task/%s' % (self.pid, task.id))
         self.add_message(u'更新任务失败, 请重试')
         return self.render('failed.html')
     else:
         # 去除已经填写的用户
         assigneds = json.loads(form.assigneds.data)
         aids = set([ud['id'] for ud in assigneds])
         json_users = json.dumps(
             [ud for ud in self.p_users if ud['id'] not in aids])
         return self.render('task-new.html',
                            task=form.data,
                            auth=self.auth,
                            json_users=json_users,
                            statuses=self.statuses,
                            types=self.types,
                            priorities=self.priorities,
                            errors=form.errors,
                            update=True)