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()
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()
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()
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()
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 []
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 []
def render(self, context): context[self.var_name] = get_acl_by_object(self.obj.resolve(context), self.permission) 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
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
def render(self, context): context[self.var_name] = get_acl_by_object( self.obj.resolve(context), self.permission) return ''