def send_invites(request):
    if not request.user.is_staff:
        return my_utils.return_error('Invalid')
    
    result=dict()
    result['success']=True
    result['message']='success'
    
    email_list = request.POST.get('email_list',False)
    if not email_list:
        return my_utils.return_error('No list')
    
    try:
        temp_emails = list(set(email_list.split('|')))
        target_emails = list()
        for email in temp_emails:
            if re.match('[\w.]*@\w*\.[\w.]*',email):
                target_emails.append(email)
        print target_emails
        my_emailer.send_invitation_mail(request.user, target_emails)
        
    except Exception as e:
        print str(e)
        return my_utils.return_error('Failed')
    
    return HttpResponse(json.dumps(result, indent=4), mimetype='application/json')
def get_location_feeds(request):
    result=dict()
    result['success']=True
    result['message']='success'
    
    sw = request.GET.get('sw',False)
    ne = request.GET.get('ne',False)
    if not sw or not ne:
        return my_utils.return_error('No GPS')
    
    try:
        sw_lat, sw_lng = sw.split(",")
        ne_lat, ne_lng = ne.split(",")
    except Exception as e:
        print str(e)
        return my_utils.return_error('GPS Error')
        
    
    try:
        base_id = request.GET.get('base_id',False)
        additional = Q()
        if base_id:
            additional = Q(id__lt = base_id)
        feeds = Message.objects.filter(additional, lat__range=(sw_lat,ne_lat),lng__range=(sw_lng,ne_lng), is_deleted=False).order_by('-id')[:DEFAULT_LOAD_LENGTH]
        if len(feeds) == DEFAULT_LOAD_LENGTH:
                result['load_more']=True
        
        result['feeds']=my_utils.process_messages(request,feeds)
    except Exception as e:
        print str(e)
        return my_utils.return_error('Error')
    return HttpResponse(json.dumps(result, indent=4), mimetype='application/json')
def get_info_date(request):
    result=dict()
    result['success']=True
    result['message']='success'
    
    try:
        user = User.objects.get(username=request.user.username)
    except Exception as e:
        print str(e)
        return my_utils.return_error('Sign in')
    
    date = request.GET.get("date",False)
    month = request.GET.get("month",False)
    year = request.GET.get("year",False)
    
    if not (month and year and date):
        return my_utils.return_error('No Parameter')
    
    month = int(month)
    year = int(year)
    date = int(date)
    
    query_type = Q(start_time__range=(dt.date(year, month, date), dt.date(year, month, date) + dt.timedelta(1) ))
    additional = Q(host=user) | Q(invited_users__contains=user.username) | Q(is_public=True)
    try:
        events = Event.objects.filter(query_type,additional,is_deleted=False)
        result['events']=process_events(events , user) 
    except Exception as e:
        print str(e)
        pass
    return HttpResponse(json.dumps(result, indent=4), mimetype='application/json')
def update_tab_feed(request):
    result = dict()
    result["success"] = True
    result["message"] = "success"
    message = ""
    attach_list = ""
    location_info = ""
    lat = ""
    lng = ""
    if request.method == "POST":
        if request.POST["message"]:
            message = smart_unicode(request.POST["message"], encoding="utf-8", strings_only=False, errors="strict")

        if request.POST["attach_list"]:
            attach_list = request.POST["attach_list"]

        if request.POST["location_info"]:
            location_info = request.POST["location_info"]
            try:
                location = location_info.split("|")
                lat = location[0]
                lng = location[1]
            except:
                pass
    tab_id = request.POST.get("tab", -1)
    if tab_id is -1:
        return my_utils.return_error("Empty Tab")

    if message is not "":
        try:
            user = User.objects.get(username=request.user.username)
            tab = Tab.objects.get(id=tab_id)
            print location_info
            try:
                new_message = TabFeed(
                    author=user, tab=tab, contents=message, lat=lat, lng=lng, attach_files=attach_list
                )
                new_message.save()
            except:
                return my_utils.return_error("Insert Failed")

            # FILE CHECK
            attach_arr = attach_list.split(".")
            for attach_id in attach_arr:
                try:
                    if attach_id is "":
                        continue
                    attach = File.objects.get(id=attach_id)
                    attach.is_attached = True
                    attach.save()
                except Exception as e:
                    print str(e)
        except:
            return my_utils.return_error("No such User")
    else:
        return my_utils.return_error("Empty Message")

    return HttpResponse(json.dumps(result, indent=4), mimetype="application/json")
