Example #1
0
 def post(self, entry_index=None):
     entry = Entry.get_entry(entry_index)
     if not entry or entry.is_removed:
         self.siteError( SiteErrorType.ERROR_ENTRY_NOT_EXIST )
         return
     
     is_spam = self.request.get('is_spam')
     
     if is_spam:
         # block user
         siteUser = User.getSiteUser( entry.user )
         siteUser.status = UserStatus.USER_BANED
         siteUser.put()
         
         site_user_id = siteUser.key().id()
         
         # delete user's comment
         Comment.delete_with_user_id(site_user_id)
         
         # delete user's entry
         Entry.delete_with_user_id(site_user_id)
         
     
     #delete comment
     for comment in entry.comments:
         comment.delete()
         
     Entry.delete_entry(entry_index)
     
     self.redirect( "/admin/entry" )
Example #2
0
 def get(self, type, site_user_id, cursor=None):
     logging.info( type )
     if type != "entry" and type != "comment":
         self.siteError( SiteErrorType.ERROR_INVALID_ACCESS )
         return
     
     if cursor:
         cursor = urllib.unquote(cursor).decode('utf-8')
         
     self.context['siteUser'] = User.get_by_id( int( site_user_id ) )
         
     if type == "entry":
         query = Entry.all()
         query.filter("site_user_id", int( site_user_id) )
         query.filter("is_removed", False)
         query.order("-created_on")
     elif type == "comment":
         query = Comment.all()
         query.filter("site_user_id", int( site_user_id) )
         query.order("-created_on")
     
     
     logging.info( query.__dict__ )
     paging = Paging( query )
     paging.setLimit(10)
     paging.setCurrentCursor(cursor)
     paging.execute()        
     
     self.context['paging'] = paging
     
     if type == "entry":
         self.render( "admin/entry.html" )
     elif type == "comment":
         self.render( "admin/comment.html" )
Example #3
0
 def get(self, comment_id=None):
     comment_id = int( comment_id )
     comment = Comment.get_by_id( comment_id )
     
     if not comment:
         self.siteError( SiteErrorType.ERROR_COMMENT_NOT_EXIST )
         return
     
     self.context['comment'] = comment
     self.render('admin/delete_comment.html')
     pass
Example #4
0
 def post(self, comment_id=None):
     comment_id = int( comment_id )
     comment = Comment.get_by_id( comment_id )
     if not comment:
         self.siteError( SiteErrorType.ERROR_COMMENT_NOT_EXIST )
         return
     
     siteUser = User.getSiteUser( comment.user )
     Comment.delete_comment(comment)
     
     is_spam = self.request.get('is_spam')
     if is_spam:
         siteUser.status = UserStatus.USER_BANED
         siteUser.put()
         
         site_user_id = siteUser.key().id()
         
         # delete user's comment
         Comment.delete_with_user_id(site_user_id)
         
         # delete user's entry
         Entry.delete_with_user_id(site_user_id)
     
     self.redirect( '/admin/comment' )
Example #5
0
 def get(self, cursor=None):
     
     if cursor:
         cursor = urllib.unquote(cursor).decode('utf-8')
         
     query = Comment.all()
     query.order("-created_on")
     
     paging = Paging(query)
     paging.setLimit(10)
     paging.setCurrentCursor(cursor)
     paging.execute()
 
     self.context['paging'] = paging                
     
     self.render( "admin/comment.html" )
Example #6
0
 def get_comment(request, question_id):
     content = request.form.get("comment")
     if content:
         user_id = session.get("user_id")
         com = Comment(content=content,
                       question_id=question_id,
                       author_id=user_id)
         try:
             db.session.add(com)
             db.session.commit()
             return "ok"
         except Exception as e:
             print(e)
             db.session.rollback()
             return "fall"
     else:
         return "mn"
