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
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
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
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