def register_poll(request):
    result=dict()
    result['success']=True
    result['message']='success'
    
    title=''
    detail=''
    option_count=''
    public=False
    
    if request.method == 'POST':
        if request.POST['title']:
            title=smart_unicode(request.POST['title'], encoding='utf-8', strings_only=False, errors='strict')
        
        if request.POST['detail']:
            detail=smart_unicode(request.POST['detail'], encoding='utf-8', strings_only=False, errors='strict')
        
        if request.POST['option_count']:
            option_count=request.POST['option_count']
        
        option_list = list()
        
        for i in range(0, int(option_count)):
            try:
                order = 'option'+str(i)
                if request.POST[order]:
                    option_text = smart_unicode(request.POST[order], encoding='utf-8', strings_only=False, errors='strict')
                    option_list.append(option_text)
            except Exception as e:
                print str(e)
                
    
    if title is not '' and len(option_list) is not 0:
        try:
            user = User.objects.get(username=request.user.username)
        except Exception as e:
            print str(e)
            return my_utils.return_error('No such User')
            
        try: 
            new_poll = Poll(author=user,title=title,contents=detail)
            new_poll.save()   
        except Exception as e:
            print str(e)
            return my_utils.return_error('Insert Failed')
            
        for option in option_list:
            try:
                new_poll_item = PollItem(poll=new_poll,detail=option)
                new_poll_item.save()
            except Exception as e:
                print str(e)
                return my_utils.return_error('Insert Failed')

    else:
        return my_utils.return_error('Emtpy Title')
    
    return HttpResponse(json.dumps(result, indent=4), mimetype='application/json')
def update_notice(request):
    result=dict()
    result['success']=True
    result['message']='success'
    message=''
    attach_list=''
    location_info=''
    lat = ''
    lng = ''
    
    if request.method == 'POST':
        if request.POST['message']:
            message=smart_unicode(request.POST['message'], encoding='utf-8', strings_only=False, errors='strict')
        
        if request.POST['attach_list']:
            attach_list=request.POST['attach_list']
            
        if request.POST['location_info']:
            location_info=request.POST['location_info']
            try:
                location = location_info.split("|")
                lat = location[0]
                lng = location[1]
            except:
                pass
    
    if message is not '':
        try:
            user = User.objects.get(username=request.user.username)
            try: 
                new_notice = Notice(author=user,contents=message,lat=lat,lng=lng,attach_files=attach_list)
                new_notice.save()   
            except:
                return my_utils.return_error('Insert Failed')

            #FILE CHECK
            attach_arr = attach_list.split('.')
            for attach_id in attach_arr:
                try:
                    if attach_id is '':
                        continue
                    attach = File.objects.get(id=attach_id)
                    attach.is_attached=True
                    attach.save()
                except Exception as e:
                    print str(e)
        except:
            return my_utils.return_error('No such User')
    else:
        return my_utils.return_error('Empty Message')
    
    return HttpResponse(json.dumps(result, indent=4), mimetype='application/json')
