Beispiel #1
0
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)
Beispiel #2
0
 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)
         })
Beispiel #3
0
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}),
                    })
Beispiel #4
0
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)
Beispiel #6
0
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
Beispiel #7
0
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,
    })
Beispiel #8
0
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}),
            },
        )
Beispiel #9
0
 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 ''
Beispiel #10
0
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)
Beispiel #11
0
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,
                },
            )
Beispiel #12
0
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,
            },
        )
Beispiel #13
0
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
Beispiel #14
0
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)
Beispiel #16
0
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})
Beispiel #17
0
 def get_absolute_url(self):
     return reverse_url(
         "public:journal:article-detail",
         args=[
             self.issue.journal.code,
             self.issue.localidentifier,
             self.localidentifier
         ]
     )
Beispiel #18
0
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)
Beispiel #19
0
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)
Beispiel #20
0
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}),
                    }
                )
Beispiel #21
0
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
  })
Beispiel #22
0
 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''
Beispiel #23
0
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
Beispiel #24
0
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}),
            },
        )
Beispiel #25
0
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}),
            },
        )
Beispiel #26
0
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})
Beispiel #27
0
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)
Beispiel #28
0
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
  })
Beispiel #29
0
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)
Beispiel #30
0
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,
    })
Beispiel #31
0
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,
    })
Beispiel #32
0
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})
Beispiel #33
0
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,
            },
        )
Beispiel #34
0
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
  })
Beispiel #35
0
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,
                },
            )
Beispiel #36
0
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)
Beispiel #37
0
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)
Beispiel #38
0
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,
    })
Beispiel #39
0
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,
    })
Beispiel #40
0
def index(request):
  if not request.user.is_authenticated():
    return HttpResponseRedirect(reverse_url("login"))
Beispiel #41
0
 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])
Beispiel #42
0
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'))
Beispiel #44
0
 def get_absolute_url(self):
     return reverse_url(
         "public:journal:journal-detail",
         args=[self.code]
     )
Beispiel #45
0
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()
Beispiel #46
0
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)
Beispiel #47
0
 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']))
Beispiel #49
0
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"))
Beispiel #50
0
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()
Beispiel #51
0
 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,))
Beispiel #52
0
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}),
                    })
Beispiel #53
0
 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)
Beispiel #54
0
 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)
Beispiel #55
0
 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])
Beispiel #56
0
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()
Beispiel #57
0
def index(request):
  if not request.user.is_authenticated():
    return HttpResponseRedirect(reverse_url("login"))
Beispiel #58
0
def logout_view(request):
    auth_logout(request)
    url2 = reverse_url("index")
    return HttpResponseRedirect(url2)
Beispiel #59
0
 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])
Beispiel #60
0
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)