def handle(request, username):
    username = username.lower()
    user = get_object_or_404(models.User, username=username)
    myself = siteaction.getLoggedInUser(request)
    
    if not canDownloadResume(user, myself):
        return siteaction.render_to_response('showmessage.htm', 
                                        {'msg_heading':'Access denied',
                                         'msg_html':'You do not have permissions to view this page.'})
                                        
    plain_resume = canViewPlainResume(user, myself)
    myself = siteaction.getLoggedInUser(request)
    type_pref = None
    if myself:
        if myself.username == user.username:
            type_pref = dataplus.dictGetVal(request.REQUEST, 'type')
                
    file_path = codejar_resume.getResumeFilePath(user, type_pref, not plain_resume)
    if not file_path:
        return HttpResponseNotFound('<h1>Page not found.</h1>')
    
    ext = os.path.splitext(file_path)[1].lower()
    read_type = {'.doc':'rb', '.pdf':'rb', '.odt':'rb', '.html':'r'}[ext]
    mime_type = {'.doc':'application/msword', '.pdf':'application/pdf', '.odt':'application/vnd.oasis.opendocument.text', '.html':'text/html'}[ext]
    
    file = open(file_path, read_type)
    filecontents = file.read()
    file.close()
    
    response = HttpResponse(filecontents, mimetype=mime_type)
    response['Content-Disposition'] = 'attachment; filename=' + user.username + ext
    
    return response
def handle(request): 
    try:
        myself = siteaction.getLoggedInUser(request)
        if not myself:
            return ajaxian.getFailureResp('not_logged_in')

        comm_id = string.atoi(dataplus.dictGetVal(request.REQUEST,'commId'))
        community = models.Community.objects.get(id=comm_id)
        title = dataplus.dictGetSafeVal(request.REQUEST,'title')
        text = dataplus.dictGetSafeVal(request.REQUEST,'text')
        
        if community.is_moderated:
            if not community.members.filter(id=myself.id):
                return ajaxian.getFailureResp('This is a moderated community. So only members can post.')
        
        topic = models.CommunityTopic()
        topic.community = community
        topic.title = title
        topic.started_by = myself        
        topic.last_post_at = datetime.utcnow()
        topic.save()
        
        post = models.CommunityPost()
        post.topic = topic
        post.posted_by = myself
        post.text = text
        post.save()
        
        return ajaxian.getSuccessResp(me_communities_show.getTopicBoxHtml(topic, True))
    except:
        return ajaxian.getFailureResp('unknown')
def handle(request):
    myself = siteaction.getLoggedInUser(request)
    if not myself:
        return HttpResponseRedirect('/login.htm')

    if request.method == 'GET':      
        action_result = ''
        if dataplus.dictGetVal(request.REQUEST, 'flashId'):
            action_result = dataplus.dictGetVal(statix.action_messages, dataplus.dictGetVal(request.REQUEST, 'flashId'), '')
            
        myself.image_url = dataplus.getStaticUrl(myself.image_size3_file_path)
        return siteaction.render_to_response('me/changephoto.htm', { 'action_result':action_result, 'myself':myself})
    elif request.method == 'POST':
        success, error_code, img1, img2, img3, img4 = studio.saveImage_x4_ByDate(request, 'user_' + myself.username, 'photograph')
        if success:
            if myself.image_file_path != img1:
                iolib.deleteFiles([myself.image_file_path, myself.image_size1_file_path, \
                        myself.image_size2_file_path, myself.image_size3_file_path])
                myself.image_file_path = img1
                myself.image_size1_file_path = img2
                myself.image_size2_file_path = img3
                myself.image_size3_file_path = img4
                myself.save()
                
                chat_settings = models.ChatSettings.objects.get(account=myself.account)
                chat_settings.image_size1_file_path = img2
                chat_settings.image_size2_file_path = img3
                chat_settings.image_size3_file_path = img4
                chat_settings.save()
                session_id = request.COOKIES['session_id']
                siteaction.updateLivewireData(session_id, myself.account)
        else:
            return HttpResponseRedirect('/me/changephoto.htm?flashId=' + error_code)
        
        return HttpResponseRedirect('/me/?flashId=usrpic_chnged')
def handle(request):
    myself = siteaction.getLoggedInUser(request)
    if not myself:
        return HttpResponseRedirect('/login.htm')

    page = dataplus.dictGetVal(request.REQUEST, 'page', 0, string.atoi)
    start_job_num = page * config.jobs_per_page
    last_job_num = start_job_num + config.jobs_per_page
    
    total_jobs = searchjobs.getMatchingJobsCount(myself)

    jobs = searchjobs.getMatchingJobs(myself, config.jobs_per_page, start_job_num)
    
    if total_jobs == 0:
        showing_howmany = '0 of 0 matching jobs'
    else:
        showing_howmany = str(start_job_num + 1) + '-' +  str(start_job_num + len(jobs)) + ' of ' + str(total_jobs)
    
    prev_btn = ''
    next_btn = ''
    if page != 0:
        prev_btn = '<td><input class="medium-btn" type="button" name="prev-button" value="PREV" onclick="javascript:window.location.href=\'matchingjobs.htm?page=' + str(page-1) + '\'" /></td>'
    if last_job_num < total_jobs:
        next_btn = '<td><input class="medium-btn" type="button" name="next-button" value="NEXT" onclick="javascript:window.location.href=\'matchingjobs.htm?page=' + str(page+1) + '\'" /></td>'

    buttons = prev_btn + next_btn
  
    return siteaction.render_to_response('me/matchingjobs.htm',
                              { 'interesting_jobs': jobs,
                                'showing_howmany': showing_howmany,
                                'buttons': buttons,
                                'myself' : myself })