def send_message(request):
    result=dict()
    result['success']=True
    result['message']='success'
    
    receivers_text=''
    message=''
    if request.method == 'POST':
        if request.POST['message']:
            message=smart_unicode(request.POST['message'], encoding='utf-8', strings_only=False, errors='strict')
        
        if request.POST['receivers']:
            receivers_text=request.POST['receivers']
            
    print message
    receivers = parser.detect_users(receivers_text)
    
    receiver_list=''
    for receiver in receivers:
        receiver_list += receiver + ','
    print receiver_list
    if message is not '':
        try:
            user = User.objects.get(username=request.user.username)
        except:
            return my_utils.return_error('Sign in first')
            
        try: 
            new_dm = DirectMessage(author=user,contents=message)
            new_dm.receivers = receiver_list
            new_dm.save()
        except:
            return my_utils.return_error('Send Message Failure')
            
            
        #TODO : SEND NOTIFICATION TO USERS
        #SEND NOTIFICATION
        for receiver in receivers:
            try:
                target_user = User.objects.get(username=receiver)
                info = dict()
                info['from'] = user
                info['to'] = target_user
                info['target_object'] = new_dm
                register_noti(request, "new_dm",info)
            except:
                pass
    else:
        return my_utils.return_error('empty message')
    return HttpResponse(json.dumps(result, indent=4), mimetype='application/json')
def update_tab_comment(request):
    result = dict()
    result["success"] = True
    result["message"] = "success"

    input_message = ""
    if request.method == "POST":
        if request.POST["message"]:
            input_message = smart_unicode(
                request.POST["message"], encoding="utf-8", strings_only=False, errors="strict"
            )
        if request.POST["feed_id"]:
            feed_id = request.POST["feed_id"]

    if input_message is not "":
        try:
            user = User.objects.get(username=request.user.username)
        except:
            return my_utils.return_error("Please Sign in first")

        try:
            message = TabFeed.objects.filter(id=feed_id, is_deleted=False)[0]
        except:
            return my_utils.return_error("No such Message")

        try:
            new_comment = TabComment(author=user, contents=input_message, message=message)
            new_comment.save()
            message.save()
        except:
            return my_utils.return_error("Insert Failed")

    else:
        return my_utils.return_error("Empty Message")

    try:
        item = dict()
        item["id"] = new_comment.id
        item["author"] = new_comment.author.username
        # item['author_picture']=UserProfile.objects.get(user=new_comment.author).picture.url
        item["author_picture"] = my_utils.get_user_thumbnail(new_comment.author)
        item["author_name"] = new_comment.author.last_name
        item["contents"] = parser.parse_text(new_comment.contents)
        item["reg_date"] = str(new_comment.reg_date)
        result["comment"] = item
    except Exception as e:
        print str(e)
    return HttpResponse(json.dumps(result, indent=4), mimetype="application/json")
def get_user_feed(request,user_name):
    result=dict()
    result['success']=True
    result['message']='success'
    
    try:
        user = User.objects.get(username=user_name)
        base_id = request.GET.get("base_id",False)
        additional = Q()
        if base_id:
            additional = Q(id__lt=base_id)
        
        try:
            messages = Message.objects.filter(additional, author=user,is_deleted=False).order_by('-reg_date')[:DEFAULT_LOAD_LENGTH]
            result['feeds']=my_utils.process_messages(request,messages)
            
            if len(messages) == DEFAULT_LOAD_LENGTH:
                result['load_more']=True
            
        except:
            result['success']=True
            result['message']='Do not have any message'
    except:
            return my_utils.return_error('No Such User')
            
    return HttpResponse(json.dumps(result, indent=4), mimetype='application/json')
def delete_feed(request, feed_id):
    result=dict()
    result['success']=True
    result['message']='success'
    
    try:
        user = User.objects.get(username=request.user.username)
        try:
            message = Message.objects.get(author=user, id=feed_id)
            message.is_deleted=True
            message.save()
            
            try:
                related_topics = message.related_topics.split(",")
                for topic_name in related_topics:
                    if topic_name:
                        topic = Topic.objects.get(topic_name=topic_name)
                        topic.reference_count -=1
                        topic.save()
                
                related_topic_timelines = TopicTimeline.objects.filter(message=message)
                for timeline in related_topic_timelines:
                    timeline.delete()
            
            except Exception as e:
                print str(e)+"[11234]"
                pass
        except:
            result['success']=True
            result['message']='Invalid action'
    except:
            return my_utils.return_error('Please Sign in First')
            
    return HttpResponse(json.dumps(result, indent=4), mimetype='application/json')
