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