def handle(request):
    myself = siteaction.getLoggedInUser(request, True)
    if not myself:
        return HttpResponseRedirect('/login.htm')
    
    action_id, random_key = codejar_invites.getInviteData(request)
    if not action_id:
        return HttpResponseRedirect('/me/')
    
    invitation = action_id + '=' + random_key
    
    if myself.account.account_state == 'I':
        post_signup_actions = dataplus.returnIfExists(models.PostSignupActions.objects.filter(user=myself))
        if not post_signup_actions:
            post_signup_actions = models.PostSignupActions(user=myself)
        
        if post_signup_actions.actions:
            post_signup_actions.actions += ',' + invitation
        else:
            post_signup_actions.actions = invitation
        
        post_signup_actions.save()
        
        return HttpResponseRedirect('/me/createresume.htm')
    
    else:
        success, response = codejar_invites.processInvitations(myself, [invitation])
        return response  
def handle(request):
    logged_in_type = siteaction.getLoggedInAccountType(request)
    if logged_in_type == 'U':
        myself = siteaction.getLoggedInUser(request)
        mru_data = models.UserMRUData.objects.get(user__id=myself.id)
        html_file = 'me/inbox.htm'
    elif logged_in_type == 'R':
        myself = siteaction.getLoggedInRecruiter(request)
        mru_data = models.RecruiterMRUData.objects.get(recruiter__id=myself.id)
        html_file = 'recruiters/inbox.htm'
    else:
        return HttpResponseRedirect('/login.htm')
    
    if request.method == 'POST':
        if dataplus.dictGetVal(request.REQUEST, 'action', '') == 'delete':
            deleteMessages(request, myself)
            return HttpResponseRedirect('/mailbox/?flashId=msg_del');
        
    new_msgs_count = models.Message.objects.filter(account__id=myself.account.id, folder='inbox', 
            sent_at__gte=mru_data.last_accessed_time).count()
        
    action_result = ''
    if dataplus.dictGetVal(request.REQUEST, 'flashId'):
        action_result = dataplus.dictGetVal(statix.action_messages, dataplus.dictGetVal(request.REQUEST, 'flashId'), '')
    
    return siteaction.render_to_response(html_file,
                              { 'message_box_html': getMessageBoxHtml(request, myself),
                                'new_msgs_count': new_msgs_count,
                                'action_result':action_result,
                                'myself': myself    })
def handle(request, comm_id):
    myself = siteaction.getLoggedInUser(request)
    if not myself:
        return HttpResponseRedirect('/login.htm')
    
    community = models.Community.objects.select_related().get(id=comm_id)
    if myself.username != community.owner_username:
        return siteaction.render_to_response('me/showmessage.htm', {'msg_heading':'Error', 'msg_html':'Unauthorized access.'})

    if request.method == 'GET':
        action_result = ''
        if dataplus.dictGetVal(request.REQUEST, 'flashId'):
            action_result = dataplus.dictGetVal(statix.action_messages, dataplus.dictGetVal(request.REQUEST, 'flashId'), '')
        
        community.image_url = dataplus.getStaticUrl(community.image_size3_file_path)
        return siteaction.render_to_response('communities/changephoto.htm', \
                                    {'community':community,
                                     'action_result':action_result,
                                     'myself':myself})
    elif request.method == 'POST':
        success, error_code, img1, img2, img3, img4 = studio.saveImage_x4_ByDate(request, 'comm_' + str(community.id), 'commIcon')
        if success:
            if community.image_file_path != img1:
                iolib.deleteFiles([community.image_file_path, community.image_size1_file_path, \
                    community.image_size2_file_path, community.image_size3_file_path])
                community.image_file_path = img1
                community.image_size1_file_path = img2
                community.image_size2_file_path = img3
                community.image_size3_file_path = img4
                community.save()            
        else:
            return HttpResponseRedirect('/communities/' + str(comm_id) + '/changephoto.htm?flashId=' + error_code)
            
        return HttpResponseRedirect('./?flashId=commpic_chnged')
Exemple #8
0
def handle(request): 
    try:
        logged_in_type = siteaction.getLoggedInAccountType(request)
        rcvr_usrname = dataplus.dictGetVal(request.REQUEST,'sendTo')
        
        if logged_in_type == 'U':
            myself = siteaction.getLoggedInUser(request)
        elif logged_in_type == 'R':
            myself = siteaction.getLoggedInRecruiter(request)
        else:
            return ajaxian.getFailureResp('not_logged_in')
        
        rcvr_account = models.Account.objects.get(username=dataplus.dictGetVal(request.REQUEST,'sendTo'))
        text_message = dataplus.dictGetSafeVal(request.REQUEST,'text')
        html_message = dataplus.replaceHtmlLineBreaks(text_message)
        subject = dataplus.dictGetSafeVal(request.REQUEST,'subject')
        
        def internalSender(rcvr_accounts):
            mailman.sendMessage(myself.username, [rcvr.username for rcvr in rcvr_accounts], subject, html_message)
        
        def externalSender(rcvr_accounts):
            sender = '"' + myself.name + '" <' + myself.username + '*****@*****.**>'
            receivers = ['"' + rcvr.name + '" <' + rcvr.email + '>'  for rcvr in rcvr_accounts]
            mailman.sendMail(sender, receivers, subject, html_message, None, None, text_message, reply_to=myself.email)
            
        mailman.sendBySettings([rcvr_account], internalSender, externalSender, 'TextMessage')
                
        return ajaxian.getSuccessResp('')
    except:
        return ajaxian.getFailureResp('unknown')