def get_typed_notifications(request, typed):
    result=dict()
    result['success']=True
    result['message']='success'
    result['notis']=list()
    
    try:
        base_id = request.GET.get("base_id",False)
        additional = Q()
        if base_id:
            additional = Q(id__lt=base_id)
        
        user = User.objects.get(username=request.user.username)
        try:
            if typed == 'unread':
                unread_notis = UserNotification.objects.filter(additional,user=user,is_read=False).order_by('-reg_date')[:DEFAULT_LOAD_LENGTH]
                result['notis']=process_notis(request,unread_notis)
            
                if len(unread_notis) == DEFAULT_LOAD_LENGTH:
                    result['load_more']=True
            else:
                read_notis = UserNotification.objects.filter(additional,user=user,is_read=True).order_by('-reg_date')[:DEFAULT_LOAD_LENGTH]
                result['notis']=process_notis(request,read_notis)
            
                if len(read_notis) == DEFAULT_LOAD_LENGTH:
                    result['load_more']=True
            
        except Exception as e:
            print str(e)
            result['success']=True
            result['message']='Invalid action'
            
    except:
            return my_utils.return_error('Please Sign in First')
    return HttpResponse(json.dumps(result, indent=4), mimetype='application/json')
def update_event_comment(request):
    result=dict()
    result['success']=True
    result['message']='success'
    
    input_message=''
    if request.method == 'POST':
        if request.POST['message']:
            input_message=smart_unicode(request.POST['message'], encoding='utf-8', strings_only=False, errors='strict')
        if request.POST['event_id']:
            event_id = request.POST['event_id']

    if input_message is not '':
        try:
            user = User.objects.get(username=request.user.username)
        except:
            return my_utils.return_error('Please Sign in first')
        
        try:
            event = Event.objects.filter(id=event_id,is_deleted=False)[0]
        except:
            return my_utils.return_error('No such Event')
            
        try: 
            new_comment = EventComment(author=user,contents=input_message,event=event)
            new_comment.save()
        except:
            return my_utils.return_error('Insert Failed')
        
        #TODO: Add To event host & comment authors NOTIFICATION 

    else:
        return my_utils.return_error('Empty Message')
    
    try:
        item = dict()
        item['id']=new_comment.id
        item['author']=new_comment.author.username
        item['author_picture']=UserProfile.objects.get(user=new_comment.author).picture.url
        item['author_name']=new_comment.author.last_name
        item['contents']= parser.parse_text(new_comment.contents)
        item['reg_date']= str(new_comment.reg_date)
        result['comment']=item
    except Exception as e:
        print str(e)
    return HttpResponse(json.dumps(result, indent=4), mimetype='application/json')
def load_my_timeline(request):
    result=dict()
    result['success']=True
    result['message']='success'
    try:
        user = User.objects.get(username=request.user.username)
        try:
            base_id = request.GET.get("base_id",False)
            to_id = request.GET.get("to_id",False)
            sort_method = request.GET.get("sort","reg_date")
            additional = Q()
            load_length=DEFAULT_LOAD_LENGTH
            if base_id:
                try:
                    if sort_method == 'reg_date':
                        timeline = UserTimeline.objects.get(id=base_id)
                        additional = Q(message__reg_date__lt=timeline.message.reg_date)
                    else:
                        timeline = UserTimeline.objects.get(id=base_id)
                        additional = Q(message__update_date__lt=timeline.message.update_date)
                except:
                    pass
            if to_id:
                try:
                    timeline = UserTimeline.objects.get(id=base_id)
                    additional = Q(update_date__gte=timeline.update_date)
                except:
                    pass               
            
            
            if sort_method == 'reg_date':
                timelines = UserTimeline.objects.filter(additional,user=user,message__is_deleted=False).order_by('-message__reg_date')[:load_length]
            else:
                timelines = UserTimeline.objects.filter(additional,user=user,message__is_deleted=False).order_by('-message__update_date')[:load_length]
            
            if len(timelines) == DEFAULT_LOAD_LENGTH:
                result['load_more']=True
            messages = list()
            for timeline in timelines:
                try:
                    if not timeline.message.is_deleted:
                        timeline.message.base_id=timeline.id
                        messages.append(timeline.message)
                except:
                    pass
            
            result['feeds']=my_utils.process_messages(request,messages)
                
        except Exception as e:
            print str(e)
            result['success']=True
            result['message']='Do not have any message'
    except:
            return my_utils.return_error('No Such User')
            
    return HttpResponse(json.dumps(result, indent=4), mimetype='application/json')   
