Example #1
0
File: api.py Project: somair/zorna
def get_message_attachments(message_id):
    ret = []
    try:
        path = os.path.join(get_upload_communities(), "%s" % message_id)
        files = os.listdir(path)
        for f in files:
            fullpath = os.path.join(path, f)
            if os.path.isfile(fullpath):
                ret.append(f)
    except Exception:
        pass
    return ret
Example #2
0
    def render(self, context):
        request = context['request']
        community = self.community.resolve(context)
        messages = get_all_messages(request, community.pk if community else 0)
        messages = messages.order_by('-time_updated')

        context[self.var_name] = []
        nbfiles = self.number
        for msg in messages:
            if nbfiles == 0:
                break
            path = "%s/%s" % (get_upload_communities(), msg.pk)
            try:
                files = []
                for f in os.listdir(path):
                    files.append(f)
                    nbfiles -= 1
                    if nbfiles == 0:
                        break
                context[self.var_name].append({'message': msg, 'files': files})
            except:
                pass
        return ''
Example #3
0
    def render(self, context):
        request = context['request']
        community = self.community.resolve(context)
        messages = get_all_messages(request, community.pk if community else 0)
        messages = messages.order_by('-time_updated')

        context[self.var_name] = []
        nbfiles = self.number
        for msg in messages:
            if nbfiles == 0:
                break
            path = "%s/%s" % (get_upload_communities(), msg.pk)
            try:
                files = []
                for f in os.listdir(path):
                    files.append(f)
                    nbfiles -= 1
                    if nbfiles == 0:
                        break
                context[self.var_name].append({'message': msg, 'files': files})
            except:
                pass
        return ''
Example #4
0
    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