def handle(request): 
    try:
        myself = siteaction.getLoggedInUser(request)
        if not myself:
            return ajaxian.getFailureResp('not_logged_in')
        
        invite_email = dataplus.dictGetVal(request.REQUEST,'invite_email')
        is_valid, err_msg = codejar_validation.validateEmail(invite_email)
        if not is_valid:
            return ajaxian.getFailureResp('invalid_email')

        #see if a user with the same email exists
        user = dataplus.returnIfExists(models.User.objects.filter(email=invite_email))
        if user:
            if user.username == myself.username:
                return ajaxian.getSuccessResp('cannot_add_self')

        invitation = models.FriendInvitation(sent_by=myself, sent_to_email=invite_email)
        invitation.invite_random_key = dataplus.getUniqueId()
        invitation.save()
        
        subject = myself.name + ' has invited you to Socialray'
        html_file = '/apps/socialray/website/bigfoot/websitetools/mailtemplates/invitation.html'
        text_file = '/apps/socialray/website/bigfoot/websitetools/mailtemplates/invitation.txt'
        
        mailer.sendInvite(html_file, text_file, myself, subject, (invite_email), 
            {'name':lambda x:x.name,  
            'username':lambda x:x.username,
            'message':lambda x:'',
            'invite_random_key':lambda x:str(invitation.invite_random_key)})
        return ajaxian.getSuccessResp('')
    
    except:
        return ajaxian.getFailureResp('unknown')
def handle(request):
    myself = siteaction.getLoggedInUser(request)
    if not myself:
        return HttpResponseRedirect('/login.htm')
    
    settings = models.UserSettings.objects.get(user=myself)
    
    if request.method == 'GET':
        resume_visibility = hotmetal.elemSelect([('Everyone', 'everyone'), ('Friends only', 'friends'), ('Nobody', 'nobody')], [],
            None, None, settings.resume_visibility, 'name="resume_visibility" id="resume_visibility" style="width:120px"')
            
        hide_phone_numbers_checked = ('', 'checked="checked"')[settings.phone_num_visibility != 'everyone']
            
        action_result = ''
        if dataplus.dictGetVal(request.REQUEST, 'flashId'):
            action_result = dataplus.dictGetVal(statix.action_messages, dataplus.dictGetVal(request.REQUEST, 'flashId'), '')
        
        return siteaction.render_to_response('me/editprivacy.htm',
                    {'resume_visibility':resume_visibility, 
                     'hide_phone_numbers_checked':hide_phone_numbers_checked, 
                     'action_result':action_result,
                     'myself': myself
                    })
            
    elif request.method == 'POST':
        settings.resume_visibility = dataplus.dictGetVal(request.REQUEST,'resume_visibility')
        settings.phone_num_visibility = dataplus.dictGetVal(request.REQUEST, 'hide_phone_numbers', 'everyone', lambda x:'friends')
        settings.save()
        
        return HttpResponseRedirect('/me/editprivacy.htm?flashId=privacy_saved')
def handle(request):
    logged_in_type = siteaction.getLoggedInAccountType(request)
    
    if logged_in_type == 'U':
        myself = siteaction.getLoggedInUser(request)
        html_file = 'me/sentitems.htm'
    elif logged_in_type == 'R':
        myself = siteaction.getLoggedInRecruiter(request)
        html_file = 'recruiters/sentitems.htm'
    else:
        return HttpResponseRedirect('/login.htm')
        
    if request.method == 'POST':
        if dataplus.dictGetVal(request.REQUEST, 'action', '') == 'delete':
            deleteMessages(request, myself)
            return HttpResponseRedirect('/mailbox/sentitems.htm?flashId=msg_del');
        
    action_result = ''
    if dataplus.dictGetVal(request.REQUEST, 'flashId'):
        action_result = dataplus.dictGetVal(statix.action_messages, dataplus.dictGetVal(request.REQUEST, 'flashId'), '')
        
    return siteaction.render_to_response(html_file,
                              { 'message_box_html': getMessageBoxHtml(request, myself),
                                'action_result':action_result,
                                'myself': myself    })
def handle(request):
    myself = siteaction.getLoggedInUser(request)
    if myself is None:
        return HttpResponseRedirect('/login.htm')
    else:
        return render_to_response('recruiters/accountcreated.htm',
            {'myself': myself})
Exemple #13
0
def handle(request):
    myself = siteaction.getLoggedInUser(request)
    if not myself:
        return HttpResponseRedirect('/login.htm')

    page = dataplus.dictGetVal(request.REQUEST, 'page', 0, string.atoi)
    start_ref_num = page * config.referrals_per_page
    last_ref_num = start_ref_num + config.referrals_per_page
    
    total_referrals = myself.received_referrals.count()

    referrals = myself.received_referrals.order_by('-created_at')[start_ref_num:last_ref_num]
    for referral in referrals:
        referral.preview_text = dataplus.getPreviewText(referral.text)
    
    if total_referrals == 0:
        showing_howmany = '0 of 0 job referrals'
    else:
        showing_howmany = str(start_ref_num + 1) + '-' +  str(start_ref_num + referrals.count()) + ' of ' + str(total_referrals)
    
    prev_btn = ''
    next_btn = ''
    if page != 0:
        prev_btn = '<td><input class="medium-btn" type="button" name="prev-button" value="PREV" onclick="javascript:window.location.href=\'referrals.htm?page=' + str(page-1) + '\'" /></td>'
    if last_ref_num < total_referrals:
        next_btn = '<td><input class="medium-btn" type="button" name="next-button" value="NEXT" onclick="javascript:window.location.href=\'referrals.htm?page=' + str(page+1) + '\'" /></td>'

    buttons = prev_btn + next_btn
  
    return siteaction.render_to_response('me/referrals.htm',
                              { 'received_referrals': referrals,
                                'showing_howmany': showing_howmany,
                                'buttons': buttons,
                                'myself' : myself })