def read_notification(request, noti_id):
    result=dict()
    result['success']=True
    result['message']='success'
    result['notifications']=list()
    try:
        user = User.objects.get(username=request.user.username)
        try:
            noti = UserNotification.objects.filter(user=user, id=noti_id)[0]
            noti.is_read=True
            noti.save()
        except Exception as e:
            print str(e)
            return my_utils.return_error('Invalid action')
            
    except:
            return my_utils.return_error('Please Sign in First')
            
    return HttpResponse(json.dumps(result, indent=4), mimetype='application/json')
def recent_user_graph(request):
    if not request.user.is_staff:
        return my_utils.return_error('You cannot access to this')
    date_before = 90
    range_const = 1
    
    end_time = now_datetime()
    start_time = end_time - dt.timedelta(date_before)
    
    in_start =request.GET.get("start",False)
    in_end = request.GET.get("end",False)
        
    if in_start and in_end:
        start_time, end_time, delta, date_before = get_start_end_time(in_start, in_end)
        
    
    data = list()
    time = start_time
    label_list = list()
    
    y = y_axis()
    y.min, y.max, y.steps = 0, 20, 5
    
    while time < end_time:
        next_time = time + dt.timedelta(range_const)
        visit_count = UserLoginHistory.objects.filter(login_date__range=(time, next_time)).count()
        if visit_count > y.max:
                y.max = visit_count+5
        data.append(visit_count)
        label_list.append(time.strftime("%B %d, %Y"))
        time = next_time
    
    #t = title(text="Data From "+start_time.strftime("%B %d, %Y")+" - To "+end_time.strftime("%B %d, %Y")+"")
    #t.style = "{font-size: 12px;text-align: right;padding-bottom:5px;}"
    l = line()
    l.values = data
    l.colour = "#325AAA"
    l.tip = "#x_label#<br>#val# Users Visited"
    chart = open_flash_chart()
    #chart.title = t
    
    
    chart.y_axis = y
    
    x = x_axis()
    lbl = x_axis_labels(steps=30,labels=label_list)
    x.labels = lbl
    x.steps = 15
    chart.x_axis = x
    chart.bg_colour = '#FAFAFA'
    chart.add_element(l)
    
    return HttpResponse(chart.render())
def attend_event(request, event_id):
    result=dict()
    result['success']=True
    result['message']='success'
    result['events']=list()
    
    if request.method == 'POST':
        if request.POST['attend_type']:
            attend_type=request.POST['attend_type']
    
    if attend_type not in ['yes','no','wait']:
        return my_utils.return_error('Invalid Status')
    
    try:
        user = User.objects.get(username=request.user.username)
        username = request.user.username
        username +=","
    except Exception as e:
        print str(e)
        return my_utils.return_error('Sign in')
    
    query_type = Q(host=user) | Q(invited_users__contains=username) | Q(is_public=True)
    query_type = (query_type) & Q(start_time__gt = datetime.now())
    try:
        event = Event.objects.filter(query_type,is_deleted=False,id=event_id)[0]
    except Exception as e:
        print str(e)
        return my_utils.return_error('Invalid Action')

    try:
        event_attend = EventParticipate.objects.get_or_create(event=event, user=user)[0]
        event_attend.attend_status = attend_type
        event_attend.save()
    except Exception as e:
        print str(e)
        return my_utils.return_error('Insert Failure')
    
    
    return HttpResponse(json.dumps(result, indent=4), mimetype='application/json')