Example #7
0
def assign_dev():
    ticket_id = request.form.get('ticket_id')
    ticket = Ticket.query.get(ticket_id)
    ticket.assigned_user_id = request.form.get('dev_name')
    ticket.update()

    #Insert record in ticket history
    user_id = request.form.get('dev_name')
    today = date.today()
    #t_update_date = today.strftime("%d/%m/%Y")
    t_update_date = constants.CURRENT_DATE
    t_history_id = db.session.query(func.max(
        Ticket_history.t_history_id)).all()
    if t_history_id[0][0] == None:
        ticket_history = Ticket_history(1, ticket_id, user_id, ticket.t_status,
                                        t_update_date, ticket.t_priority)
    else:
        ticket_history = Ticket_history(t_history_id[0][0] + 1, ticket_id,
                                        user_id, ticket.t_status,
                                        t_update_date, ticket.t_priority)

    try:
        ticket_history.insert()
    except:
        print(sys.exc_info())
        abort(500)

    #Insert record in comments
    userinfo = session.get('profile')
    assigned_user_name = Users.query.with_entities(
        Users.user_name).filter(Users.user_id == user_id).one()
    c_id = db.session.query(func.max(Comment.c_id)).all()
    if c_id[0][0] == None:
        comment = Comment(1, ticket_id, userinfo['user_id'], t_update_date,
                          " assigned developer " + assigned_user_name[0])
    else:
        comment = Comment(c_id[0][0] + 1, ticket_id, userinfo['user_id'],
                          t_update_date,
                          " assigned developer " + assigned_user_name[0])
    try:
        comment.insert()
    except:
        print(sys.exc_info())
        abort(500)

    #Record a notification
    notification = Notification(ticket_id, user_id, 'Assigned')
    try:
        notification.insert()
    except:
        print(sys.exc_info())
        abort(500)
    return redirect('/ticketdetails/' + ticket_id)
Example #8
0
 def post(self, index=None):
     if not self.context['user'].get_current_user():
         self.siteError( SiteErrorType.ERROR_INVALID_ACCESS )
         return
         
     self.context['index'] = index
     
     entry = Entry.get_entry( index )
     
     if not entry or entry.is_removed:
         self.siteError( getSiteErrorMessage("entry_not_exist") )
         return
         
     remote_addr = self.request.remote_addr        
     if not remote_addr:
         self.siteError( getSiteErrorMessage("invalid_access") )
         return
     user = self.context['user'].get_current_user()
     User.insertUser(user, remote_addr)
     
     
     if self.context['user'] and User.isUserNeedCaptcha( self.get_current_user() ):
         comment_form = CommentRecaptchaForm(self.request.remote_addr, data = self.request.POST)
     else:
         comment_form = CommentForm(data = self.request.POST)
         
     if comment_form.is_valid():
         comment = Comment.insert(entry, comment_form.cleaned_data['content'], user, remote_addr)
         
         entry.comment_count = entry.comment_count + 1
         entry.updated_on = datetime.datetime.now()
         entry.put()
         
         PagingCursorMasterKey.clearModelKey("Comment")
         
         self.redirect("/entry/%s#comment%d"%(index, comment.id()))
         
     else:
         self.createCSRFToken()
         self.context['entry'] = entry
         self.context['comment_form'] = comment_form
         self.render("view.html")
Example #9
0
def submit_comment():
    comment_text = request.form.get('comment')
    ticket_id = request.form.get('ticket_id')
    today = date.today()
    #update_date = today.strftime("%d/%m/%Y")
    update_date = constants.CURRENT_DATE
    userinfo = session.get('profile')
    user_id = Users.query.with_entities(
        Users.user_id).filter_by(user_email=userinfo['email'])
    c_id = db.session.query(func.max(Comment.c_id)).all()
    if c_id[0][0] == None:
        comment_entry = Comment(1, ticket_id, user_id, update_date,
                                comment_text)
    else:
        comment_entry = Comment(c_id[0][0] + 1, ticket_id, user_id,
                                update_date, comment_text)
    try:
        comment_entry.insert()
    except:
        print(sys.exc_info())
        abort(500)

    return redirect('/ticketdetails/' + ticket_id)
Example #10
0
def update_project_status():
    userinfo = session.get('profile')
    ticket_id = request.form.get('ticket_id')
    ticket_entry = Ticket.query.get(ticket_id)
    #today = date.today()
    #t_update_date = today.strftime("%d/%m/%Y")
    t_update_date = constants.CURRENT_DATE
    t_status = request.form.get('input')
    p_name = request.form.get('p_name')

    ticket_entry.t_status = t_status
    try:
        ticket_entry.update()
    except:
        print(sys.exc_info())
        abort(500)

    if t_status == "Closed":
        ticket_entry.t_close_date = t_update_date

    #ENTER IN TICKET HISTORY
    ticket_id = ticket_entry.t_id
    t_history_id = db.session.query(func.max(
        Ticket_history.t_history_id)).all()
    if t_history_id[0][0] == None:
        ticket_history_entry = Ticket_history(1, ticket_id,
                                              ticket_entry.assigned_user_id,
                                              t_status, t_update_date,
                                              ticket_entry.t_priority)
    else:
        ticket_history_entry = Ticket_history(t_history_id[0][0] + 1,
                                              ticket_id,
                                              ticket_entry.assigned_user_id,
                                              t_status, t_update_date,
                                              ticket_entry.t_priority)

    try:
        ticket_history_entry.insert()
    except:
        print(sys.exc_info())
        abort(500)

    #ENTER IN NOTIFICATIONS
    p_id = Project.query.with_entities(
        Project.p_id).filter(Project.p_name == p_name).one()
    user_list = Map_user_proj.query.with_entities(
        Map_user_proj.user_id).filter(Map_user_proj.p_id == p_id).all()
    for user in user_list:
        notification = Notification(ticket_id, user, 'Update')
        try:
            notification.insert()
        except:
            print(sys.exc_info())
            abort(500)

    #Insert record in comments
    c_id = db.session.query(func.max(Comment.c_id)).all()
    if c_id[0][0] == None:
        comment = Comment(1, ticket_id, userinfo['user_id'], t_update_date,
                          " Updated ticket status to  " + t_status)
    else:
        comment = Comment(c_id[0][0] + 1, ticket_id, userinfo['user_id'],
                          t_update_date,
                          " Updated ticket status to  " + t_status)

    try:
        comment.insert()
    except:
        print(sys.exc_info())
        abort(500)
    return redirect('/ticketdetails/' + str(ticket_id))