Exemple #14
0
def handle(request):
    myself = siteaction.getLoggedInUser(request)
    if not myself:
        return HttpResponseRedirect('/login.htm')

    username = dataplus.dictGetVal(request.REQUEST, 'user')
    if username and username != myself.username:
        user = dataplus.returnIfExists(models.User.objects.filter(username=username))
        if not user:
            return siteaction.render_to_response('me/showmessage.htm', 
                        {'myself':myself,
                        'msg_heading':'Error',
                        'msg_html':'Invalid Request'})
        heading = user.name + '\'s Friends'
    else:
        user = myself
        heading = ''

    page = dataplus.dictGetVal(request.REQUEST, 'page', 0, string.atoi)
    start_friend_num = page * config.friends_per_page
    last_friend_num = start_friend_num + config.friends_per_page
    
    total_friends = user.friends.count()
    friends = user.friends.all().order_by('-last_access_time')[start_friend_num:last_friend_num]

    html = ''
    if user == myself:
        friends_usernames = [user.username for user in friends]
        online_status = chat.getOnlineStatus(request, friends_usernames, 'friend')
        for friend in friends:
            html += codejar_network.getDescriptiveThumb(friend, True, online_status[friend.username])
    else:
        for friend in friends:
            html += codejar_network.getDescriptiveThumb(friend)
    
    if total_friends == 0:
        showing_howmany = '0 of 0 friends'
    else:
        showing_howmany = str(page*config.friends_per_page + 1) + '-' +  str(page*config.friends_per_page + friends.count()) + ' of ' + str(total_friends)
    
    prev_btn = ''
    next_btn = ''
    page_url = 'friends.htm?'
    if username:    page_url = 'friends.htm?user='******'&'
    if page != 0:
        prev_btn = '<input class="medium-btn" type="button" name="prev-button" value="PREV" onclick="javascript:window.location.href=\'' + page_url + 'page=' + str(page-1) + '\'" />'
    if last_friend_num < total_friends:
        next_btn = '<input class="medium-btn" type="button" name="next-button" value="NEXT" onclick="javascript:window.location.href=\'' + page_url + 'page=' + str(page+1) + '\'" />'

    buttons = prev_btn + next_btn
  
    return siteaction.render_to_response('me/friends.htm',
                              { 'friends_html': html,
                                'showing_howmany': showing_howmany,
                                'heading': heading,
                                'buttons': buttons,
                                'myself' : myself })
def handle(request, job_id):
    myself = siteaction.getLoggedInUser(request)
    if not myself:
        return HttpResponseRedirect('/login.htm')
    
    if not job_id:
        return siteaction.render_to_response('showmessage.htm', { 
                'msg_heading':'Error',
                'msg_html':'Access denied.'})
                
    job = dataplus.returnIfExists(models.JobPosition.objects.filter(id=job_id))
    if not job:
        return siteaction.render_to_response('showmessage.htm', { 
                'msg_heading':'Error',
                'msg_html':'Access denied.'})
    
    if job.posted_by:
        job.posted_by_name = job.posted_by.name
    elif job.tag:
        match = re.match('^.*name\=(?P<name>.*?);',job.tag)
        if match:
            job.posted_by_name = match.group('name')
        
    if request.method == 'GET':
        action_result = ''
        if dataplus.dictGetVal(request.REQUEST, 'flashId'):
            action_result = dataplus.dictGetVal(statix.action_messages, dataplus.dictGetVal(request.REQUEST, 'flashId'), '')
            
        if job.min_compensation == job.max_compensation:
            job.salary = str(job.min_compensation)
        else:
            job.salary = str(job.min_compensation) + ' - ' + str(job.max_compensation)
        return siteaction.render_to_response('jobs/viewjobposition.htm',
                            { 'myself': myself,
                              'job':job,
                              'action_result':action_result,
                            })
    elif request.method == 'POST':
        html_message = '<p>Hello ' + job.posted_by_name + ',</p><p>This is in reference to the job you posted titled "' + job.title + '" for ' + job.company_name + '. ' + \
                    'I would like to apply for this position and you can find my resume as an attachment.</p><p>You can always download my latest resume from ' + \
                    '<a href="' + config.server_base_url + config.profiles_url + '/' + myself.username + '">my profile</a>.</p>' + \
                    '<p>Regards,<br />' + myself.name + '</p><br /><br /><br /><br /><br /><br />'+ \
                    'Don\'t want to receive email alerts? Just change your <a href="' + config.server_base_url +  \
                    '/me/editsettings.htm">Email Forwarding Settings</a>'
                    
        text_message = 'Hello ' + job.posted_by_name + ',\r\nThis is in reference to the job you posted titled "' + job.title + '" for ' + job.company_name + '. ' + \
                    'I would like to apply for this position and you can find my resume as an attachment.\r\nYou can always download my latest resume from my profile at ' + \
                    config.server_base_url + config.profiles_url + '/' + myself.username + '.\r\n' + \
                    'Regards,\r\n' + myself.name + '\r\n\r\n\r\n\r\n\r\n\r\n' + + \
                    'Don\'t want to receive email alerts? Just change your Email Forwarding Settings, visit - "' +  \
                    config.server_base_url + '/me/editsettings.htm"'
                    
        resume_file = codejar_resume.getResumeFilePath(myself)
        mailman.sendMail('"' + myself.name + '" <' + myself.username + '*****@*****.**>', [job.contact_email], 'Re: Job Posting - ' + job.title, html_message, [resume_file], None, text_message, reply_to=myself.email)

        return HttpResponseRedirect('/jobs/' + str(job.id) + '/?flashId=resume_fwd')