def favorite_action(request, feed_id):
    result=dict()
    result['success']=True
    result['message']='success'
    try:
        user = User.objects.get(username=request.user.username)
    except:
        return my_utils.return_error('Please Sign in first')
        
    try:
        message = Message.objects.filter(id=feed_id,is_deleted=False)[0]
    except:
        return my_utils.return_error('No such Message')
    
    try:
        user_favorite = UserFavorite.objects.get_or_create(message=message,user=user)[0]
        user_favorite.save()     
    except Exception as e:
        print str(e)
        return my_utils.return_error('Insert Failed')
    
    return HttpResponse(json.dumps(result, indent=4), mimetype='application/json')
def get_info(request):
    result=dict()
    result['success']=True
    result['message']='success'
    
    month = request.GET.get("month",False)
    year = request.GET.get("year",False)
    
    
    if not (month and year):
        return my_utils.return_error('No Parameter')
    
    month = int(month)
    year = int(year)
    
    try:
        user = User.objects.get(username=request.user.username)
    except Exception as e:
        print str(e)
        return my_utils.return_error('Sign in')
        
    
    start_date = first_day_of_month(month,year)
    end_date = first_day_of_month(month+1,year)
    print 'hi'
    print start_date
    print end_date
    print '--'
    query_type  = Q(start_time__range=(start_date,end_date))
    additional = Q(host=user) | Q(invited_users__contains=user.username) | Q(is_public=True)
    try:
        events = Event.objects.filter(query_type,additional,is_deleted=False)
        result['events']=process_events(events , user) 
    except Exception as e:
        print str(e)
        pass
    return HttpResponse(json.dumps(result, indent=4), mimetype='application/json')
def authority_update(request):
    if not request.user.is_staff:
        return my_utils.return_error('You don\'t have access.')
    result=dict()
    result['success']=True
    result['message']='success'
    
    user_list = request.POST.get('user_list',False)
    action = request.POST.get('action',False)
    if not user_list:
        return my_utils.return_error('No user.')
    if not action:
        return my_utils.return_error('No Action.')
        
    user_list = user_list.split('|')

    for user_id in user_list:
        if user_id == '':
            continue
        try:
            user = User.objects.get(id=user_id)
            user_profile = UserProfile.objects.get(user=user)
            if action == 'user':
                user.is_staff=False
            if action == 'admin':
                user.is_staff=True
            if action == 'activate':
                user_profile.is_deactivated = False
            if action == 'deactivate':
                user_profile.is_deactivated = True   
            user.save()
            user_profile.save()
        except Exception as e:
            print str(e)
            pass
        
    return HttpResponse(json.dumps(result, indent=4), mimetype='application/json')
def topic_unfavorite(request, topic_id):
    result=dict()
    result['success']=True
    result['message']='success'
    
    try:
        user = User.objects.get(username=request.user.username)
    except:
        return my_utils.return_error('Please Sign in first')
        
    try:
        topic = Topic.objects.filter(id=topic_id)[0]
    except:
        return my_utils.return_error('No such Topic')
    
    try:
        user_topic_favorite = UserTopicFavorite.objects.filter(topic=topic,user=user)[0]
        user_topic_favorite.delete()     
    except Exception as e:
        print str(e)
        return my_utils.return_error('Delete Failed')
      
    return HttpResponse(json.dumps(result, indent=4), mimetype='application/json')
    
Example #21
0
def delete_tab_comment(request, comment_id):
    result = dict()
    result["success"] = True
    result["message"] = "success"

    try:
        user = User.objects.get(username=request.user.username)
        try:
            comment = TabComment.objects.get(author=user, id=comment_id)
            comment.is_deleted = True
            comment.save()
        except:
            result["success"] = True
            result["message"] = "Invalid action"
    except:
        return my_utils.return_error("Please Sign in First")

    return HttpResponse(json.dumps(result, indent=4), mimetype="application/json")
