예제 #1
0
def auto_completion_search_members(context, input_suggest):
    """
    Render an auto completion to search users.

    Override ``account/ac_search_users.html`` if you want to change the
    design.
    """
    request = context['request']
    input_suggest = input_suggest

    data = []
    ao = set([])
    ao_member = get_allowed_objects(request.user, Community, 'member')
    ao = ao.union(set(ao_member))
    ao_manage = get_allowed_objects(request.user, Community, 'manage')
    ao = ao.union(set(ao_manage))

    communities = Community.objects.filter(id__in=ao).order_by('name')
    objects = set([])
    for com in communities:
        objects = objects.union(set(get_acl_by_object(com, 'member')))
        objects = objects.union(set(get_acl_by_object(com, 'manage')))
        data.append([com.name, ("g-%s" % str(com.id))])

    data.extend([("%s %s" % (x.last_name, x.first_name), ("u-%s" % str(x.id)))
                 for x in objects])
    members_data = simplejson.dumps(data)
    return locals()
예제 #2
0
def auto_completion_search_members(context, input_suggest):
    """
    Render an auto completion to search users.

    Override ``account/ac_search_users.html`` if you want to change the
    design.
    """
    request = context['request']
    input_suggest = input_suggest

    data = []
    ao = set([])
    ao_member = get_allowed_objects(request.user, Community, 'member')
    ao = ao.union(set(ao_member))
    ao_manage = get_allowed_objects(request.user, Community, 'manage')
    ao = ao.union(set(ao_manage))

    communities = Community.objects.filter(id__in=ao).order_by('name')
    objects = set([])
    for com in communities:
        objects = objects.union(set(get_acl_by_object(com, 'member')))
        objects = objects.union(set(get_acl_by_object(com, 'manage')))
        data.append([com.name, ("g-%s" % str(com.id))])

    data.extend([("%s %s" % (x.last_name, x.first_name), ("u-%s" % str(x.id)))
                for x in objects])
    members_data = simplejson.dumps(data)
    return locals()
예제 #3
0
파일: views.py 프로젝트: somair/zorna
def notify_users(request, story, categories, new_article=True):
    bnotify = request.POST.get('notify_users', 0)
    users_email = []
    for cat in categories:
        if cat.email_notification and (cat.email_notification == 1 or bnotify):
            acl_users = get_acl_by_object(cat, 'reader')
            if acl_users:
                users_email.extend([u.email for u in acl_users])

    users_email = list(set(users_email))
    if users_email:
        email = ZornaEmail()
        url = request.build_absolute_uri(reverse(
            'view_story', args=[categories[0].pk, story.pk, story.slug]))
        ec = {"story": story, 'url': url, 'new_article':
              new_article, 'user': request.user}
        body_text = render_to_string(
            'articles/email_notification_text.html', ec)
        body_html = render_to_string(
            'articles/email_notification_html.html', ec)
        if new_article:
            subject = _(u'A new article has been published')
        else:
            subject = _(u'An article has been updated')
        step = getattr(settings, "ZORNA_MAIL_MAXPERPACKET", 25)
        for n in range(0, len(users_email) / step + 1):
            email.append(subject, body_text, body_html, settings.DEFAULT_FROM_EMAIL, bcc=users_email[
                         n * step:(n + 1) * step])
        email.send()
예제 #4
0
파일: views.py 프로젝트: kamni/zorna
def notify_users(request, folder, files, upload=True):
    if folder.inherit_permissions:
        parents = folder.get_ancestors()
        for f in parents:
            if f.inherit_permissions is False:
                folder = f
                break
    users_list = get_acl_by_object(folder, 'reader')
    email = ZornaEmail()
    url = request.build_absolute_uri(reverse(
        'documents', args=[])) + '?dir=F%s' % folder.pk
    ec = {"folder": folder, "files": files, 'url':
          url, 'upload': upload, 'user': request.user}
    body_text = render_to_string('fileman/email_notification_text.html', ec)
    body_html = render_to_string('fileman/email_notification_html.html', ec)
    if upload:
        subject = _(u'A new file has been uploaded')
    else:
        subject = _(u'A file has been updated')
    step = getattr(settings, "ZORNA_MAIL_MAXPERPACKET", 25)
    users_email = [user.email for user in users_list]
    for n in range(0, len(users_email) / step + 1):
        email.append(subject, body_text, body_html, settings.DEFAULT_FROM_EMAIL, bcc=users_email[
                     n * step:(n + 1) * step])
    email.send()