def handle(request): 
    try:
        myself = siteaction.getLoggedInUser(request)
        if not myself:
            return ajaxian.getFailureResp('not_logged_in')

        new_friend_id = dataplus.dictGetVal(request.REQUEST,'userId')
        new_friend = dataplus.returnIfExists(models.User.objects.filter(id=new_friend_id))
        if not new_friend:
            return ajaxian.getSuccessResp('user_not_exists')
            
        #surprise.... you cannot add yourself, as a friend too!
        if (str(myself.id) == new_friend_id):
            return ajaxian.getSuccessResp('cannot_add_yourself')        
        
        #see if such a friend exists
        #if so, then don't add
        friend = dataplus.returnIfExists(myself.friends.filter(id=new_friend_id))
        
        if not friend:
            #see if there is already a pending friend request
            #if a request exists from the other user lets make them friends
            friend_req_from = dataplus.returnIfExists(models.FriendRequest.objects.filter(sent_by__id=new_friend_id, sent_to__id=myself.id))
            if friend_req_from:
                myself.friends.add(new_friend)
                myself.save()
                friend_req_from.delete()    
                return ajaxian.getSuccessResp('friend_added')        
            
            #if a request from myself is there
            #if so don't add.. its pending
            friend_req_to = dataplus.returnIfExists(models.FriendRequest.objects.filter(sent_to__id=new_friend_id, sent_by__id=myself.id))
            if not friend_req_to:
                friend_req = models.FriendRequest()
                friend_req.sent_by = myself
                friend_req.sent_to = new_friend
                friend_req.sent_on = datetime.datetime.utcnow()
                friend_req.save()
                html_mail_content = '<p>Hello ' + new_friend.name + ',</p><p><a href="' + config.server_base_url + \
                    '/profiles/' + myself.username + '">' + myself.name + '</a> has sent you a friend request. Please <a href="http://www.socialray.org/me/">Login to Socialray</a> to approve or reject the request.</p>' + \
                    '<p>Regards,<br />from Socialray</p><br /><br /><br /><br /><br />' 
                        
                text_mail_content = 'Hello ' + new_friend.name + ',\r\n\r\n' + myself.name + '(' + config.server_base_url + \
                    '/profiles/' + myself.username + ') wants to be your friend. Please login to Socialray to approve or reject the request.\r\n\r\n' + \
                    'Regards,\r\nfrom Socialray\r\n\r\n\r\n\r\n\r\n' 
                    
                mailman.sendMail('"' + myself.name + '" <' + myself.username + '*****@*****.**>', [new_friend.email], 'Socialray: ' + myself.name + ' wants to add you as a friend', html_mail_content, None, None, text_mail_content, reply_to=myself.email)
                return ajaxian.getSuccessResp('request_added')
            else:
                return ajaxian.getSuccessResp('pending_request')
        else:
            return ajaxian.getSuccessResp('already_a_friend')
                
    except:
        return ajaxian.getFailureResp('unknown')        
def handle(request):
    myself = siteaction.getLoggedInUser(request)
    if not myself:
        return HttpResponseRedirect('/login.htm')

    if request.method == 'GET':        
        action_result = ''
        if dataplus.dictGetVal(request.REQUEST, 'flashId'):
            action_result = dataplus.dictGetVal(statix.action_messages, dataplus.dictGetVal(request.REQUEST, 'flashId'), '')
            
        return siteaction.render_to_response('me/newcommunity.htm', {'action_result':action_result, 'myself':myself})
    elif request.method == 'POST':
        result, errMsg = codejar_validation.validateCommunityName(dataplus.dictGetVal(request.REQUEST,'communityName'))
        if not result:
            return siteaction.render_to_response('me/showmessage.htm', {'myself':myself, 'msg_heading':'Error', 'msg_html':'Invalid user input.'})

        comm_name = dataplus.dictGetSafeVal(request.REQUEST,'communityName')
        if codejar_network.checkCommunityNameExists(comm_name):
            return siteaction.render_to_response('me/newcommunity.htm', 
                                        {'communityName':comm_name,
                                         'communityDesc':dataplus.dictGetSafeVal(request.REQUEST,'communityDesc'),
                                         'action_result':dataplus.dictGetVal(statix.action_messages,'comm_name_exists') })
            
        community = models.Community()
        community.name = comm_name
        community.desc = dataplus.dictGetSafeVal(request.REQUEST,'communityDesc')
        community.is_moderated = { 'isPublic':False,
                                    'isModerated':True}[dataplus.dictGetVal(request.REQUEST, 'communityType')]
        community.owner_username = myself.username
        community.save()
        
        if request.FILES:
            img_save_success, error_code, img1, img2, img3, img4 = \
                studio.saveImage_x4_ByDate(request, 'comm_' + str(community.id), 'commIcon')

            if img_save_success:
                community.image_file_path = img1
                community.image_size1_file_path = img2
                community.image_size2_file_path = img3
                community.image_size3_file_path = img4
            else:
                return siteaction.render_to_response('me/newcommunity.htm', 
                                            {'communityName':community.name,
                                             'communityDesc':community.desc,
                                             'action_result':dataplus.dictGetVal(statix.action_messages,error_code) })
        else:
            community.image_file_path = config.noimg_comm
            community.image_size1_file_path = config.noimg_comm_50
            community.image_size2_file_path = config.noimg_comm_72
            community.image_size3_file_path = config.noimg_comm_128

        community.save()
        myself.communities.add(community)
        
        return HttpResponseRedirect(config.communities_url + '/' + str(community.id) + '/invite.htm')