def delete_event_comment(request, comment_id):
    result=dict()
    result['success']=True
    result['message']='success'
    
    try:
        user = User.objects.get(username=request.user.username)
        try:
            comment = EventComment.objects.get(author=user, id=comment_id)
            comment.is_deleted=True
            comment.save()
        except:
            result['success']=True
            result['message']='Invalid action'
    except:
            return my_utils.return_error('Please Sign in First')
            
    return HttpResponse(json.dumps(result, indent=4), mimetype='application/json')
def load_event(request, load_type):
    result=dict()
    result['success']=True
    result['message']='success'
    result['events']=list()
    
    try:
        user = User.objects.get(username=request.user.username)
        username = request.user.username
        username +=","
    except Exception as e:
        print str(e)
        return my_utils.return_error('Sign in')
    query_type = Q(host=user) | Q(invited_users__contains=username) | Q(is_public=True)
    
    if load_type == 'upcoming':
        query_type = (query_type) & Q(start_time__gt = datetime.now())
    elif load_type == 'past':
        query_type = (query_type) & Q(start_time__lte = datetime.now())
    elif load_type == 'me':
        query_type = Q(host=user)
        
    base_id = request.GET.get("base_id",False)
    additional = Q()
    if base_id:
        try:
            event = Event.objects.get(id=base_id)
            additional = Q(reg_date__lt=event.reg_date)
        except:
            pass
    
    try:
        events = Event.objects.filter(query_type,additional,is_deleted=False).order_by('-start_time')[:DEFAULT_LOAD_LENGTH]
        result['events']=process_events(events , user)
        
        if len(events) == DEFAULT_LOAD_LENGTH:
            result['load_more']=True
                   
    except Exception as e:
        print str(e)
        pass
    
    
    return HttpResponse(json.dumps(result, indent=4), mimetype='application/json')
def delete_reply(request, reply_id):
    result=dict()
    result['success']=True
    result['message']='success'
    
    try:
        user = User.objects.get(username=request.user.username)
        try:
            reply = DirectMessageReply.objects.get(author=user, id=reply_id)
            reply.is_deleted=True
            reply.save()
        except:
            result['success']=True
            result['message']='Invalid action'
    except:
            return my_utils.return_error('Please Sign in First')
            
    return HttpResponse(json.dumps(result, indent=4), mimetype='application/json')
    
def load_message(request, load_type):
    result=dict()
    result['success']=True
    result['error_message']='success'
    result['messages']=list()
    
    try:
        user = User.objects.get(username=request.user.username)
        username = request.user.username
        username +=","
    except Exception as e:
        print str(e)
        return my_utils.return_error('Sign in first')
    
    if load_type == 'all':
        query_type = Q(author=user) | Q(receivers__contains=username)
    elif load_type == 'sent':
        query_type = Q(author=user)
    elif load_type == 'received':
        query_type = Q(receivers__contains=username)
        
    
    base_id = request.GET.get("base_id",False)
    additional = Q()
    if base_id:
        try:
            d_message = DirectMessage.objects.get(id=base_id)
            additional = Q(reg_date__lt=d_message.reg_date)
        except:
            pass

    try:
        d_messages = DirectMessage.objects.filter(query_type, additional,is_deleted=False).order_by('-update_date')[:DEFAULT_LOAD_LENGTH]
        result['messages'] = process_messages(request, d_messages)
        
        if len(d_messages) == DEFAULT_LOAD_LENGTH:
            result['load_more']=True
    except Exception as e:
        print str(e)
    
    return HttpResponse(json.dumps(result, indent=4), mimetype='application/json')
def load_topic_timeline(request,topic_id):
    result=dict()
    result['success']=True
    result['message']='success'
    
    try:
        base_id = request.GET.get("base_id",False)
        additional = Q()
        if base_id:
            additional = Q(id__lt=base_id)
        
        topic = Topic.objects.get(id=topic_id)
        try:
            timelines = TopicTimeline.objects.filter(additional, topic=topic).order_by('-update_date')[:DEFAULT_LOAD_LENGTH]
            if not timelines:
                result['feeds']=my_utils.process_messages(request, list())
                return HttpResponse(json.dumps(result, indent=4), mimetype='application/json')
            messages = list()
            for timeline in timelines:
                try:
                    if not timeline.message.is_deleted:
                        timeline.message.base_id=timeline.id
                        messages.append(timeline.message)
                except:
                    pass
            
            if len(timelines) == DEFAULT_LOAD_LENGTH:
                result['load_more']=True
            
            result['feeds']=my_utils.process_messages(request, messages)
                
        except Exception as e:
            print str(e)
            result['success']=True
            result['message']='Do not have any message'
    except:
            return my_utils.return_error('No Such Topic')
            
    return HttpResponse(json.dumps(result, indent=4), mimetype='application/json')