예제 #5
0
def notify_users(request, folder, files, upload=True):
    if folder.inherit_permissions:
        parents = folder.get_ancestors()
        for f in parents:
            if f.inherit_permissions is False:
                folder = f
                break
    users_list = get_acl_by_object(folder, 'reader')
    email = ZornaEmail()
    url = request.build_absolute_uri(reverse(
        'documents', args=[])) + '?dir=F%s' % folder.pk
    ec = {"folder": folder, "files": files, 'url':
          url, 'upload': upload, 'user': request.user}
    body_text = render_to_string('fileman/email_notification_text.html', ec)
    body_html = render_to_string('fileman/email_notification_html.html', ec)
    if upload:
        subject = _(u'A new file has been uploaded')
    else:
        subject = _(u'A file has been updated')
    step = getattr(settings, "ZORNA_MAIL_MAXPERPACKET", 25)
    users_email = [user.email for user in users_list]
    for n in range(0, len(users_email) / step + 1):
        email.append(subject, body_text, body_html, settings.DEFAULT_FROM_EMAIL, bcc=users_email[
                     n * step:(n + 1) * step])
    email.send()
예제 #6
0
파일: api.py 프로젝트: somair/zorna
def get_community_managers(user, community):
    if not isinstance(community, Community):
        community = Community.objects.get(pk=community)
    check = get_acl_for_model(community)
    if check.manage_community(community, user):
        return get_acl_by_object(community, 'manage')
    else:
        return Community.objects.none()
예제 #7
0
파일: models.py 프로젝트: kamni/zorna
 def get_authorized_user(self, key_option):
     try:
         so = self.get(key=key_option)
         if so:
             return get_acl_by_object(so, "access")
         else:
             return []
     except Exception as e:
         return []
예제 #8
0
파일: models.py 프로젝트: somair/zorna
 def get_authorized_user(self, key_option):
     try:
         so = self.get(key=key_option)
         if so:
             return get_acl_by_object(so, 'access')
         else:
             return []
     except Exception as e:
         return []
예제 #9
0
파일: acl_tags.py 프로젝트: somair/zorna
 def render(self, context):
     context[self.var_name] = get_acl_by_object(self.obj.resolve(context),
                                                self.permission)
     return ''
예제 #10
0
파일: forms.py 프로젝트: somair/zorna
    def save(self, request):
        message = self.cleaned_data['message']
        send_to = self.cleaned_data['send_to']
        upload_to = []
        calendar_owners = []
        dest = []
        ao = get_allowed_objects(request.user, Community, ['manage', 'member'])
        if send_to:
            send_to = send_to.split(',')
            for item in send_to:
                item = item.split('-')
                if item[0] == 'u':  # user
                    user = User.objects.get(pk=item[1])
                    # if user recipient member of any current user communities
                    ao_member_user = get_allowed_objects(
                        user, Community, ['member', 'manage'])
                    inter = [k for k in ao if k in ao_member_user]
                    if len(inter):
                        dest.append(user)
                        calendar_owners.append(user)
                        upload_to.append(u"U%s" % user.pk)
                else:
                    community = Community.objects.get(pk=item[1])
                    if community.pk in ao:
                        dest.append(community)
                        calendar_owners.append(community)
                        upload_to.append(u"C%s" % community.pk)
            users_emails = []
            if len(dest):
                m = MessageCommunity(message=message)
                m.owner = m.modifier = request.user
                m.save()
                for k in dest:
                    if isinstance(k, User):
                        m.users.add(k)
                        users_emails.append(k.email)
                    else:
                        m.communities.add(k)
                        if k.email_notification:
                            users = list(chain(get_acl_by_object(
                                k, 'member'), get_acl_by_object(k, 'manage')))
                            users_emails.extend([u.email for u in users])
            else:
                return None

            files = request.FILES.getlist("attachments")
            if len(upload_to) and len(files):
                try:
                    path_library = get_upload_library()
                    path = os.path.join(get_upload_communities(), "%s" % m.pk)
                    if not os.path.isdir(path):
                        os.makedirs(path)
                    for f in request.FILES.getlist("attachments"):
                        s = os.path.splitext(f.name)
                        fname = slugify(s[0])
                        fext = s[1]
                        destination = open(u"%s/%s" % (
                            path, u"%s%s" % (fname, fext)), 'wb+')
                        for chunk in f.chunks():
                            destination.write(chunk)
                        destination.close()
                        for d in upload_to:
                            destpath = os.path.join(path_library, "%s" % d)
                            if not os.path.isdir(destpath):
                                os.makedirs(destpath)
                            try:
                                libfile = ZornaFile(
                                    owner=request.user, modifier=request.user)
                                libfile.save()
                                fsrc = u"%s/%s/%s,%s%s" % (
                                    path_library, d, str(libfile.pk), fname, fext)
                                shutil.copy2(u"%s/%s" % (
                                    path, u"%s%s" % (fname, fext)), fsrc)
                            except Exception as e:
                                print(e)
                except Exception as e:
                    pass
            # send email notification
            if len(users_emails):
                users_emails = list(set(users_emails))
                if users_emails:
                    email = ZornaEmail()
                    url = request.build_absolute_uri(reverse(
                        'communities_home_page', args=[])) + '?all_msg=message&message_id=%s' % m.pk
                    ec = {"message": m, 'url': url, 'user': request.user}
                    body_text = render_to_string(
                        'communities/email_notification_text.html', ec)
                    body_html = render_to_string(
                        'communities/email_notification_html.html', ec)
                    subject = _(
                        u'A new message has been posted in communities')
                    step = getattr(settings, "ZORNA_MAIL_MAXPERPACKET", 25)
                    for n in range(0, len(users_emails) / step + 1):
                        email.append(subject, body_text, body_html, settings.DEFAULT_FROM_EMAIL, bcc=users_emails[
                                     n * step:(n + 1) * step])
                    email.send()
            return m
        return None