def handle(request):
    myself = siteaction.getLoggedInUser(request)
    if not myself:
        return HttpResponseRedirect('/login.htm')
    
    if request.method == 'GET':
        return siteaction.render_to_response('me/searchcommunities.htm', 
            {'showing_search_results': False,
             'myself': myself,
             'interesting': searchcomm.getInterestingComms(myself)})
    
    elif request.method == 'POST':
        keywords = dataplus.dictGetVal(request.REQUEST,'keywords')
        
        if dataplus.dictGetVal(request.REQUEST,'action') == 'display':
            page = dataplus.dictGetVal(request.REQUEST,'page',0,string.atoi)
            
            pickled_match_list = dataplus.dictGetVal(request.REQUEST,'matches')
            match_list = cPickle.loads(str(pickled_match_list))
        else:
            keywords = keywords.strip()
            if keywords != '':
                match_list = searchcomm.getMatches(keywords)
                pickled_match_list = cPickle.dumps(match_list)
                page = 0
            else:
                return siteaction.render_to_response('me/searchcommunities.htm', 
                    {'showing_search_results': True,
                     'myself': myself,
                     'message':'Please enter a valid search query.'})                
        
        start_num = page * config.community_matches_per_page
        end_num = ((page + 1) * config.community_matches_per_page)
        display_list = match_list[start_num:end_num]
        comms_bulk_dict = models.Community.objects.in_bulk(display_list)
        num_pages = ((len(match_list)-1)/config.community_matches_per_page) + 1
            
        matching_communities = dataplus.getOrderedList(comms_bulk_dict, display_list)
        for comm in matching_communities:
            comm.image_url = dataplus.getStaticUrl(comm.image_size2_file_path)
        
        if match_list:
            message = 'Showing ' + str(start_num + 1) + ' - ' + str(start_num + len(matching_communities)) + ' of ' + str(len(match_list)) + ' matches.'
        else:
            message = 'Your search did not return any results.'
            
        return siteaction.render_to_response('me/searchcommunities.htm', 
            {   'matching_communities': matching_communities,
                'matches': cgi.escape(pickled_match_list),
                'message': message,
                'page_links_html': getPageLinksHtml(num_pages, page),
                'keywords': cgi.escape(keywords, True),
                'myself': myself,
                'showing_search_results': True})
def handle(request):
    myself = siteaction.getLoggedInUser(request)
    if not myself:
        return HttpResponseRedirect(
            config.server_base_url + "/login.htm?returnUrl=" + config.server_base_url + "/me/editsettings.htm"
        )

    settings = models.UserSettings.objects.get(user=myself)

    if request.method == "GET":
        action_result = ""
        if dataplus.dictGetVal(request.REQUEST, "flashId"):
            action_result = dataplus.dictGetVal(
                statix.action_messages, dataplus.dictGetVal(request.REQUEST, "flashId"), ""
            )

        return siteaction.render_to_response(
            "me/editsettings.htm",
            {
                "fwd_messages_checked": dataplus.conditionalValue(
                    lambda: settings.email_fwd_messages == True, 'checked="checked"', ""
                ),
                "fwd_jobrefs_checked": dataplus.conditionalValue(
                    lambda: settings.email_fwd_jobrefs == True, 'checked="checked"', ""
                ),
                "fwd_alerts_checked": dataplus.conditionalValue(
                    lambda: settings.email_fwd_alerts == True, 'checked="checked"', ""
                ),
                "action_result": action_result,
                "myself": myself,
            },
        )

    if request.method == "POST":
        result, errMsg = codejar_validation.validateName(dataplus.dictGetVal(request.REQUEST, "fullname"))
        if not result:
            return siteaction.render_to_response(
                "me/showmessage.htm", {"myself": myself, "msg_heading": "Error", "msg_html": "Invalid user input."}
            )

        myself.name = dataplus.dictGetVal(request.REQUEST, "fullname")
        myself.account.name = dataplus.dictGetVal(request.REQUEST, "fullname")
        myself.account.save()
        myself.save()

        settings = models.UserSettings.objects.get(user=myself)
        settings.email_fwd_messages = dataplus.dictGetVal(request.REQUEST, "email_fwd_messages", False, lambda x: True)
        settings.email_fwd_jobrefs = dataplus.dictGetVal(request.REQUEST, "email_fwd_jobrefs", False, lambda x: True)
        settings.email_fwd_alerts = dataplus.dictGetVal(request.REQUEST, "email_fwd_alerts", False, lambda x: True)

        settings.save()

        return HttpResponseRedirect("/me/editsettings.htm?flashId=acctset_saved")
def handle(request): 
    try:
        myself = siteaction.getLoggedInUser(request)
        if not myself:
            return ajaxian.getFailureResp('not_logged_in')

        html = me_index.getFriendsBoxHtml(myself, request)
        friends_count = myself.friends.count()
        
        return ajaxian.getSuccessResp(friends_count, html)
    except:
        return ajaxian.getFailureResp('unknown')
def handle(request): 
    try:
        myself = siteaction.getLoggedInUser(request)
        if not myself:
            return ajaxian.getFailureResp('not_logged_in')
        
        msg_id = dataplus.dictGetVal(request.REQUEST,'messageId')
        result, msg = mailman.deleteMessage(myself.account, msg_id)
        if not result:
            ajaxian.getFailureResp(msg)
        else:        
            return ajaxian.getSuccessResp(msg)
    except:
        return ajaxian.getFailureResp('unknown')