def get_user_at_feed(request,user_name):
    if user_name is '':
        return my_utils.return_error('user_name is empty')
    result=dict()
    result['success']=True
    result['message']='success'
    try:
        base_id = request.GET.get("base_id",False)
        additional = Q()
        if base_id:
            additional = Q(id__lt=base_id)
        
        messages = Message.objects.filter(additional, related_users__contains=user_name+',',is_deleted=False).order_by('-reg_date')[:DEFAULT_LOAD_LENGTH]
        result['feeds']=my_utils.process_messages(request,messages)
        
        if len(messages) == DEFAULT_LOAD_LENGTH:
                result['load_more']=True             
    except:
        result['success']=True
        result['message']='Do not have any message'
            
    return HttpResponse(json.dumps(result, indent=4), mimetype='application/json')
def event_detail(request, event_id):
    result=dict()
    result['success']=True
    result['message']='success'
    
    try:
        user = User.objects.get(username=request.user.username)
        username = request.user.username
        username +=","
    except Exception as e:
        print str(e)
        return my_utils.return_error('Sign in')
    
    query_type = Q(host=user) | Q(invited_users__contains=username) | Q(is_public=True)
    try:
        events = Event.objects.filter(query_type,is_deleted=False,id=event_id)
        result['event']=process_events(events, user)[0]
    except Exception as e:
        print str(e)
        pass
    
    return HttpResponse(json.dumps(result, indent=4), mimetype='application/json')
def get_notifications(request):
    result=dict()
    result['success']=True
    result['message']='success'
    result['unread_notis']=list()
    try:
        user = User.objects.get(username=request.user.username)
        try:
            
            unread_notis = UserNotification.objects.filter(user=user, is_read=False).order_by('-reg_date')[:5]
            unread_notis_count = UserNotification.objects.filter(user=user, is_read=False).order_by('-reg_date').count()
            read_notis = UserNotification.objects.filter(user=user, is_read=True).order_by('-reg_date')[:5]
            result['unread_notis_count']=unread_notis_count
            result['unread_notis']=process_notis(request,unread_notis)
            result['read_notis']=process_notis(request,read_notis)
        except Exception as e:
            print str(e)
            result['success']=True
            result['message']='Invalid action'
            
    except:
            return my_utils.return_error('Please Sign in First')
    return HttpResponse(json.dumps(result, indent=4), mimetype='application/json')
def load_favorite(request, user_name):
    result=dict()
    result['success']=True
    result['message']='success'
    
    try:
        user = User.objects.get(username=user_name)
        try:
            base_id = request.GET.get("base_id",False)
            additional = Q()
            if base_id:
                additional = Q(id__lt=base_id)
            
            favorites = UserFavorite.objects.filter(additional, user=user,message__is_deleted=False).order_by('-reg_date')[:DEFAULT_LOAD_LENGTH]
            messages = list()
            
            for favorite in favorites:
                try:
                    if not favorite.message.is_deleted:
                        favorite.message.base_id=favorite.id
                        messages.append(favorite.message)
                except Exception as e:
                    print str(e)
                    pass
            
            if len(favorites) == DEFAULT_LOAD_LENGTH:
                result['load_more']=True
            
            result['feeds']=my_utils.process_messages(request,messages)
                
        except:
            result['success']=True
            result['message']='Do not have any message'
    except:
            return my_utils.return_error('No Such User')
            
    return HttpResponse(json.dumps(result, indent=4), mimetype='application/json')