Example #11
0
def get_ticket_details(ticket_id):
    userinfo = session.get('profile')
    #Check whether the request is valid
    authorized_personnel = Map_user_proj.query.join(Ticket, Map_user_proj.p_id == Ticket.p_id)\
                            .add_columns(Map_user_proj.user_id).filter(Map_user_proj.user_id== userinfo['user_id'])\
                                .filter(Ticket.t_id == ticket_id).all()

    if len(authorized_personnel) == 0 and userinfo['role'] != 'Admin':
        abort(401)



    result = Ticket_history.query.join(Users, Ticket_history.user_id == Users.user_id, isouter=True)\
            .add_columns(Ticket_history.t_id, Users.user_name.label('user_id'), Ticket_history.t_status, Ticket_history.t_update_date\
                ,Ticket_history.t_priority)\
                    .filter(Ticket_history.t_id == ticket_id)
    ticket_history_list = [row for row in result]
    ticket_history = [
        Ticket_history.json_format(row) for row in ticket_history_list
    ]

    #SELECT TICKET INFORMATION FOR TICKET_ID. SELECT PROJECT NAME AS 'P_ID'
    sql_ticket = text(""" SELECT tick.t_id, 
                            tick.t_title, 
                            tick.t_desc, 
                            u.user_name AS assigned_user_id, 
                            tick.submitter_email, 
                            proj.p_name  AS p_id, 
                            tick.t_priority, 
                            tick.t_status, 
                            tick.t_type, 
                            tick.t_create_date, 
                            tick.t_close_date 
                        FROM   ticket tick 
                            INNER JOIN project proj 
                                    ON tick.p_id = proj.p_id 
                            LEFT OUTER JOIN users u 
                                    ON u.user_id = tick.assigned_user_id 
                        WHERE  tick.t_id = """ + str(ticket_id) + """  """)
    result_ticket = db.session.execute(sql_ticket)
    ticket_list = [row for row in result_ticket]
    ticket = [Ticket.json_format(row) for row in ticket_list]

    comment_list = Comment.query.join(Users, Comment.user_id==Users.user_id)\
                .add_columns(Comment.t_id, Comment.comment, Comment.date, Users.user_name.label('user_id'))\
                .filter(Comment.t_id==ticket_id)\
                .order_by(Comment.c_id.desc()).all()
    comment = [Comment.json_format(row) for row in comment_list]

    #Get list of developers in the project for assigning
    dev_list = Ticket.query.join(Map_user_proj, Ticket.p_id == Map_user_proj.p_id)\
                .join(Users, Map_user_proj.user_id == Users.user_id)\
                .add_columns(Users.user_name, Users.user_id)\
                .filter(Ticket.t_id == ticket_id).filter(Map_user_proj.user_role == 'Developer').all()

    assigned_dev_id = Ticket.query.with_entities(
        Ticket.assigned_user_id).filter(Ticket.t_id == ticket_id).all()

    #Get notifications
    notification_list = NotificationController.get_notifications(
        userinfo['user_id'])
    notification_count = len(notification_list)

    data = {
        "ticket": ticket,
        "ticket_history": ticket_history,
        "userinfo": userinfo,
        "user_id": userinfo['user_id'],
        "role": userinfo['role'],
        "username": userinfo['nickname'],
        "page": "ticket_detail",
        "comment": comment,
        "dev_list": dev_list,
        "notification": notification_list,
        "notification_count": notification_count,
        "assigned_dev": assigned_dev_id[0][0]
    }
    return render_template('ticket_details.html', data=data)