def handle(request):
    q_id = dataplus.dictGetVal(request.REQUEST, 'qid', '0', string.atoi)
    if q_id == 0:
        return HttpResponseRedirect('/login.htm')
    question = get_object_or_404(models.ResumeQuestion, id=q_id)
    
    myself = siteaction.getLoggedInUser(request)
    if not myself or myself.id != question.receiver.id:
        return HttpResponseRedirect('/login.htm?' + urllib.urlencode(
                {'returnUrl':'/me/answerresumequestion.htm?qid=' + str(q_id)}))
    
        
    if question.receiver.id != myself.id:
        return siteaction.render_to_response('me/showmessage.htm', 
            {'myself':myself, 
            'msg_heading': 'Error',
            'msg_html': 'Access Denied.'})
    
    if request.method == 'GET':
        return siteaction.render_to_response('me/answerresumequestion.htm',
            {'myself':myself,
            'question':question,
            'is_public_checked':dataplus.conditionalValue(lambda: question.is_public == True, 'checked="checked"', '')})
            
    elif request.method == 'POST':
        question.answer = dataplus.dictGetSafeVal(request.REQUEST, 'answer')
        question.is_public = dataplus.dictGetVal(request.REQUEST, 'is_public')
        question.is_answered = True
        question.save()

        html_message = myself.name + ' has answered your question (' + question.question + ').<br />' + \
            '<strong>Answer: </strong> ' + question.answer
            
        text_message = myself.name + ' has answered your question (' + question.question + ').\r\n' + \
            'Answer: ' + question.answer
        
        subject = myself.name + ' has answered your question'
        def internalSender(rcvr_accounts):
            rcvr = rcvr_accounts[0]
            mailman.sendToInbox(myself.username, rcvr.username, subject, html_message, 'TM', 'H')
        
        def externalSender(rcvr_accounts):
            sender = '"' + myself.name + '" <' + myself.username + '*****@*****.**>'
            receivers = ['"' + rcvr.name + '" <' + rcvr.email + '>'  for rcvr in rcvr_accounts]
            mailman.sendMail(sender, receivers, subject, html_message, 
                None, None, text_message, reply_to=myself.email)
        
        mailman.sendBySettings([question.sender], internalSender, externalSender, 'AnswerToResumeQuestion')
        
        return HttpResponseRedirect('/me/?flashId=rqa_saved')
def handle(request):
    myself = siteaction.getLoggedInUser(request)
    if not myself:        
        return ajaxian.getFailureResp('')
    
    uname_startswith = dataplus.dictGetVal(request.REQUEST, 'username')
    html = '<ul>'
    friends = myself.friends.all()       
    for friend in friends:
        if (friend.username.startswith(uname_startswith) or friend.name.startswith(uname_startswith)):
            html += '<li>' + friend.username + '<span class="informal"> (' + friend.name + ')</span>'
    html += '</ul>'
    
    return HttpResponse(html)
def handle(request):
    req_id = dataplus.dictGetVal(request.REQUEST, 'reqId', '0', string.atoi)
    myself = siteaction.getLoggedInUser(request)
    if not myself:
        return HttpResponseRedirect('/login.htm?' + urllib.urlencode(
                {'returnUrl':'/me/approvecommjoinreq.htm?reqId=' + str(req_id)}))
        
    join_req = dataplus.returnIfExists(models.CommunityJoinRequest.objects.filter(id=req_id))
    if not join_req:
        return siteaction.render_to_response('me/showmessage.htm',
            { 'myself':myself, 'msg_heading':'Request not found',
                'msg_html':'The community join request does not exist. It must have already been processed.'})
            
    if join_req.community.owner_username != myself.username:
        return siteaction.render_to_response('me/showmessage.htm',
            { 'myself':myself, 'msg_heading':'Error', 'msg_html':'Access denied.' })
    
    if request.method == 'GET':
        return siteaction.render_to_response('me/approvecommjoinreq.htm',
            {'myself':myself,
            'join_req':join_req})
            
    elif request.method == 'POST':
        allowed = False
        if dataplus.dictGetVal(request.REQUEST,'result') == 'allow':
            join_req.sent_by.communities.add(join_req.community)
            allowed = True
            flashId = 'comm_join_allowed'
        else:
            flashId = 'comm_join_denied'
            join_req.delete()
                
        approved_text = ('denied','approved')[allowed]
        subject = 'Re: Request to join ' + join_req.community.name
        html_message = '<p>Your request to join \'' + join_req.community.name + '\' was ' + \
                        approved_text + ' by the administrator.<p><p>Regards,<br />from Socialray</p>'
        text_message = 'Your request to join \'' + join_req.community.name + '\' was ' + \
                        approved_text + ' by the administrator.\r\n\r\nRegards,\r\n from Socialray\r\n\r\n'
        def internalSender(rcvr_accounts):
            mailman.sendToInbox(myself.username, rcvr_accounts[0].username, subject, html_message)
        
        def externalSender(rcvr_accounts):
            sender = '"' + myself.name + '" <' + myself.username + '*****@*****.**>'
            receivers = ['"' + rcvr.name + '" <' + rcvr.email + '>'  for rcvr in rcvr_accounts]
            mailman.sendOneWayMail(sender, receivers, subject, html_message, None, None, text_message)
                
        mailman.sendBySettings([join_req.sent_by.account], internalSender, externalSender, 'SocialrayAlert')
    
        return HttpResponseRedirect('/me?flashId=' + flashId)
