mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-09 10:50:24 +00:00
Modify repo share.
* Email unregistered user when sharing repo. * Add email to contacts when share repo/file and add group user. * Remove org repo share link.
This commit is contained in:
@@ -48,10 +48,10 @@ urlpatterns = patterns('',
|
|||||||
{ 'template': 'registration/registration_closed.html' },
|
{ 'template': 'registration/registration_closed.html' },
|
||||||
name='registration_disallowed'),
|
name='registration_disallowed'),
|
||||||
|
|
||||||
url(r'^business/register/$',
|
# url(r'^business/register/$',
|
||||||
register,
|
# register,
|
||||||
org_reg_dict,
|
# org_reg_dict,
|
||||||
name='registration_register'),
|
# name='registration_register'),
|
||||||
|
|
||||||
(r'', include('registration.auth_urls')),
|
(r'', include('registration.auth_urls')),
|
||||||
)
|
)
|
||||||
|
@@ -0,0 +1,4 @@
|
|||||||
|
from signals import *
|
||||||
|
from handlers import *
|
||||||
|
|
||||||
|
mail_sended.connect(mail_sended_cb, sender=None)
|
||||||
|
18
contacts/handlers.py
Normal file
18
contacts/handlers.py
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
from signals import mail_sended
|
||||||
|
|
||||||
|
from models import Contact
|
||||||
|
def mail_sended_cb(sender, **kwargs):
|
||||||
|
"""
|
||||||
|
Callback function to add email to contacts.
|
||||||
|
"""
|
||||||
|
|
||||||
|
user = kwargs['user']
|
||||||
|
email = kwargs['email']
|
||||||
|
|
||||||
|
try:
|
||||||
|
Contact.objects.get(user_email=user, contact_email=email)
|
||||||
|
# Already in contacts list, pass.
|
||||||
|
except Contact.DoesNotExist:
|
||||||
|
# Add new contact
|
||||||
|
c = Contact(user_email=user, contact_email=email)
|
||||||
|
c.save()
|
@@ -8,8 +8,9 @@ class Contact(models.Model):
|
|||||||
|
|
||||||
user_email = models.CharField(max_length=255)
|
user_email = models.CharField(max_length=255)
|
||||||
contact_email = models.CharField(max_length=255)
|
contact_email = models.CharField(max_length=255)
|
||||||
contact_name = models.CharField(max_length=255, blank=True, null=True)
|
contact_name = models.CharField(max_length=255, blank=True, null=True, \
|
||||||
note = models.CharField(max_length=255, blank=True, null=True)
|
default='')
|
||||||
|
note = models.CharField(max_length=255, blank=True, null=True, default='')
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
unique_together = ("user_email", "contact_email")
|
unique_together = ("user_email", "contact_email")
|
||||||
|
3
contacts/signals.py
Normal file
3
contacts/signals.py
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
import django.dispatch
|
||||||
|
|
||||||
|
mail_sended = django.dispatch.Signal(providing_args=["user", "email"])
|
@@ -14,9 +14,11 @@ from models import GroupMessage, MessageReply
|
|||||||
from forms import MessageForm, MessageReplyForm
|
from forms import MessageForm, MessageReplyForm
|
||||||
from signals import grpmsg_added, grpmsg_reply_added
|
from signals import grpmsg_added, grpmsg_reply_added
|
||||||
from seahub.contacts.models import Contact
|
from seahub.contacts.models import Contact
|
||||||
|
from seahub.contacts.signals import mail_sended
|
||||||
from seahub.notifications.models import UserNotification
|
from seahub.notifications.models import UserNotification
|
||||||
from seahub.profile.models import Profile
|
from seahub.profile.models import Profile
|
||||||
from seahub.utils import render_error, render_permission_error, validate_group_name
|
from seahub.utils import render_error, render_permission_error, \
|
||||||
|
validate_group_name, emails2list
|
||||||
from seahub.views import validate_emailuser
|
from seahub.views import validate_emailuser
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@@ -337,21 +339,14 @@ def group_members(request, group_id):
|
|||||||
Add group members.
|
Add group members.
|
||||||
"""
|
"""
|
||||||
member_name_str = request.POST.get('user_name', '')
|
member_name_str = request.POST.get('user_name', '')
|
||||||
# Handle the diffent separator
|
|
||||||
member_name_str = member_name_str.replace('\n',',')
|
|
||||||
member_name_str = member_name_str.replace('\r',',')
|
|
||||||
member_name_list = member_name_str.split(',')
|
|
||||||
|
|
||||||
# Remove same member name
|
member_list = emails2list(member_name_str)
|
||||||
member_name_dict = {}
|
|
||||||
for member_name in member_name_list:
|
|
||||||
member_name = member_name.strip(' ')
|
|
||||||
if not member_name:
|
|
||||||
continue
|
|
||||||
member_name_dict[member_name] = member_name
|
|
||||||
|
|
||||||
if request.user.org:
|
if request.user.org:
|
||||||
for member_name in member_name_dict.keys():
|
for member_name in member_list:
|
||||||
|
# Add email to contacts
|
||||||
|
mail_sended.send(sender=None, user=request.user.username,
|
||||||
|
email=member_name)
|
||||||
if not ccnet_threaded_rpc.org_user_exists(request.user.org.org_id,
|
if not ccnet_threaded_rpc.org_user_exists(request.user.org.org_id,
|
||||||
member_name):
|
member_name):
|
||||||
err_msg = u'当前企业不存在 %s 用户' % member_name
|
err_msg = u'当前企业不存在 %s 用户' % member_name
|
||||||
@@ -364,7 +359,11 @@ def group_members(request, group_id):
|
|||||||
except SearpcError, e:
|
except SearpcError, e:
|
||||||
return render_error(request, e.msg)
|
return render_error(request, e.msg)
|
||||||
else:
|
else:
|
||||||
for member_name in member_name_dict.keys():
|
for member_name in member_list:
|
||||||
|
# Add email to contacts
|
||||||
|
mail_sended.send(sender=None, user=request.user.username,
|
||||||
|
email=member_name)
|
||||||
|
|
||||||
if not validate_emailuser(member_name):
|
if not validate_emailuser(member_name):
|
||||||
err_msg = u'用户 %s 不存在' % member_name
|
err_msg = u'用户 %s 不存在' % member_name
|
||||||
return render_error(request, err_msg)
|
return render_error(request, err_msg)
|
||||||
|
@@ -50,7 +50,7 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
<td>
|
<td>
|
||||||
<img src="{{ MEDIA_URL }}img/sync-20.png" data="{{ repo.props.id }}" class="download-btn vh" title="同步到本地" alt="同步" />
|
<img src="{{ MEDIA_URL }}img/sync-20.png" data="{{ repo.props.id }}" class="download-btn vh" title="同步到本地" alt="同步" />
|
||||||
<img src="{{ MEDIA_URL }}img/share-20.png" data="{{ repo.props.id }}" class="repo-share-btn vh" title="共享" alt="共享" />
|
<!-- <img src="{{ MEDIA_URL }}img/share-20.png" data="{{ repo.props.id }}" class="repo-share-btn vh" title="共享" alt="共享" /> -->
|
||||||
<img src="{{ MEDIA_URL }}img/delete-20.png" data="{{ SITE_ROOT }}repo/remove/{{ repo.props.id }}/?next={{ request.path }}" class="repo-delete-btn vh" title="删除" alt="删除" />
|
<img src="{{ MEDIA_URL }}img/delete-20.png" data="{{ SITE_ROOT }}repo/remove/{{ repo.props.id }}/?next={{ request.path }}" class="repo-delete-btn vh" title="删除" alt="删除" />
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
11
share/templates/repo/repo_share_mail.html
Normal file
11
share/templates/repo/repo_share_mail.html
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
{% autoescape off %}
|
||||||
|
亲爱的 {{ to_email }}:
|
||||||
|
|
||||||
|
{{ user }} 在SeaCloud上共享了一个同步目录给你。注册帐号后请点击以下链接查看:
|
||||||
|
|
||||||
|
{{ protocol }}://{{ domain }}{% url myhome %}
|
||||||
|
|
||||||
|
感谢使用我们的网站!
|
||||||
|
|
||||||
|
Seafile团队
|
||||||
|
{% endautoescape %}
|
@@ -32,34 +32,6 @@
|
|||||||
<p>暂无</p>
|
<p>暂无</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<h3>我管理的共享链接</h3>
|
|
||||||
{% if out_links %}
|
|
||||||
<table class="link-list">
|
|
||||||
<tr>
|
|
||||||
<th width="25%">目录名</th>
|
|
||||||
<th width="35%">共享给</th>
|
|
||||||
<th width="20%">有效期</th>
|
|
||||||
<th width="20%">操作</th>
|
|
||||||
</tr>
|
|
||||||
{% for link in out_links %}
|
|
||||||
<tr>
|
|
||||||
<td><a href="{{ SITE_ROOT }}repo/{{ link.repo_id }}/">{{ link.repo_name }}</a></td>
|
|
||||||
<td>{{ link.anonymous_email }}</td>
|
|
||||||
{% if link.remain_time %}
|
|
||||||
<td>{{ link.remain_time|translate_remain_time }}</td>
|
|
||||||
{% else %}
|
|
||||||
<td>已过期</td>
|
|
||||||
{% endif %}
|
|
||||||
<td><a href="#" class="op view-link" data="{{ link.token }}">查看链接</a>
|
|
||||||
<a class="op" href="{{ SITE_ROOT }}share/remove/{{ link.token }}/">删除</a></td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
</table>
|
|
||||||
{% else %}
|
|
||||||
<p>暂无</p>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
<h3>我管理的文件外链</h3>
|
<h3>我管理的文件外链</h3>
|
||||||
{% if fileshares %}
|
{% if fileshares %}
|
||||||
<table class="sharelink-list">
|
<table class="sharelink-list">
|
||||||
@@ -84,7 +56,7 @@
|
|||||||
<p>暂无</p>
|
<p>暂无</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<div id="view-link" name="view-link" class="hide">
|
<div id="view-link" name="view-link" class="hide">
|
||||||
<span class="view-link-alert" style="float:left; margin-left: 120px; "></span>
|
<span class="view-link-alert" style="float:left; "></span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
@@ -104,15 +76,6 @@ $("table tr:gt(0)").hover(
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
$(".view-link").click(function() {
|
|
||||||
|
|
||||||
var t = $(this).attr('data');
|
|
||||||
var l = '{{ protocol }}://' + '{{ domain }}{{ SITE_ROOT }}share/' + t + '/';
|
|
||||||
$('.view-link-alert').html("共享链接为:<p>" + l + "</p>");
|
|
||||||
$("#view-link").modal({appendTo: "#main", containerCss:{padding:18}});
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
|
|
||||||
$(".view-file-link").click(function() {
|
$(".view-file-link").click(function() {
|
||||||
|
|
||||||
var t = $(this).attr('data');
|
var t = $(this).attr('data');
|
||||||
|
@@ -3,7 +3,7 @@ from django.conf.urls.defaults import *
|
|||||||
from views import *
|
from views import *
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
url(r'^add/$', share_repo),
|
url(r'^add/$', share_repo, name='share_repo'),
|
||||||
url('^remove/(?P<token>.+)/$', remove_anonymous_share, name='remove_anonymous_share'),
|
url('^remove/(?P<token>.+)/$', remove_anonymous_share, name='remove_anonymous_share'),
|
||||||
url('^(?P<token>.+)/$', anonymous_share_confirm, name='anonymous_share_confirm'),
|
url('^(?P<token>.+)/$', anonymous_share_confirm, name='anonymous_share_confirm'),
|
||||||
)
|
)
|
||||||
|
@@ -10,16 +10,17 @@ from auth.decorators import login_required
|
|||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.contrib.sites.models import Site, RequestSite
|
from django.contrib.sites.models import Site, RequestSite
|
||||||
from pysearpc import SearpcError
|
from pysearpc import SearpcError
|
||||||
from seaserv import seafserv_threaded_rpc, get_repo, ccnet_rpc, ccnet_threaded_rpc
|
from seaserv import seafserv_threaded_rpc, get_repo, ccnet_rpc, \
|
||||||
|
ccnet_threaded_rpc
|
||||||
|
|
||||||
from forms import RepoShareForm
|
from forms import RepoShareForm
|
||||||
from models import AnonymousShare
|
from models import AnonymousShare
|
||||||
#from seahub.contacts.models import Contact
|
|
||||||
from seahub.share.models import FileShare
|
|
||||||
from seahub.views import validate_owner, validate_emailuser
|
|
||||||
from seahub.utils import render_permission_error
|
|
||||||
from settings import ANONYMOUS_SHARE_COOKIE_TIMEOUT
|
from settings import ANONYMOUS_SHARE_COOKIE_TIMEOUT
|
||||||
from tokens import anon_share_token_generator
|
from tokens import anon_share_token_generator
|
||||||
|
from seahub.contacts.signals import mail_sended
|
||||||
|
from seahub.share.models import FileShare
|
||||||
|
from seahub.views import validate_owner, validate_emailuser
|
||||||
|
from seahub.utils import render_permission_error, emails2list
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def share_repo(request):
|
def share_repo(request):
|
||||||
@@ -42,21 +43,12 @@ def share_repo(request):
|
|||||||
if not validate_owner(request, repo_id):
|
if not validate_owner(request, repo_id):
|
||||||
return render_permission_error(request, u'只有目录拥有者有权共享目录')
|
return render_permission_error(request, u'只有目录拥有者有权共享目录')
|
||||||
|
|
||||||
# Handle the diffent separator
|
to_email_list = emails2list(email_or_group)
|
||||||
to_email_str = email_or_group.replace(';',',')
|
|
||||||
to_email_str = to_email_str.replace('\n',',')
|
|
||||||
to_email_str = to_email_str.replace('\r',',')
|
|
||||||
to_email_list = to_email_str.split(',')
|
|
||||||
|
|
||||||
for to_email in to_email_list:
|
for to_email in to_email_list:
|
||||||
to_email = to_email.strip(' ')
|
|
||||||
if not to_email:
|
|
||||||
continue
|
|
||||||
|
|
||||||
# if to_email is user name, the format is: 'example@mail.com';
|
# if to_email is user name, the format is: 'example@mail.com';
|
||||||
# if to_email is group, the format is 'group_name <creator@mail.com>'
|
# if to_email is group, the format is 'group_name <creator@mail.com>'
|
||||||
if (to_email.split(' ')[0].find('@') == -1):
|
if (to_email.split(' ')[0].find('@') == -1):
|
||||||
# share repo to group
|
''' Share repo to group '''
|
||||||
# TODO: if we know group id, then we can simplly call group_share_repo
|
# TODO: if we know group id, then we can simplly call group_share_repo
|
||||||
if len(to_email.split(' ')) < 2:
|
if len(to_email.split(' ')) < 2:
|
||||||
messages.add_message(request, messages.ERROR, to_email)
|
messages.add_message(request, messages.ERROR, to_email)
|
||||||
@@ -81,34 +73,54 @@ def share_repo(request):
|
|||||||
if not find:
|
if not find:
|
||||||
messages.add_message(request, messages.ERROR, group_name)
|
messages.add_message(request, messages.ERROR, group_name)
|
||||||
else:
|
else:
|
||||||
if validate_emailuser(to_email):
|
''' Share repo to user '''
|
||||||
# share repo to registered user
|
# Add email to contacts.
|
||||||
|
mail_sended.send(sender=None, user=request.user.username,
|
||||||
|
email=to_email)
|
||||||
|
|
||||||
|
# Record share info to db.
|
||||||
try:
|
try:
|
||||||
seafserv_threaded_rpc.add_share(repo_id, from_email,
|
seafserv_threaded_rpc.add_share(repo_id, from_email, to_email,
|
||||||
to_email, 'rw')
|
'rw')
|
||||||
messages.add_message(request, messages.INFO, to_email)
|
|
||||||
except SearpcError, e:
|
except SearpcError, e:
|
||||||
messages.add_message(request, messages.ERROR, to_email)
|
messages.add_message(request, messages.ERROR, to_email)
|
||||||
else:
|
continue
|
||||||
# share repo to anonymous user
|
|
||||||
kwargs = {'repo_id': repo_id,
|
# Send mail if user has not registered.
|
||||||
'repo_owner': from_email,
|
if not validate_emailuser(to_email):
|
||||||
'anon_email': to_email
|
use_https = request.is_secure()
|
||||||
|
site_name = domain = RequestSite(request).domain
|
||||||
|
|
||||||
|
t = loader.get_template('repo/repo_share_mail.html')
|
||||||
|
c = {
|
||||||
|
'user': request.user.username,
|
||||||
|
'to_email': to_email,
|
||||||
|
'domain': domain,
|
||||||
|
'site_name': site_name,
|
||||||
|
'protocol': use_https and 'https' or 'http',
|
||||||
}
|
}
|
||||||
anonymous_share(request, **kwargs)
|
try:
|
||||||
|
send_mail(u'您在SeaCloud上收到一个同步目录',
|
||||||
|
t.render(Context(c)), None,
|
||||||
|
[to_email], fail_silently=False)
|
||||||
|
except:
|
||||||
|
messages.add_message(request, messages.ERROR, to_email)
|
||||||
|
continue
|
||||||
|
messages.add_message(request, messages.INFO, to_email)
|
||||||
|
|
||||||
return HttpResponseRedirect(reverse('myhome'))
|
return HttpResponseRedirect(reverse('myhome'))
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def share_admin(request):
|
def share_admin(request):
|
||||||
"""
|
"""
|
||||||
List repos I share to others, include groups and emails. And also list
|
List repos I share to others, include groups and users. And also list
|
||||||
file shared links I generated.
|
file shared links I generated.
|
||||||
"""
|
"""
|
||||||
username = request.user.username
|
username = request.user.username
|
||||||
|
|
||||||
# repos that are share to user
|
# repos that are share to user
|
||||||
out_repos = seafserv_threaded_rpc.list_share_repos(username, 'from_email', -1, -1)
|
out_repos = seafserv_threaded_rpc.list_share_repos(username, 'from_email',
|
||||||
|
-1, -1)
|
||||||
|
|
||||||
# repos that are share to groups
|
# repos that are share to groups
|
||||||
group_repos = seafserv_threaded_rpc.get_group_my_share_repos(request.user.username)
|
group_repos = seafserv_threaded_rpc.get_group_my_share_repos(request.user.username)
|
||||||
@@ -129,11 +141,11 @@ def share_admin(request):
|
|||||||
out_repos.append(repo)
|
out_repos.append(repo)
|
||||||
|
|
||||||
# Repo anonymous share links
|
# Repo anonymous share links
|
||||||
out_links = AnonymousShare.objects.filter(repo_owner=request.user.username)
|
# out_links = AnonymousShare.objects.filter(repo_owner=request.user.username)
|
||||||
for link in out_links:
|
# for link in out_links:
|
||||||
repo = get_repo(link.repo_id)
|
# repo = get_repo(link.repo_id)
|
||||||
link.repo_name = repo.name
|
# link.repo_name = repo.name
|
||||||
link.remain_time = anon_share_token_generator.get_remain_time(link.token)
|
# link.remain_time = anon_share_token_generator.get_remain_time(link.token)
|
||||||
|
|
||||||
# File shared links
|
# File shared links
|
||||||
fileshares = FileShare.objects.filter(username=request.user.username)
|
fileshares = FileShare.objects.filter(username=request.user.username)
|
||||||
@@ -143,7 +155,7 @@ def share_admin(request):
|
|||||||
|
|
||||||
return render_to_response('repo/share_admin.html', {
|
return render_to_response('repo/share_admin.html', {
|
||||||
"out_repos": out_repos,
|
"out_repos": out_repos,
|
||||||
"out_links": out_links,
|
# "out_links": out_links,
|
||||||
"fileshares": fileshares,
|
"fileshares": fileshares,
|
||||||
"protocol": request.is_secure() and 'https' or 'http',
|
"protocol": request.is_secure() and 'https' or 'http',
|
||||||
"domain": RequestSite(request).domain,
|
"domain": RequestSite(request).domain,
|
||||||
|
@@ -18,8 +18,7 @@ $(function() {
|
|||||||
//check before post
|
//check before post
|
||||||
$('#share-submit-btn').click(function() {
|
$('#share-submit-btn').click(function() {
|
||||||
if (!$.trim($('#email_or_group').attr('value'))) {
|
if (!$.trim($('#email_or_group').attr('value'))) {
|
||||||
$('#repo-share-form .error').removeClass('hide');
|
apply_form_error('repo-share-form', '输入不能为空。');
|
||||||
$('#simplemodal-container').css('height', $('#repo-share-form').height());
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@@ -1,9 +1,8 @@
|
|||||||
<form id="repo-share-form" action="{{ SITE_ROOT }}share/add/" method="post" name="repo-share-form" class="hide">
|
<form id="repo-share-form" action="{% url share.views.share_repo %}" method="post" name="repo-share-form" class="hide">
|
||||||
<label>邮箱或小组:</label><br />
|
<label>邮箱或小组:</label><br />
|
||||||
<textarea id="email_or_group" name="email_or_group"></textarea>
|
<textarea id="email_or_group" name="email_or_group"></textarea>
|
||||||
<input id="repo_id" type="hidden" name="repo_id" value="" />
|
<input id="repo_id" type="hidden" name="repo_id" value="" />
|
||||||
<p class="tip">可以是非网站注册用户,我们会以邮件通知对方。</p>
|
<p class="tip">可以是非网站注册用户,我们会以邮件通知对方。</p>
|
||||||
<p class="tip">(如未收到,请检查垃圾邮件)</p>
|
<p class="error hide"></p>
|
||||||
<p class="error hide">输入不能为空。</p>
|
|
||||||
<input type="submit" value="提交" id="share-submit-btn" />
|
<input type="submit" value="提交" id="share-submit-btn" />
|
||||||
</form>
|
</form>
|
||||||
|
11
utils.py
11
utils.py
@@ -287,8 +287,15 @@ def get_ccnet_server_addr_port():
|
|||||||
|
|
||||||
def emails2list(emails):
|
def emails2list(emails):
|
||||||
"""
|
"""
|
||||||
Split email string contacted with diffent separator.
|
Split email strings contacted with diffent separator.
|
||||||
"""
|
"""
|
||||||
email_str = emails.replace(';', ',').replace('\n', ',').replace('\r', ',')
|
email_str = emails.replace(';', ',').replace('\n', ',').replace('\r', ',')
|
||||||
return email_str.split(',')
|
# Remove empty strings and duplicate emails
|
||||||
|
s = set()
|
||||||
|
for e in email_str.split(','):
|
||||||
|
e = e.strip(' ')
|
||||||
|
if not e:
|
||||||
|
continue
|
||||||
|
s.add(e)
|
||||||
|
return [ x for x in s ]
|
||||||
|
|
||||||
|
11
views.py
11
views.py
@@ -37,6 +37,7 @@ from pysearpc import SearpcError
|
|||||||
from seahub.base.accounts import CcnetUser
|
from seahub.base.accounts import CcnetUser
|
||||||
from seahub.base.models import UuidObjidMap
|
from seahub.base.models import UuidObjidMap
|
||||||
from seahub.contacts.models import Contact
|
from seahub.contacts.models import Contact
|
||||||
|
from seahub.contacts.signals import mail_sended
|
||||||
from seahub.notifications.models import UserNotification
|
from seahub.notifications.models import UserNotification
|
||||||
from seahub.organizations.utils import clear_org_ctx, access_org_repo
|
from seahub.organizations.utils import clear_org_ctx, access_org_repo
|
||||||
from forms import AddUserForm, FileLinkShareForm, RepoCreateForm
|
from forms import AddUserForm, FileLinkShareForm, RepoCreateForm
|
||||||
@@ -1841,14 +1842,12 @@ def send_shared_link(request):
|
|||||||
email = form.cleaned_data['email']
|
email = form.cleaned_data['email']
|
||||||
file_shared_link = form.cleaned_data['file_shared_link']
|
file_shared_link = form.cleaned_data['file_shared_link']
|
||||||
|
|
||||||
to_email_list = emails2list(email)
|
|
||||||
|
|
||||||
t = loader.get_template('shared_link_email.html')
|
t = loader.get_template('shared_link_email.html')
|
||||||
|
to_email_list = emails2list(email)
|
||||||
for to_email in to_email_list:
|
for to_email in to_email_list:
|
||||||
if not to_email:
|
# Add email to contacts
|
||||||
continue
|
mail_sended.send(sender=None, user=request.user.username,
|
||||||
to_email = to_email.strip(' ')
|
email=to_email)
|
||||||
|
|
||||||
c = {
|
c = {
|
||||||
'email': request.user.username,
|
'email': request.user.username,
|
||||||
|
Reference in New Issue
Block a user