def rawdata_publicdatapool_image_added(sender, instance, action, reverse, model, pk_set, **kwargs): if action == 'post_add' and len(pk_set) > 0: contributors = [i.user for i in instance.images.all()] users = [instance.creator] + contributors image = Image.objects.get(pk=list(pk_set)[0]) submitter = image.user users[:] = [x for x in users if x != submitter] push_notification( users, 'rawdata_posted_image_to_public_pool', { 'user_name': submitter.userprofile.get_display_name(), 'user_url': reverse_url('user_page', kwargs={'username': submitter.username}), 'pool_name': instance.name, 'pool_url': reverse_url('rawdata.publicdatapool_detail', kwargs={'pk': instance.pk}), }, ) add_story(submitter, verb='VERB_ADDED_IMAGE_TO_DATA_POOL', action_object=image, target=instance)
def notify_subscribers(): push_notification( list(instance.topic.subscribers.exclude(pk=instance.user.pk)), instance.user, 'new_forum_reply', { 'user': instance.user.userprofile.get_display_name(), 'user_url': settings.BASE_URL + reverse_url('user_page', kwargs={'username': instance.user}), 'post_url': build_notification_url( settings.BASE_URL + instance.get_absolute_url(), instance.user), 'topic_url': build_notification_url( settings.BASE_URL + instance.topic.get_absolute_url(), instance.user), 'topic_name': instance.topic.name, 'unsubscribe_url': build_notification_url( settings.BASE_URL + reverse_url('pybb:delete_subscription', args=[instance.topic.id]), instance.user) })
def toggleproperty_post_save(sender, instance, created, **kwargs): if hasattr(instance.content_object, "updated"): # This will trigger the auto_now fields in the content_object instance.content_object.save(keep_deleted=True) if created: if instance.property_type in ("like", "bookmark"): if instance.property_type == "like": verb = 'VERB_LIKED_IMAGE' elif instance.property_type == "bookmark": verb = 'VERB_BOOKMARKED_IMAGE' if instance.content_type == ContentType.objects.get_for_model( Image): image = instance.content_type.get_object_for_this_type( id=instance.object_id) if image.is_wip: return add_story(instance.user, verb=verb, action_object=instance.content_object) if instance.content_type == ContentType.objects.get_for_model( Image): push_notification( [instance.content_object.user], 'new_' + instance.property_type, { 'url': settings.BASE_URL + instance.content_object.get_absolute_url(), 'title': instance.content_object.title, 'user': instance.user.userprofile.get_display_name(), 'user_url': settings.BASE_URL + reverse_url( 'user_page', kwargs={'username': instance.user.username}), }) elif instance.property_type == "follow": user_ct = ContentType.objects.get_for_model(User) if instance.content_type == user_ct: followed_user = user_ct.get_object_for_this_type( pk=instance.object_id) push_notification( [followed_user], 'new_follower', { 'object': instance.user.userprofile.get_display_name(), 'object_url': settings.BASE_URL + reverse_url( 'user_page', kwargs={'username': instance.user.username}), })
def rawdata_privatesharedfolder_image_added(sender, instance, action, reverse, model, pk_set, **kwargs): if action == 'post_add' and len(pk_set) > 0: invitees = instance.users.all() users = [instance.creator] + list(invitees) submitter = Image.objects.get(pk = list(pk_set)[0]).user users[:] = [x for x in users if x != submitter] push_notification( users, 'rawdata_posted_image_to_private_folder', { 'user_name': submitter.username, 'user_url': reverse_url('user_page', kwargs = {'username': submitter.username}), 'folder_name': instance.name, 'folder_url': reverse_url('rawdata.privatesharedfolder_detail', kwargs = {'pk': instance.pk}), }, )
def post_message(request): form = TimelineForm(request.user, request.POST) if form.is_valid(): form.save() return HttpResponseRedirect(reverse_url('picoblog:main')) else: return logged_in_home(request, form)
def nested_comment_post_save(sender, instance, created, **kwargs): if created: mentions = MentionsService.get_mentions(instance.text) CommentNotificationsService(instance).send_notifications() if hasattr(instance.content_object, "updated"): # This will trigger the auto_now fields in the content_object # We do it only if created, because the content_object needs to # only be updated if the number of comments changes. instance.content_object.save(keep_deleted=True) else: mentions = cache.get( "user.%d.comment_pre_save_mentions" % instance.author.pk, []) for username in mentions: try: user = User.objects.get(username=username) push_notification( [user], 'new_comment_mention', { 'url': settings.BASE_URL + instance.get_absolute_url(), 'user': instance.author.userprofile.get_display_name(), 'user_url': settings.BASE_URL + reverse_url( 'user_page', kwargs={'username': instance.author}), }) except User.DoesNotExist: pass
def apply_overtime(request): if not request.user.is_authenticated(): raise PermissionDenied if request.method == "POST": form = ApplyOvertimeForm(request.POST) if form.is_valid(): print "->" * 100 start_time = form.cleaned_data["start_time"] end_time = form.cleaned_data["end_time"] reason = form.cleaned_data["reason"] #now = datetime.now() 1999.1.1 +08:00 now = timezone.now() # 1999.1.1 +00:00 delta = end_time - start_time print "delta", delta entry = OvertimeEntry( user=request.user, start_time=start_time, end_time=end_time, status=STATUS_WAIT, reason=reason, pub_date=now, ) entry.save() redirect_to = reverse_url("overtime_list") return HttpResponseRedirect(redirect_to) else: form = ApplyOvertimeForm() return render(request, 'attendance/apply_overtime.html', { "form": form, })
def rawdata_privatesharedfolder_image_added(sender, instance, action, reverse, model, pk_set, **kwargs): if action == 'post_add' and len(pk_set) > 0: invitees = instance.users.all() users = [instance.creator] + list(invitees) submitter = Image.objects.get(pk=list(pk_set)[0]).user users[:] = [x for x in users if x != submitter] push_notification( users, 'rawdata_posted_image_to_private_folder', { 'user_name': submitter.userprofile.get_display_name(), 'user_url': reverse_url('user_page', kwargs={'username': submitter.username}), 'folder_name': instance.name, 'folder_url': reverse_url('rawdata.privatesharedfolder_detail', kwargs={'pk': instance.pk}), }, )
def edit_link(self, item): if item.pk: u = reverse_url('admin:cnmb_item_change', args=(item.pk, )) return format_html(u'<a href="{}">Edit Description and Scores</a>', u) else: return ''
def group_post_save(sender, instance, created, **kwargs): if created and instance.creator is not None: instance.members.add(instance.creator) if instance.moderated: instance.moderators.add(instance.creator) if instance.public: followers = [ x.user for x in ToggleProperty.objects.toggleproperties_for_object( "follow", UserProfile.objects.get(user__pk=instance.creator.pk).user) ] push_notification( followers, 'new_public_group_created', { 'creator': instance.creator.userprofile.get_display_name(), 'group_name': instance.name, 'url': settings.BASE_URL + reverse_url('group_detail', args=(instance.pk, )), }) add_story(instance.creator, verb='VERB_CREATED_PUBLIC_GROUP', action_object=instance)
def forum_topic_pre_save(sender, instance, **kwargs): if not hasattr(instance.forum, 'group'): return try: topic = sender.objects.get(pk=instance.pk) except sender.DoesNotExist: pass else: if topic.on_moderation == True and instance.on_moderation == False: # This topic is being approved group = instance.forum.group push_notification( [x for x in group.members.all() if x != instance.user], 'new_topic_in_group', { 'user': instance.user.userprofile.get_display_name(), 'url': settings.BASE_URL + instance.get_absolute_url(), 'group_url': reverse_url('group_detail', kwargs={'pk': group.pk}), 'group_name': group.name, 'topic_title': instance.name, }, )
def forum_topic_post_save(sender, instance, created, **kwargs): if created and hasattr(instance.forum, 'group'): group = instance.forum.group if instance.on_moderation: recipients = group.moderators.all() else: recipients = group.members.all() recipients = [x for x in recipients if x != instance.user] push_notification( recipients, 'new_topic_in_group', { 'user': instance.user.userprofile.get_display_name(), 'url': settings.BASE_URL + instance.get_absolute_url(), 'group_url': settings.BASE_URL + reverse_url('group_detail', kwargs={'pk': group.pk}), 'group_name': group.name, 'topic_title': instance.name, }, )
def forum_post_post_save(sender, instance, created, **kwargs): if created: mentions = MentionsService.get_mentions(instance.body) if hasattr(instance.topic.forum, 'group'): instance.topic.forum.group.save() # trigger date_updated update else: mentions = cache.get( "user.%d.forum_post_pre_save_mentions" % instance.user.pk, []) for username in mentions: try: user = User.objects.get(username=username) push_notification( [user], 'new_forum_post_mention', { 'url': settings.BASE_URL + instance.get_absolute_url(), 'user': instance.user.userprofile.get_display_name(), 'user_url': settings.BASE_URL + reverse_url( 'user_page', kwargs={'username': instance.user}), 'post': instance.topic.name, }) except User.DoesNotExist: pass
def apply_overtime(request): if not request.user.is_authenticated(): raise PermissionDenied if request.method == "POST": form = ApplyOvertimeForm(request.POST) if form.is_valid(): print "->" * 100 start_time = form.cleaned_data["start_time"] end_time = form.cleaned_data["end_time"] reason = form.cleaned_data["reason"] #now = datetime.now() 1999.1.1 +08:00 now = timezone.now() # 1999.1.1 +00:00 delta = end_time - start_time print "delta", delta entry = OvertimeEntry( user = request.user, start_time = start_time, end_time = end_time, status=STATUS_WAIT, reason=reason, pub_date=now, ) entry.save() redirect_to = reverse_url("overtime_list") return HttpResponseRedirect(redirect_to) else: form = ApplyOvertimeForm() return render(request, 'attendance/apply_overtime.html', { "form": form, })
def should_not_show_tweets_of_non_followed_tweeters(self): user = User.objects.create(username="******") Tweeter.objects.create(user=user) Timeline.objects.create(user=user, message='first post') response = self.client.get(reverse_url('picoblog:main')) for message in response.context['timeline']: self.assertNotEqual('first post', message.message)
def index(request): if not request.user.is_authenticated(): return HttpResponseRedirect(reverse_url("login")) overtime_count = 1 return TemplateResponse(request, "index.html", {"overtime_count": overtime_count})
def get_absolute_url(self): return reverse_url( "public:journal:article-detail", args=[ self.issue.journal.code, self.issue.localidentifier, self.localidentifier ] )
def repo_detail(request, repo_name, username=None): try: repo = git.get_repo(repo_name, username) except KeyError: raise Http404 head_ref = repo.refs.read_ref('HEAD') if head_ref is None: head_ref = "ref: refs/heads/master" target_url = None if head_ref.startswith("ref: "): if head_ref[5:16] == "refs/heads/": branch_name = head_ref[16:] target_url = reverse_url( "repo_branch_detail", kwargs=url_kwargs( repo_name=repo_name, username=username, branch_name=branch_name, ), ) else: target_url = reverse_url( "repo_commit_detail", kwargs=url_kwargs( repo_name=repo_name, username=username, commit_id=head_ref, ), ) if target_url is None: return TemplateResponse( request, "gitaxis/emptyrepo.html", context={ "username": username, "repo_name": repo_name, "repo": repo, }, ) return redirect(target_url)
def rawdata_publicdatapool_image_added(sender, instance, action, reverse, model, pk_set, **kwargs): if action == 'post_add' and len(pk_set) > 0: contributors = [i.user for i in instance.images.all()] users = [instance.creator] + contributors submitter = Image.objects.get(pk = list(pk_set)[0]).user users[:] = [x for x in users if x != submitter] push_notification( users, 'rawdata_posted_image_to_public_pool', { 'user_name': submitter.username, 'user_url': reverse_url('user_page', kwargs = {'username': submitter.username}), 'pool_name': instance.name, 'pool_url': reverse_url('rawdata.publicdatapool_detail', kwargs = {'pk': instance.pk}), }, ) verb = "added a new processed image to public data pool" act.send(instance.creator, verb = verb, target = instance)
def toggleproperty_post_save(sender, instance, created, **kwargs): if hasattr(instance.content_object, "updated"): # This will trigger the auto_now fields in the content_object instance.content_object.save() if created: if instance.property_type in ("like", "bookmark"): if instance.property_type == "like": verb = 'VERB_LIKED_IMAGE' elif instance.property_type == "bookmark": verb = 'VERB_BOOKMARKED_IMAGE' if instance.content_type == ContentType.objects.get_for_model(Image): image = instance.content_type.get_object_for_this_type(id = instance.object_id) if image.is_wip: return add_story(instance.user, verb = verb, action_object = instance.content_object) if instance.content_type == ContentType.objects.get_for_model(Image): push_notification( [instance.content_object.user], 'new_' + instance.property_type, { 'url': settings.BASE_URL + instance.content_object.get_absolute_url(), 'title': instance.content_object.title, 'user': instance.user.userprofile.get_display_name(), 'user_url': settings.BASE_URL + reverse_url( 'user_page', kwargs = {'username': instance.user.username}), }) elif instance.property_type == "follow": user_ct = ContentType.objects.get_for_model(User) if instance.content_type == user_ct: followed_user = user_ct.get_object_for_this_type(pk = instance.object_id) push_notification( [followed_user], 'new_follower', { 'object': instance.user.userprofile.get_display_name(), 'object_url': settings.BASE_URL + reverse_url( 'user_page', kwargs = {'username': instance.user.username}), } )
def index(request): if not request.user.is_authenticated(): return HttpResponseRedirect(reverse_url("login")) overtime_count = 1 return TemplateResponse(request, "index.html", { "overtime_count":overtime_count })
def items_link(self, section): if section.pk: n = section.item_set.count() #u = reverse_url('admin:cnmb_item_changelist') + \ # '?' + urlencode((('section__id__exact', section.pk),)) u = reverse_url('admin:cnmb_section_change', args=(section.pk, )) return format_html(u'<a href="{}">{} item{}</a>', u, n, ('' if n == 1 else 's')) else: return u''
def image_post_save(sender, instance, created, **kwargs): # type: (object, Image, bool, object) -> None if created: instance.user.userprofile.premium_counter += 1 instance.user.userprofile.save(keep_deleted=True) if not instance.user.userprofile.exclude_from_competitions: instance.designated_iotd_submitters.add( *UserService.get_users_in_group_sample( 'iotd_submitters', settings. IOTD_DESIGNATED_SUBMITTERS_PERCENTAGE, instance.user)) instance.designated_iotd_reviewers.add( *UserService.get_users_in_group_sample( 'iotd_reviewers', settings. IOTD_DESIGNATED_REVIEWERS_PERCENTAGE, instance.user)) if not instance.is_wip: if not instance.skip_notifications: push_notification_for_new_image.apply_async(args=( instance.user.pk, instance.pk, )) if instance.moderator_decision == 1: add_story(instance.user, verb='VERB_UPLOADED_IMAGE', action_object=instance) if Image.all_objects.filter(user=instance.user).count() == 1: push_notification( [instance.user], None, 'congratulations_for_your_first_image', { 'BASE_URL': settings.BASE_URL, 'PREMIUM_MAX_IMAGES_FREE': settings.PREMIUM_MAX_IMAGES_FREE, 'url': reverse_url('image_detail', args=(instance.get_id(), )) }) if not instance.uploader_in_progress: groups = instance.user.joined_group_set.filter(autosubmission=True) for group in groups: if instance.is_wip: group.images.remove(instance) else: group.images.add(instance) if instance.user.userprofile.updated < datetime.datetime.now( ) - datetime.timedelta(minutes=5): instance.user.save() try: instance.user.userprofile.save(keep_deleted=True) except UserProfile.DoesNotExist: pass
def rawdata_privatesharedfolder_user_added(sender, instance, action, reverse, model, pk_set, **kwargs): if action == 'post_add' and len(pk_set) > 0: user = User.objects.get(pk = list(pk_set)[0]) push_notification( [user], 'rawdata_invited_to_private_folder', { 'folder_name': instance.name, 'folder_url': reverse_url('rawdata.privatesharedfolder_detail', kwargs = {'pk': instance.pk}), }, )
def rawdata_privatesharedfolder_user_added(sender, instance, action, reverse, model, pk_set, **kwargs): if action == 'post_add' and len(pk_set) > 0: user = UserProfile.objects.get(user__pk=list(pk_set)[0]).user push_notification( [user], 'rawdata_invited_to_private_folder', { 'folder_name': instance.name, 'folder_url': reverse_url('rawdata.privatesharedfolder_detail', kwargs={'pk': instance.pk}), }, )
def index(request): if not request.user.is_authenticated(): return HttpResponseRedirect(reverse_url("login")) overtime_qs = get_user_overtime_queryset(request.user.id) #select count(*) from table where ....... overtime_count = overtime_qs.count() return TemplateResponse(request, "index.html", {"overtime_count": overtime_count})
def rawdata_publicdatapool_data_added(sender, instance, action, reverse, model, pk_set, **kwargs): if action == 'post_add' and len(pk_set) > 0: contributors = [i.user for i in instance.images.all()] users = [instance.creator] + contributors submitter = RawImage.objects.get(pk = list(pk_set)[0]).user users[:] = [x for x in users if x != submitter] push_notification( users, 'rawdata_posted_to_pool', { 'user_name': submitter.userprofile.get_display_name(), 'user_url': reverse_url('user_page', kwargs = {'username': submitter.username}), 'pool_name': instance.name, 'pool_url': reverse_url('rawdata.publicdatapool_detail', kwargs = {'pk': instance.pk}), }, ) add_story(instance.creator, verb = 'VERB_ADDED_DATA_TO_DATA_POOL', action_object = instance.images.all()[0], target = instance)
def index(request): if not request.user.is_authenticated(): return HttpResponseRedirect(reverse_url("login")) overtime_qs = get_user_overtime_queryset(request.user.id) #select count(*) from table where ....... overtime_count = overtime_qs.count() return TemplateResponse(request, "index.html", { "overtime_count":overtime_count })
def change_password_view(request): success = False if request.method == 'POST': form = PasswordChangeForm(user=request.user, data=request.POST) if form.is_valid(): form.save() update_session_auth_hash(request, form.user) success = True return redirect(reverse_url(settings_view)) else: form = PasswordChangeForm(user=request.user) ctx = {"set_password_form": form} return TemplateResponse(request, 'change_password.html', ctx)
def login_view(request): print "=>" * 100 print "login_view" if request.method == "POST": form = LoginForm(request.POST) if form.is_valid(): print "is_valid!!!" user = form.user auth_login(request, user) url2 = reverse_url("index") return HttpResponseRedirect(url2) else: form = LoginForm() return TemplateResponse(request, "login.html", { "login_form": form, })
def index(request): if not request.user.is_authenticated(): return HttpResponseRedirect(reverse_url("login")) audit_wait = 10 ''' audit_wait = leader_audit_list.objects audit_wait = audit_wait.count(status=STATUS_WAIT) try: overtime_count = int(request.GET["p"]) except: pass audit_view = list(leader_audit_list.objects.count(status_id=request.status).all()) audit_count = [s.audit_count for s in audit_view] print "audit_count", audit_count ''' return TemplateResponse(request, "index.html", {"audit_wait": audit_wait})
def forum_topic_post_save(sender, instance, created, **kwargs): if created and hasattr(instance.forum, 'group'): group = instance.forum.group if instance.on_moderation: recipients = group.moderators.all() else: recipients = group.members.all() recipients = [x for x in recipients if x != instance.user] push_notification( recipients, 'new_topic_in_group', { 'user': instance.user.userprofile.get_display_name(), 'url': settings.BASE_URL + instance.get_absolute_url(), 'group_url': settings.BASE_URL + reverse_url('group_detail', kwargs = {'pk': group.pk}), 'group_name': group.name, 'topic_title': instance.name, }, )
def index(request): if not request.user.is_authenticated(): return HttpResponseRedirect(reverse_url("login")) audit_wait = 10 ''' audit_wait = leader_audit_list.objects audit_wait = audit_wait.count(status=STATUS_WAIT) try: overtime_count = int(request.GET["p"]) except: pass audit_view = list(leader_audit_list.objects.count(status_id=request.status).all()) audit_count = [s.audit_count for s in audit_view] print "audit_count", audit_count ''' return TemplateResponse(request, "index.html", { "audit_wait":audit_wait })
def forum_topic_pre_save(sender, instance, **kwargs): if not hasattr(instance.forum, 'group'): return try: topic = sender.objects.get(pk = instance.pk) except sender.DoesNotExist: pass else: if topic.on_moderation == True and instance.on_moderation == False: # This topic is being approved group = instance.forum.group push_notification( [x for x in group.members.all() if x != instance.user], 'new_topic_in_group', { 'user': instance.user.userprofile.get_display_name(), 'url': settings.BASE_URL + instance.get_absolute_url(), 'group_url': reverse_url('group_detail', kwargs = {'pk': group.pk}), 'group_name': group.name, 'topic_title': instance.name, }, )
def group_post_save(sender, instance, created, **kwargs): if created and instance.creator is not None: instance.members.add(instance.creator) if instance.moderated: instance.moderators.add(instance.creator) if instance.public: followers = [ x.user for x in ToggleProperty.objects.toggleproperties_for_object( "follow", UserProfile.objects.get(user__pk = instance.creator.pk).user) ] push_notification(followers, 'new_public_group_created', { 'creator': instance.creator.userprofile.get_display_name(), 'group_name': instance.name, 'url': settings.BASE_URL + reverse_url('group_detail', args = (instance.pk,)), }) add_story( instance.creator, verb = 'VERB_CREATED_PUBLIC_GROUP', action_object = instance)
def forum_topic_post_save(sender, instance, created, **kwargs): if created and hasattr(instance.forum, 'group'): group = instance.forum.group if instance.on_moderation: recipients = group.moderators.all() else: recipients = group.members.all() recipients = [x for x in recipients if x != instance.user] push_notification( recipients, instance.user, 'new_topic_in_group', { 'user': instance.user.userprofile.get_display_name(), 'url': build_notification_url( settings.BASE_URL + instance.get_absolute_url(), instance.user), 'group_url': build_notification_url( settings.BASE_URL + reverse_url('group_detail', kwargs={'pk': group.pk}), instance.user), 'group_name': group.name, 'topic_title': instance.name, }, ) cache_key = make_template_fragment_key( 'home_page_latest_from_forums', (instance.user.pk, instance.user.userprofile.language)) cache.delete(cache_key)
def apply_takeleave(request): if not request.user.is_authenticated(): raise PermissionDenied if request.method == "POST": form = ApplyTakeleaveForm(request.POST) if form.is_valid(): print "->" * 100 start_time = form.cleaned_data["start_time"] end_time = form.cleaned_data["end_time"] reason = form.cleaned_data["reason"] department_id = form.cleaned_data["department"] now = timezone.now() delta = end_time - start_time print "delta", delta entry = TakeleaveEntry( department_id = department_id, user = request.user, start_time = start_time, end_time = end_time, status = STATUS_WAIT, reason = reason, pub_date = now, ) entry.save() redirect_to = reverse_url("takeleave_list") return HttpResponseRedirect(redirect_to) else: form = ApplyTakeleaveForm() return render(request, 'attendance/apply_takeleave.html', { "form": form, })
def apply_takeleave(request): if not request.user.is_authenticated(): raise PermissionDenied if request.method == "POST": form = ApplyTakeleaveForm(request.POST) if form.is_valid(): print "->" * 100 start_time = form.cleaned_data["start_time"] end_time = form.cleaned_data["end_time"] reason = form.cleaned_data["reason"] department_id = form.cleaned_data["department"] now = timezone.now() delta = end_time - start_time print "delta", delta entry = TakeleaveEntry( department_id=department_id, user=request.user, start_time=start_time, end_time=end_time, status=STATUS_WAIT, reason=reason, pub_date=now, ) entry.save() redirect_to = reverse_url("takeleave_list") return HttpResponseRedirect(redirect_to) else: form = ApplyTakeleaveForm() return render(request, 'attendance/apply_takeleave.html', { "form": form, })
def index(request): if not request.user.is_authenticated(): return HttpResponseRedirect(reverse_url("login"))
def get_absolute_url(self): url = '/'.join(self._get_all_slugs()) if self.is_public: return reverse_url('public_page_detail', args=[url]) else: return reverse_url('draft_page_detail', args=[url])
def logout_view(request): auth_logout(request) url2 = reverse_url("index") return HttpResponseRedirect(url2)
def follow(request): form = FollowTweetersForm(request.POST, instance=request.user.get_profile()) if form.is_valid(): form.save() return HttpResponseRedirect(reverse_url('picoblog:main'))
def get_absolute_url(self): return reverse_url( "public:journal:journal-detail", args=[self.code] )
def group_members_changed(sender, instance, **kwargs): action = kwargs['action'] pk_set = kwargs['pk_set'] group_sync_map = { 'IOTD Submitters': ['iotd_submitters', 'content_moderators', 'iotd_staff'], 'IOTD Reviewers': ['iotd_reviewers', 'content_moderators', 'iotd_staff'], 'IOTD Judges': ['iotd_judges', 'content_moderators', 'iotd_staff'], } if instance.name in group_sync_map.keys(): for django_group in group_sync_map[instance.name]: DjangoGroup.objects.get_or_create(name=django_group) django_groups = DjangoGroup.objects.filter( name__in=group_sync_map[instance.name]) try: iotd_staff_group = Group.objects.get(name='IOTD Staff') except Group.DoesNotExist: iotd_staff_group = None if action == 'post_add': users = [ profile.user for profile in UserProfile.objects.filter(user__pk__in=pk_set) ] instance.save() # trigger date_updated update if instance.public: for pk in pk_set: user = UserProfile.objects.get(user__pk=pk).user if user != instance.owner: followers = [ x.user for x in ToggleProperty.objects. toggleproperties_for_object("follow", user) ] push_notification( followers, 'user_joined_public_group', { 'user': user.userprofile.get_display_name(), 'group_name': instance.name, 'url': settings.BASE_URL + reverse_url('group_detail', args=(instance.pk, )), }) add_story(user, verb='VERB_JOINED_GROUP', action_object=instance) if instance.autosubmission: images = Image.objects_including_wip.filter(user__pk__in=pk_set) for image in images: instance.images.add(image) # Sync IOTD AstroBin groups with django groups if instance.name in group_sync_map.keys(): for django_group in django_groups: django_group.user_set.add(*list(users)) if iotd_staff_group: for user in users: iotd_staff_group.members.add(user) elif action == 'post_remove': users = [ profile.user for profile in UserProfile.objects.filter(user__pk__in=pk_set) ] images = Image.objects_including_wip.filter(user__pk__in=pk_set) for image in images: instance.images.remove(image) if instance.forum and not instance.public: topics = Topic.objects.filter(forum=instance.forum) for topic in topics: topic.subscribers.remove(*User.objects.filter( pk__in=kwargs['pk_set'])) # Sync IOTD AstroBin groups with django groups if instance.name in group_sync_map.keys(): all_members = [] all_members_chain = chain([ x.members.all() for x in Group.objects \ .filter(name__in=group_sync_map.keys()) \ .exclude(name=instance.name) ]) for chain_item in all_members_chain: all_members += chain_item for user in [x for x in users if x not in all_members]: for django_group in django_groups: django_group.user_set.remove(user) if iotd_staff_group: iotd_staff_group.members.remove(user) elif action == 'pre_clear': # Sync IOTD AstroBin groups with django groups users = instance.members.all() if instance.name in group_sync_map.keys(): all_members = [] all_members_chain = chain([ x.members.all() for x in Group.objects \ .filter(name__in=group_sync_map.keys()) \ .exclude(name=instance.name) ]) for chain_item in all_members_chain: all_members += chain_item for user in [x for x in users if x not in all_members]: for django_group in django_groups: django_group.user_set.remove(user) if iotd_staff_group: iotd_staff_group.members.remove(user) elif action == 'post_clear': instance.images.clear()
def nested_comment_post_save(sender, instance, created, **kwargs): if created: model_class = instance.content_type.model_class() obj = instance.content_type.get_object_for_this_type(id=instance.object_id) url = settings.BASE_URL + instance.get_absolute_url() if model_class == Image: image = instance.content_type.get_object_for_this_type(id=instance.object_id) if image.is_wip: return if instance.author != obj.user: push_notification( [obj.user], 'new_comment', { 'url': url, 'user': instance.author.userprofile.get_display_name(), 'user_url': settings.BASE_URL + reverse_url( 'user_page', kwargs={'username': instance.author.username}), } ) if instance.parent and instance.parent.author != instance.author: push_notification( [instance.parent.author], 'new_comment_reply', { 'url': url, 'user': instance.author.userprofile.get_display_name(), 'user_url': settings.BASE_URL + reverse_url( 'user_page', kwargs={'username': instance.author.username}), } ) add_story(instance.author, verb='VERB_COMMENTED_IMAGE', action_object=instance, target=obj) elif model_class == Gear: if not instance.parent: gear, gear_type = get_correct_gear(obj.id) user_attr_lookup = { 'Telescope': 'telescopes', 'Camera': 'cameras', 'Mount': 'mounts', 'FocalReducer': 'focal_reducers', 'Software': 'software', 'Filter': 'filters', 'Accessory': 'accessories', } recipients = [x.user for x in UserProfile.objects.filter( **{user_attr_lookup[gear_type]: gear})] notification = 'new_gear_discussion' else: notification = 'new_comment_reply' recipients = [instance.parent.author] push_notification( recipients, notification, { 'url': url, 'user': instance.author.userprofile.get_display_name(), 'user_url': settings.BASE_URL + reverse_url( 'user_page', kwargs={'username': instance.author.username}), }) add_story(instance.author, verb='VERB_COMMENTED_GEAR', action_object=instance, target=gear) if hasattr(instance.content_object, "updated"): # This will trigger the auto_now fields in the content_object # We do it only if created, because the content_object needs to # only be updated if the number of comments changes. instance.content_object.save(keep_deleted=True)
def _edit_url(self, obj): opts = obj._meta app_label = opts.app_label name = opts.module_name url_name = 'admin:%s_%s_change' % (app_label, name) return reverse_url(url_name, args=(obj.pk, ))
def should_allow_user_to_follow_other_users(self): response = self.client.post(reverse_url('picoblog:follow'), {'followed_tweeters':[2]}, follow=True) self.assertEqual([self.other_users[0]], list(response.context['followed_tweeters']))
def edit_profile_from_social(request): #TODO this function is holy f*****g big #Refactoring needed, break into smaller more debuggable #functions """ Updates the User's Profile directly with the extra_data from social_auth """ usr = request.user user_profile = usr.profile updated_fields = [] load_from = request.POST.get("load_from", False) if load_from: #### Update from stored extra_data in social profile # Fetch, clean & update from social auth extra data social_user = False extra_data = False ### Update SocialProfiles first (irrespective of load_from) s_p = user_profile.social_profiles save = False for provider in {"facebook", "twitter", "linkedin"}: try: s_usr = usr.social_auth.filter(provider=provider)[0] except IndexError: continue x_dat = s_usr.extra_data if "public_profile_url" in x_dat and x_dat["public_profile_url"]: setattr(s_p, "profile_url_"+provider, x_dat["public_profile_url"]) save = True if "profile_picture_url" in x_dat and x_dat["profile_picture_url"]: setattr(s_p, "profile_pic_url_"+provider, x_dat["profile_picture_url"]) save = True s_p.save() ### Clean the extra_data according to provider # TODO # we need to store the key:value pairs for the social auth providers # Hard coding it is this code is stupidity # We can go like # ## for provider in auth_provider # ## for k,v in provider # where the k will be the detail key from provider # and v will be our key for storing that particular data if load_from == "facebook": social_user = usr.social_auth.filter(provider="facebook")[0] extra_data = social_user.extra_data if "location" in extra_data and extra_data["location"]: extra_data["location"] = extra_data["location"]["name"] extra_data["education_details"] = list() if "educations" in extra_data and extra_data["educations"]: for edu in extra_data["educations"]: dat = {"institution": edu["school"]["name"], "location": "", "degree": "", "branch": "", "from_year": None, "to_year": None} if "location" in edu and edu["location"]: dat["location"] = edu["location"]["name"] if "degree" in edu and edu["degree"]: dat["degree"] = edu["degree"]["name"] if "concentration" in edu and edu["concentration"]: dat["branch"] = edu["concentration"][0]["name"] if "year" in edu and edu["year"]: dat["to_year"] = int(edu["year"]["name"]) extra_data["education_details"].append(dat) extra_data["employment_details"] = list() if "organisations" in extra_data and extra_data["organisations"]: for emp in extra_data["organisations"]: dat = {"organization": emp["employer"]["name"], "location": "", "position": "", "from_date": None, "to_date": None} if "location" in emp and emp["location"]: dat["location"] = emp["location"]["name"] if "position" in emp and emp["position"]: dat["position"] = emp["position"]["name"] if "start_date" in emp and emp["start_date"]: dat["from_date"] = emp["start_date"] if "end_date" in emp and emp["end_date"]: dat["to_year"] = emp["end_date"] extra_data["employment_details"].append(dat) elif load_from == "twitter": social_user = usr.social_auth.filter(provider="twitter")[0] elif load_from == "linkedin": social_user = usr.social_auth.filter(provider="linkedin")[0] extra_data = social_user.extra_data dob = extra_data["date_of_birth"] if dob: extra_data["date_of_birth"] = "{0}-{1}-{2}".format(dob["year"],dob["month"],dob["day"]) if "location" in extra_data and extra_data["location"]: extra_data["location"] = extra_data["location"]["name"] extra_data["education_details"] = list() if "educations" in extra_data and extra_data["educations"]: for edu in extra_data["educations"]["values"]: dat = {"institution": edu["schoolName"], "location": "", "degree": "", "branch": "", "from_year": None, "to_year": None} if "location" in edu and edu["location"]: dat["location"] = edu["location"]["name"] if "degree" in edu and edu["degree"]: dat["degree"] = edu["degree"] if "fieldOfStudy" in edu and edu["fieldOfStudy"]: dat["branch"] = edu["fieldOfStudy"] if "startDate" in edu and edu["startDate"] and "year" in edu["startDate"]: dat["from_year"] = int(edu["startDate"]["year"]) if "endDate" in edu and edu["endDate"] and "year" in edu["endDate"]: dat["to_year"] = int(edu["endDate"]["year"]) extra_data["education_details"].append(dat) extra_data["employment_details"] = list() # Prepend previous employment data to current data if "past_organisations" in extra_data and extra_data["past_organisations"]: if "organisations" in extra_data and extra_data["organisations"]: extra_data["organisations"] = extra_data["past_organisations"] + extra_data["organisations"] else: extra_data["organisations"] = extra_data["past_organisations"] if "organisations" in extra_data and extra_data["organisations"]: for emp in extra_data["organisations"]: dat = {"organization": emp["company"]["name"], "location": "", "position": "", "from_date": None, "to_date": None} if "title" in emp and emp["title"]: dat["position"] = emp["title"] if "startDate" in emp and emp["startDate"] and "year" in emp["startDate"]: dat["from_date"] = int(emp["startDate"]["year"]) if "endDate" in emp and emp["endDate"] and "year" in emp["endDate"]: dat["to_year"] = int(emp["endDate"]["year"]) extra_data["employment_details"].append(dat) elif load_from == "google-oauth2": social_user = usr.social_auth.filter(provider="google-oauth2")[0] ### Check if any data is different than what is stored (directly update) if not extra_data: extra_data = social_user.extra_data ## User data save = False if "first_name" in extra_data and extra_data["first_name"] and usr.first_name != extra_data["first_name"]: usr.first_name = extra_data["first_name"] save = True updated_fields.append("first_name") if "last_name" in extra_data and extra_data["last_name"] and usr.last_name != extra_data["last_name"]: usr.last_name = extra_data["last_name"] save = True updated_fields.append("last_name") # No need to hit the db every time. if save: usr.save() ## UserProfile data save = False if "date_of_birth" in extra_data and extra_data["date_of_birth"]: if user_profile.date_of_birth != dateparser.parse(extra_data["date_of_birth"]).date(): user_profile.date_of_birth = dateparser.parse(extra_data["date_of_birth"]).date().isoformat() save = True updated_fields.append("date_of_birth") if "location" in extra_data and extra_data["location"] and user_profile.location != extra_data["location"]: user_profile.location = extra_data["location"] save = True updated_fields.append("location") if "about" in extra_data and extra_data["about"] and user_profile.short_bio != extra_data["about"]: user_profile.short_bio = extra_data["about"] save = True updated_fields.append("short_bio") if "gender" in extra_data and extra_data["gender"]: gender = extra_data["gender"].lower() gender_types = {"male":"M", "female":"F", "m":"M", "f":"F"} if gender in gender_types: gender = gender_types[gender] else: gender = "O" if user_profile.gender != gender: user_profile.gender = gender save = True updated_fields.append("gender") if save: user_profile.save() ## Email Address data if "email_address" in extra_data and extra_data["email_address"]: e = user_profile.emailaddress_set.all()[0] if e.email_id != extra_data["email_address"]: e.email_id = extra_data["email_address"] e.save() updated_fields.append("email_id") ## Education Details data if "education_details" in extra_data and extra_data["education_details"]: deficit = len(extra_data["education_details"]) if deficit > 0: # Remove all prev data for ed in user_profile.educationdetails_set.all(): ed.delete() # Create more objects to fill up deficit for i in range(deficit): UPM.EducationDetails.objects.create(parent=user_profile) updated_fields.append("education_details") edu = user_profile.educationdetails_set.all() # Directly overwrite every edu detail for i,xdu in enumerate(extra_data["education_details"]): cur_edu = edu[i] for field in xdu: setattr(cur_edu, field, xdu[field]) cur_edu.save() ## Employment Details data if "employment_details" in extra_data and extra_data["employment_details"]: deficit = len(extra_data["employment_details"]) if deficit > 0: # Remove all prev data for em in user_profile.employmentdetails_set.all(): em.delete() # Create more objects to fill up deficit for i in range(deficit): UPM.EmploymentDetails.objects.create(parent=user_profile) updated_fields.append("employment_details") emp = user_profile.employmentdetails_set.all() # Directly overwrite every emp detail for i,xmp in enumerate(extra_data["employment_details"]): cur_emp = emp[i] for field in xmp: setattr(cur_emp, field, xmp[field]) cur_emp.save() if updated_fields: msg = "Successfully updated [{0}] fields.".format(", ".join(updated_fields)) else: msg = "Nothing to update." messages.success(request, msg) return HttpResponseRedirect(reverse_url("user:edit_profile"))
def group_members_changed(sender, instance, **kwargs): action = kwargs['action'] pk_set = kwargs['pk_set'] group_sync_map = { 'IOTD Submitters': ['iotd_submitters', 'content_moderators', 'iotd_staff'], 'IOTD Reviewers': ['iotd_reviewers', 'content_moderators', 'iotd_staff'], 'IOTD Judges': ['iotd_judges', 'content_moderators', 'iotd_staff'], } if instance.name in group_sync_map.keys(): for django_group in group_sync_map[instance.name]: DjangoGroup.objects.get_or_create(name = django_group) django_groups = DjangoGroup.objects.filter(name__in = group_sync_map[instance.name]) try: iotd_staff_group = Group.objects.get(name = 'IOTD Staff') except Group.DoesNotExist: iotd_staff_group = None if action == 'post_add': users = [profile.user for profile in UserProfile.objects.filter(user__pk__in = pk_set)] instance.save() # trigger date_updated update if instance.public: for pk in pk_set: user = UserProfile.objects.get(user__pk = pk).user if user != instance.owner: followers = [ x.user for x in ToggleProperty.objects.toggleproperties_for_object("follow", user) ] push_notification(followers, 'user_joined_public_group', { 'user': user.userprofile.get_display_name(), 'group_name': instance.name, 'url': settings.BASE_URL + reverse_url('group_detail', args = (instance.pk,)), }) add_story( user, verb = 'VERB_JOINED_GROUP', action_object = instance) if instance.autosubmission: images = Image.objects_including_wip.filter(user__pk__in = pk_set) for image in images: instance.images.add(image) # Sync IOTD AstroBin groups with django groups if instance.name in group_sync_map.keys(): for django_group in django_groups: django_group.user_set.add(*list(users)) if iotd_staff_group: for user in users: iotd_staff_group.members.add(user) elif action == 'post_remove': users = [profile.user for profile in UserProfile.objects.filter(user__pk__in = pk_set)] images = Image.objects_including_wip.filter(user__pk__in = pk_set) for image in images: instance.images.remove(image) if instance.forum and not instance.public: topics = Topic.objects.filter(forum = instance.forum) for topic in topics: topic.subscribers.remove(*User.objects.filter(pk__in = kwargs['pk_set'])) # Sync IOTD AstroBin groups with django groups if instance.name in group_sync_map.keys(): all_members = [] all_members_chain = chain([ x.members.all() for x in Group.objects\ .filter(name__in = group_sync_map.keys())\ .exclude(name = instance.name) ]) for chain_item in all_members_chain: all_members += chain_item for user in [x for x in users if x not in all_members]: for django_group in django_groups: django_group.user_set.remove(user) if iotd_staff_group: iotd_staff_group.members.remove(user) elif action == 'pre_clear': # Sync IOTD AstroBin groups with django groups users = instance.members.all() if instance.name in group_sync_map.keys(): all_members = [] all_members_chain = chain([ x.members.all() for x in Group.objects\ .filter(name__in = group_sync_map.keys())\ .exclude(name = instance.name) ]) for chain_item in all_members_chain: all_members += chain_item for user in [x for x in users if x not in all_members]: for django_group in django_groups: django_group.user_set.remove(user) if iotd_staff_group: iotd_staff_group.members.remove(user) elif action == 'post_clear': instance.images.clear()
def _edit_url(self, obj): opts = obj._meta app_label = opts.app_label name = opts.module_name url_name = 'admin:%s_%s_change' % (app_label, name) return reverse_url(url_name, args=(obj.pk,))
def toggleproperty_post_save(sender, instance, created, **kwargs): if hasattr(instance.content_object, "updated"): # This will trigger the auto_now fields in the content_object kwargs = {} if issubclass(type(instance.content_object), SafeDeleteModel): kwargs['keep_deleted'] = True instance.content_object.save(**kwargs) if created: verb = None if instance.property_type in ("like", "bookmark"): if instance.content_type == ContentType.objects.get_for_model( Image): image = instance.content_type.get_object_for_this_type( id=instance.object_id) if image.is_wip: return if instance.property_type == "like": verb = 'VERB_LIKED_IMAGE' elif instance.property_type == "bookmark": verb = 'VERB_BOOKMARKED_IMAGE' else: return push_notification( [instance.content_object.user], 'new_' + instance.property_type, { 'url': settings.BASE_URL + instance.content_object.get_absolute_url(), 'title': instance.content_object.title, 'user': instance.user.userprofile.get_display_name(), 'user_url': settings.BASE_URL + reverse_url( 'user_page', kwargs={'username': instance.user.username}), }) elif instance.content_type == ContentType.objects.get_for_model( NestedComment): push_notification( [instance.content_object.author], 'new_comment_like', { 'url': settings.BASE_URL + instance.content_object.get_absolute_url(), 'user': instance.user.userprofile.get_display_name(), 'user_url': settings.BASE_URL + reverse_url( 'user_page', kwargs={'username': instance.user.username}), 'comment': instance.content_object.text }) # Trigger index update on the user, which will recalculate the Contribution Index. instance.content_object.author.save() elif instance.content_type == ContentType.objects.get_for_model( Post): push_notification( [instance.content_object.user], 'new_forum_post_like', { 'url': settings.BASE_URL + instance.content_object.get_absolute_url(), 'user': instance.user.userprofile.get_display_name(), 'user_url': settings.BASE_URL + reverse_url( 'user_page', kwargs={'username': instance.user.username}), 'post': instance.content_object.topic.name }) # Trigger index update on the user, which will recalculate the Contribution Index. instance.content_object.user.save() if verb is not None: add_story(instance.user, verb=verb, action_object=instance.content_object) elif instance.property_type == "follow": user_ct = ContentType.objects.get_for_model(User) if instance.content_type == user_ct: followed_user = user_ct.get_object_for_this_type( pk=instance.object_id) push_notification( [followed_user], 'new_follower', { 'object': instance.user.userprofile.get_display_name(), 'object_url': settings.BASE_URL + reverse_url( 'user_page', kwargs={'username': instance.user.username}), })
def section_link(self, item): if not item.pk: return u'' u = reverse_url('admin:cnmb_section_change', args=(item.section.pk, )) return format_html(u'<a href="{}">{}</a>', u, item.section)
def definition_link(self, section): if not section.pk: return u'' u = reverse_url('admin:cnmb_definition_change', args=(section.definition.pk, )) return format_html(u'<a href="{}">{}</a>', u, section.definition)
def nested_comment_post_save(sender, instance, created, **kwargs): if created: model_class = instance.content_type.model_class() obj = instance.content_type.get_object_for_this_type(id = instance.object_id) url = settings.BASE_URL + instance.get_absolute_url() if model_class == Image: image = instance.content_type.get_object_for_this_type(id = instance.object_id) if image.is_wip: return if instance.author != obj.user: push_notification( [obj.user], 'new_comment', { 'url': url, 'user': instance.author.userprofile.get_display_name(), 'user_url': settings.BASE_URL + reverse_url( 'user_page', kwargs = {'username': instance.author.username}), } ) if instance.parent and instance.parent.author != instance.author: push_notification( [instance.parent.author], 'new_comment_reply', { 'url': url, 'user': instance.author.userprofile.get_display_name(), 'user_url': settings.BASE_URL + reverse_url( 'user_page', kwargs = {'username': instance.author.username}), } ) add_story(instance.author, verb = 'VERB_COMMENTED_IMAGE', action_object = instance, target = obj) elif model_class == Gear: if not instance.parent: gear, gear_type = get_correct_gear(obj.id) user_attr_lookup = { 'Telescope': 'telescopes', 'Camera': 'cameras', 'Mount': 'mounts', 'FocalReducer': 'focal_reducers', 'Software': 'software', 'Filter': 'filters', 'Accessory': 'accessories', } recipients = [x.user for x in UserProfile.objects.filter( **{user_attr_lookup[gear_type]: gear})] notification = 'new_gear_discussion' else: notification = 'new_comment_reply' recipients = [instance.parent.author] push_notification( recipients, notification, { 'url': url, 'user': instance.author.userprofile.get_display_name(), 'user_url': settings.BASE_URL + reverse_url( 'user_page', kwargs = {'username': instance.author.username}), }) add_story(instance.author, verb = 'VERB_COMMENTED_GEAR', action_object = instance, target = gear) if hasattr(instance.content_object, "updated"): # This will trigger the auto_now fields in the content_object # We do it only if created, because the content_object needs to # only be updated if the number of comments changes. instance.content_object.save()
def get_absolute_url(self): if self.is_public: return reverse_url('press-article-published', args=[self.slug]) return reverse_url('press-article-draft', args=[self.slug])
def forum_post_post_save(sender, instance, created, **kwargs): def notify_subscribers(): push_notification( list(instance.topic.subscribers.exclude(pk=instance.user.pk)), instance.user, 'new_forum_reply', { 'user': instance.user.userprofile.get_display_name(), 'user_url': settings.BASE_URL + reverse_url('user_page', kwargs={'username': instance.user}), 'post_url': build_notification_url( settings.BASE_URL + instance.get_absolute_url(), instance.user), 'topic_url': build_notification_url( settings.BASE_URL + instance.topic.get_absolute_url(), instance.user), 'topic_name': instance.topic.name, 'unsubscribe_url': build_notification_url( settings.BASE_URL + reverse_url('pybb:delete_subscription', args=[instance.topic.id]), instance.user) }) if created: mentions = MentionsService.get_mentions(instance.body) if hasattr(instance.topic.forum, 'group'): instance.topic.forum.group.save() # trigger date_updated update if get_pybb_profile(instance.user).autosubscribe and \ perms.may_subscribe_topic(instance.user, instance.topic): instance.topic.subscribers.add(instance.user) if not instance.on_moderation: notify_subscribers() else: NotificationsService.email_superusers( 'New forum post needs moderation', '%s%s' % (settings.BASE_URL, instance.get_absolute_url())) else: mentions = cache.get( "user.%d.forum_post_pre_save_mentions" % instance.user.pk, []) if cache.get("user.%d.forum_post_pre_save_approved" % instance.user.pk): notify_subscribers() for username in mentions: try: user = User.objects.get(username=username) push_notification( [user], instance.user, 'new_forum_post_mention', { 'url': build_notification_url( settings.BASE_URL + instance.get_absolute_url(), instance.user), 'user': instance.user.userprofile.get_display_name(), 'user_url': settings.BASE_URL + reverse_url( 'user_page', kwargs={'username': instance.user}), 'post': instance.topic.name, }) except User.DoesNotExist: pass cache_key = make_template_fragment_key( 'home_page_latest_from_forums', (instance.user.pk, instance.user.userprofile.language)) cache.delete(cache_key)