def handle(request, comm_id):
    if request.method == 'GET':
        community = models.Community.objects.get(id=comm_id)
        myself = siteaction.getLoggedInUser(request)
        if not myself:
            return HttpResponseRedirect('/login.htm')
        
        
        if community.owner_username != myself.username:
            return siteaction.render_to_response('me/showmessage.htm', 
                    { 'myself':myself, 
                    'msg_heading':'Error', 
                    'msg_html':'Access denied' })
        
        member_id = dataplus.dictGetVal(request.REQUEST, 'memberId', 0, string.atoi)
        member = dataplus.returnIfExists(community.members.filter(id=member_id))
        if not member:
            return siteaction.render_to_response('me/showmessage.htm', 
                    { 'myself':myself, 
                    'msg_heading':'Error', 
                    'msg_html':'Invalid request' })
    
        action = dataplus.dictGetVal(request.REQUEST, 'action')    
        if not request.has_key('action'):
            return siteaction.render_to_response('communities/managemember.htm', 
                    { 'community':community, 
                    'myself':myself,
                    'member_thumbnail': getUserThumb(member),
                    'member':member, })
        
        if action == 'transfer_ownership':
            community.owner_username = member.username
            community.save()
            flashId = 'comm_trnsfr_owner'
        elif action == 'delete_membership':
            member.communities.remove(community)
            flashId = 'comm_del_mem'
        elif action == 'delete_posts':
            member.community_posts.all().delete()
            flashId = 'comm_del_posts'

        return HttpResponseRedirect(config.communities_url + '/' + str(community.id) + '?flashId=' + flashId)
    
    else:   #should never have a post :)
        return siteaction.render_to_response('me/showmessage.htm', 
                { 'myself':myself, 
                'msg_heading':'Error', 
                'msg_html':'Access denied' })
def handle(request): 
    try:
        myself = siteaction.getLoggedInUser(request)
        if not myself:
            return ajaxian.getFailureResp('not_logged_in')
        
        ref_id = dataplus.dictGetVal(request.REQUEST, 'refId', 0, string.atoi)
        job_ref = dataplus.returnIfExists(models.JobReferral.objects.filter(id=ref_id))        
        if not job_ref:
            return ajaxian.getFailureResp('invalid_request')
        return ajaxian.getSuccessResp( {'subject':job_ref.subject, 
                                        'industry_category':job_ref.industry_category.name, 
                                        'min_exp':job_ref.min_experience_years,
                                        'text':job_ref.text})
    except:
        return ajaxian.getFailureResp('unknown')
def handle(request): 
    try:
        myself = siteaction.getLoggedInUser(request)
        if not myself:
            return ajaxian.getFailureResp('not_logged_in')
        
        resume_file_path = myself.resume_dir + '/' + myself.username + '.doc'
        if os.path.exists(resume_file_path):
            os.remove(resume_file_path)
        
        settings = models.UserSettings.objects.get(user=myself)
        settings.has_doc_resume = False
        settings.save()
        return ajaxian.getSuccessResp('')
    except:
        return ajaxian.getFailureResp('unknown')
def handle(request): 
    try:
        myself = siteaction.getLoggedInUser(request)
        if not myself:
            return ajaxian.getFailureResp('not_logged_in')
        
        msg_id = dataplus.dictGetVal(request.REQUEST,'messageId')
        msg = dataplus.returnIfExists(models.Message.objects.filter(id=msg_id, account__id=myself.account.id, folder='trashcan'))
        if msg:
            msg.folder = 'inbox'
            msg.save()
            return ajaxian.getSuccessResp('moved_to_inbox')
        else:        
            return ajaxian.getFailureResp('invalid_messageId')
    except:
        return ajaxian.getFailureResp('unknown')
def handle(request): 
    try:
        myself = siteaction.getLoggedInUser(request)
        if not myself:
            return ajaxian.getFailureResp('not_logged_in')
        
        user_id = dataplus.dictGetVal(request.REQUEST, 'userId')
        #see if such a friend exists
        friend = dataplus.returnIfExists(myself.friends.filter(id=user_id))
        if friend:
            myself.friends.remove(friend)
            return ajaxian.getSuccessResp('removed_friend')
        else:
            return ajaxian.getSuccessResp('not_a_friend')
    except:
        return ajaxian.getFailureResp('unknown')
def handle(request, comm_id):    
    community = models.Community.objects.get(id=comm_id)
    
    logged_in_type = siteaction.getLoggedInAccountType(request)
    if logged_in_type == 'U':
        myself = siteaction.getLoggedInUser(request)
        is_owner = (community.owner_username == myself.username)
        html_file = 'communities/members.htm'
    elif logged_in_type == 'R':
        myself = siteaction.getLoggedInRecruiter(request)
        html_file = 'communities/members.htm'
    else:
        return HttpResponseRedirect('/login.htm')

    page = dataplus.dictGetVal(request.REQUEST, 'page', 0, string.atoi)
    start_member_num = page * config.community_members_per_page
    last_member_num = start_member_num + config.community_members_per_page
    
    total_members = community.members.all().count()
    members = community.members.select_related().order_by('-last_access_time')[start_member_num:last_member_num]

    html = ''
    for member in members:
        html += codejar_network.getCommunityMemberThumb(member, community, is_owner)
    
    if total_members == 0:
        showing_howmany = '0 of 0 members'
    else:
        showing_howmany = str(page*config.community_members_per_page + 1) + '-' +  str(members.count()) + ' of ' + str(total_members)
    
    prev_btn = ''
    next_btn = ''
    if page != 0:
        prev_btn = '<td><a href="members.htm?page=' + str(page-1) + '">PREV</a></td>'
    if last_member_num < total_members:
        next_btn = '<td><a href="members.htm?page=' + str(page+1) + '">NEXT</a></td>'

    buttons = ''
    if prev_btn or next_btn:
        buttons = '<table class="button-box"><tr>' + prev_btn + next_btn + '</tr><table>'
    
    return siteaction.render_to_response(html_file,
                              { 'community': community,
                                'members_html': html,
                                'showing_howmany': showing_howmany,
                                'buttons': buttons,
                                'myself' : myself })