Example #1
0
def discussion_add_feedback(discussion, user, feedbabk_type = None, content = None, voice_recording = None):
    if feedbabk_type == None:
        return None, 'No feedback type'
    
    if feedbabk_type != Feedback.ADVICE and feedbabk_type != Feedback.COOPERATION and feedbabk_type != Feedback.INTUITION and feedbabk_type != Feedback.ENCOURAGE:
        return None,(  'Wrong feedback type ' + str(feedbabk_type))

    if False == discussion.can_user_access_discussion(user):
        return None, "user cannot access discussion"
    
#     if not discussion.is_active():
#         return None, "discussion is not active"
            
    if user == discussion.owner:
        return None, "discussion owner cannot post a feedback"
    
    if Feedback.objects.filter( discussion = discussion, feedbabk_type = feedbabk_type, content = content, user = user).count() != 0:
        return None, "feedback already exists"
    
    feedback = Feedback(discussion=discussion, user=user,
                        feedbabk_type=feedbabk_type, content=content,
                        voice_recording = voice_recording)
    
    feedback.full_clean()
    feedback.save()
    discussion.save() #verify that the entire discussion is considered updated
    
    
    success, error_string = start_discussion_following( discussion, user)
    
    if success == False:
        return None, error_string
    
    t = Template("""
    {{feedbabk.user.get_full_name|default:feedbabk.user.username}} פירסם/ה {{feedbabk.get_feedbabk_type_name}}:\n
    "{{feedbabk.content}} "\n
    """)

    trunkated_subject_and_detailes = t.render(Context({"feedbabk": feedback}))
                                                        
    discussion_email_updates(discussion,
                             trunkated_subject_and_detailes,
                             user,
                             trunkated_subject_and_detailes)           
     
        
    
    user_posted_a_feedback_in_another_other_user_s_discussion(user, feedback.get_absolute_url())
    
    return feedback, None
Example #2
0
def discussion_update( discussion, user, description, 
                       tags_string = None, 
                       location_desc = None, 
                       parent_url = None,
                       parent_url_text = None,
                       picture = None):
    
    if user != discussion.owner:
        return None, 'only owner can update discussion'
    
    if not discussion.is_active():
        return None, 'discussion is locked'

    discussion.description   = description
    discussion.location_desc = location_desc
    discussion.parent_url = parent_url
    discussion.parent_url_text = parent_url_text
    discussion.picture         = picture
    
    tags_list =  tags_string.split(',')
    for tag in tags_list:
        discussion.tags.add( tag)
        
    discussion.description_updated_at = timezone.now()
    discussion.save()#cause all previous fedbacks to be striked at

    for tag in discussion.tags.all():
        start_tag_following(user, tag)
        
    start_discussion_following( discussion, user)
    

    t = Template("""
    {{discussion.owner.get_full_name|default:discussion.owner.username}} עידכן/ה את המטרות של הפעילות והעזרה המבוקשת :\n
    "{{discussion.description}} "\n
    """)
    
    trunkated_subject_and_detailes = t.render(Context({"discussion": discussion}))
                                                        

    discussion_email_updates(discussion,
                             trunkated_subject_and_detailes,
                             user,
                             trunkated_subject_and_detailes)
    
    return discussion, None
Example #3
0
def discussion_add_decision(discussion, user, content = None):
    if content == None:
        return None, 'No content'

    if not discussion.is_active():
        return None, "discussion is not active"
            
    if user != discussion.owner:
        return None, "only discussion add a desicion"
    
    if Decision.objects.filter( parent = discussion, content = content).count() != 0:
        return None, "decision already exists"

    decision = Decision(parent=discussion, content=content)
  #  print vars(decision)
#     decision.full_clean()
    decision.save()
    discussion.save() #verify that the entire discussion is considered updated
        
   
    success, error_string = start_discussion_following( discussion, user)
    
    if success == False:
        return None, error_string

    t = Template("""
    {{decision.parent.owner.get_full_name|default:decision.parent.owner.username}} מבקש/ת שתצביע/י על :\n
    "{{decision.content}} "\nלהצבעה צריך להיכנס אל הפעילות המלאה...
    """)
    
    trunkated_subject_and_detailes = t.render(Context({"decision": decision}))
    
    discussion_email_updates(discussion,
                             trunkated_subject_and_detailes,
                             user,
                             trunkated_subject_and_detailes,
                             "#Decisions")
    
    user_post_a_decision_for_vote_regarding_his_own_discussion( user, decision.get_absolute_url())
    
    return decision, None
Example #4
0
def create_discussion( user               = None, 
                       title              = None, 
                       description        = None,                       
                       location_desc      = None,                       
                       tags_string        = None,
                       parent_url         = None,
                       parent_url_text    = None,
                       latitude           = 0.0 ,
                       longitude          = 0.0 ,
                       picture            = None,
                       movie_url          = None,
                       movie_url_url_text = None,
                       anyway_progress_status = None ,
                       anyway_discuss_id      = None 
                       ):
    if user is None:
        return None, 'no user provided'
    
    if user.is_authenticated() is False:
        return None, 'user not authenticated'

    if title is None:
        return None, 'Title not provided'

    if description is None:
        return None, 'description not provided'
    
    if len(description) > MAX_MESSAGE_INPUT_CHARS:
        return None, 'description len ' + str(len(description)) + '>' + str(MAX_MESSAGE_INPUT_CHARS)
        

    discussions_list = Discussion.objects.all().filter(owner=user,
                                                       title = title )
    
    if discussions_list.count() != 0:
        return None, 'user posted a discussion with the same title'

    new_discussion = Discussion(    owner           =  user,
                                    title           = title,
                                    description     = description,
                                    parent_url      = parent_url,
                                    parent_url_text = parent_url_text,
                                    latitude        = latitude,
                                    longitude       = longitude,
                                    picture            = picture           ,
                                    movie_url          = movie_url         ,
                                    movie_url_url_text = movie_url_url_text,
                                    anyway_progress_status = anyway_progress_status,
                                    anyway_discuss_id      = anyway_discuss_id
                                    )
    if location_desc:
        new_discussion.location_desc = location_desc
                
    new_discussion.clean()
    new_discussion.save()
    if tags_string:
        tags_list =  tags_string.split(',')
        for tag in tags_list:
            new_discussion.tags.add( tag)
            
                                
    new_discussion.full_clean()
    new_discussion.description_updated_at = timezone.now()
    new_discussion.save()

    user_started_a_new_discussion( new_discussion.owner)
    start_discussion_following(new_discussion, user)
    for tag in new_discussion.tags.all():
        start_tag_following( user, tag)
            
    t = Template("""
    {{discussion.owner.get_full_name|default:discussion.owner.username}} ביקש/ה את העזרה שלך ב :
    "{{discussion.title}} "\n
    """)
            
    trunkated_subject_and_detailes = t.render(Context({"discussion": new_discussion}))

    new_discussion_followers = []

    user_s_following = get_followers_list(new_discussion.owner)
    
#all the followers for the user and all the followers for a tag
     
    for user in User.objects.all():
        if new_discussion.can_user_access_discussion( user):
            if user in user_s_following:
                new_discussion_followers.append(user)
            else:
                to_append = False
                for tag_iter in user.userprofile.followed_discussions_tags.all():
                    if tag_iter.name in new_discussion.tags.names():
                        to_append = True
                if to_append:
                    new_discussion_followers.append(user)
    
          
    discussion_email_updates(new_discussion,
                             trunkated_subject_and_detailes,
                             new_discussion.owner,
                             trunkated_subject_and_detailes,
                             mailing_list = new_discussion_followers )
    
    return new_discussion, None