예제 #11
0
파일: api.py 프로젝트: somair/zorna
def initialize_context(request):
    ret = {}
    ret['all_msg'] = request.REQUEST.get("all_msg", 'all')
    ret['community_id'] = request.REQUEST.get("community_id", 0)
    ret['search_string'] = request.REQUEST.get("search_string", '')
    ret['search_string'] = ret['search_string'].encode('utf8')
    ret['member_id'] = request.REQUEST.get("member_id", 0)
    ret['message_id'] = request.REQUEST.get("message_id", 0)
    ret['contenttype_id'] = request.REQUEST.get("contenttype_id", 0)
    ret['current_query_string'] = urllib.urlencode(ret)
    # Next lines must be after previous line
    ret['com_page'] = request.REQUEST.get("com_page", 0)
    ret['from_id'] = request.REQUEST.get("from_id", 0)
    if ret['from_id'] == '':
        ret['from_id'] = 0
    else:
        ret['from_id'] = int(ret['from_id'])

    ao = set([])

    ao_member = get_allowed_objects(request.user, Community, 'member')
    ao = ao.union(set(ao_member))
    ao_manage = get_allowed_objects(request.user, Community, 'manage')
    ao = ao.union(set(ao_manage))
    ret['communities'] = Community.objects.filter(id__in=ao).order_by('name')
    ret['user_manager'] = True if len(ao_manage) else False
    ccom = int(ret['community_id'])
    ret['current_community'] = None
    for com in ret['communities']:
        com.manager = True if com.pk in ao_manage else False
        com.member = True if com.pk in ao_member else False
        if ccom != 0 and ccom == com.pk:
            ret['current_community'] = com

    if int(ret['community_id']) != 0 and ret['current_community'] and ret['current_community'] in ret['communities']:
        communities = [ret['current_community']]
    else:
        communities = ret['communities']
        ret['community_id'] = 0

    data = []
    ret['members'] = set([])
    for com in communities:
        ret['members'] = ret['members'].union(
            set(get_acl_by_object(com, 'member')))
        ret['members'] = ret['members'].union(
            set(get_acl_by_object(com, 'manage')))
        data.append([com.name, "g-%s" % str(com.id)])

    data.extend([("%s %s" % (x.last_name, x.first_name), ("u-%s" % str(x.id)))
                for x in ret['members']])
    ret['members_count'] = len(ret['members'])

    if int(ret['community_id']):
        contributors = MessageCommunity.objects.values('owner').filter(
            Q(communities=int(ret['community_id'])) |
            Q(reply__communities=int(ret['community_id']))
        ).annotate(total=Count('owner')
                   )
    else:
        contributors = MessageCommunity.objects.values(
            'owner').annotate(total=Count('owner'))
    contributors = contributors.order_by('-total')[0:10]

    ret['users_avatars'] = {}
    for avatar in UserAvatar.objects.select_related().filter(user__pk__in=[u.pk for u in ret['members']] + [c['owner'] for c in contributors]):
        ret['users_avatars'][avatar.user_id] = avatar

    for m in ret['members']:
        if ret['users_avatars'].has_key(m.pk):
            m.avatar = ret['users_avatars'][m.pk]
        else:
            m.avatar = None
    for c in contributors:
        if ret['users_avatars'].has_key(c['owner']):
            c['avatar'] = ret['users_avatars'][c['owner']]
            c['user'] = ret['users_avatars'][c['owner']].user
        else:
            c['avatar'] = None
            c['user'] = User.objects.get(pk=c['owner'])

    ret['contributors'] = contributors
    ret['members_data'] = simplejson.dumps(data)

    if ret['current_community']:
        ret['community_title'] = ret['current_community'].name
    elif ret['all_msg'] == 'followed':
        ret['community_title'] = _(u"Followed posts")
    elif ret['all_msg'] == 'last':
        ret['community_title'] = _(u"Recent messages")
    elif ret['all_msg'] == 'tome':
        ret['community_title'] = _(u"Direct to me")
    elif ret['all_msg'] == 'contributor':
        member = User.objects.get(pk=ret['member_id'])
        ret['community_title'] = member.get_full_name()
    elif ret['all_msg'] == 'contenttype':
        ret['community_title'] = _(u"Content type")
    elif ret['all_msg'] == 'message':
        ret['community_title'] = _(u"Message")
    else:
        ret['community_title'] = _(u"All")

    if int(ret['from_id']) != 0:
        ret['msg_sender'] = User.objects.get(pk=int(ret['from_id']))
    return ret
예제 #12
0
파일: acl_tags.py 프로젝트: KuwaitNET/zorna
 def render(self, context):
     context[self.var_name] = get_acl_by_object(
         self.obj.resolve(context), self.permission)
     return ''