Send emails using functions
authorLoic Baron <loic.baron@lip6.fr>
Sat, 25 Apr 2015 09:42:03 +0000 (11:42 +0200)
committerLoic Baron <loic.baron@lip6.fr>
Sat, 25 Apr 2015 09:42:03 +0000 (11:42 +0200)
14 files changed:
portal/actions.py
portal/emailactivationview.py
portal/templates/fed4fire/fed4fire_join_request_denied.html [new file with mode: 0644]
portal/templates/fed4fire/fed4fire_join_request_denied.txt [new file with mode: 0644]
portal/templates/fed4fire/fed4fire_join_request_email.html [new file with mode: 0644]
portal/templates/fed4fire/fed4fire_join_request_email.txt [new file with mode: 0644]
portal/templates/fed4fire/fed4fire_join_request_validated.html [new file with mode: 0644]
portal/templates/fed4fire/fed4fire_join_request_validated.txt [new file with mode: 0644]
portal/templates/fed4fire/fed4fire_project_request_denied.html [new file with mode: 0644]
portal/templates/fed4fire/fed4fire_project_request_denied.txt [new file with mode: 0644]
portal/templates/fed4fire/fed4fire_project_request_email.html [new file with mode: 0644]
portal/templates/fed4fire/fed4fire_project_request_email.txt [new file with mode: 0644]
portal/templates/fed4fire/fed4fire_project_request_validated.html [new file with mode: 0644]
portal/templates/fed4fire/fed4fire_project_request_validated.txt [new file with mode: 0644]

index a6bac9b..a96dfd6 100644 (file)
@@ -169,8 +169,6 @@ def authority_add_pis(request, authority_hrn, user_hrn):
 
 def authority_remove_pis(request, authority_hrn, user_hrn):
     try:
-        print "-"*80
-        print "remove_pis"
         pi_list = []
         # getting pis of the authority of the user
         pis = authority_get_pis (request, authority_hrn)
@@ -626,47 +624,39 @@ def portal_validate_request(wsgi_request, request_ids):
         # slice : number of nodes, type of nodes, purpose
         
         request_status = {}
-
-        if request['type'] == 'user':
-
-            try:
+        try:
+            if request['type'] == 'user':
                 create_user(wsgi_request, request)
                 request_status['SFA user'] = {'status': True }
+                u = PendingUser.objects.get(id=request['id'])
+                ctx = {
+                    'first_name'    : u.first_name, 
+                    'last_name'     : u.last_name,
+                    'email'         : u.email,        
+                }      
+                user_email = u.email
+
                 PendingUser.objects.get(id=request['id']).delete()
-            except Exception, e:
-                 request_status['SFA user'] = {'status': False, 'description': str(e)}
-                       
-#            user_params = {'status':2}
-#            manifold_update_user(request, request['email'], user_params)
-
-            # MANIFOLD user should be added beforehand, during registration
-            #try:
-            #    manifold_user_params = { key: request[key] for key in MANIFOLD_USER_KEYS }
-            #    # XXX # manifold_add_user(manifold_user_params)
-            #    request_status['MySlice user'] = {'status': True }
-            #except Exception, e:
-            #    request_status['MySlice user'] = {'status': False, 'description': str(e)}
-
-            # XXX
-            #manifold_account_params = { key: request[key] for key in MANIFOLD_ACCOUNT_KEYS }
-            #manifold_add_account(manifold_account_params)
-            #request_status['MySlice testbed accounts'] = {'status': False }
-
-        elif request['type'] == 'slice':
-            try:
+
+            elif request['type'] == 'slice':
                 create_slice(wsgi_request, request)
                 request_status['SFA slice'] = {'status': True }
+                s = PendingSlice.objects.get(id=request['id'])
+                ctx = {
+                    'slice_name'    : s.slice_name, 
+                    'url'           : s.url,
+                    'purpose'       : s.purpose,        
+                    'email'         : s.email,        
+                }      
+                user_email = s.email
+
                 PendingSlice.objects.get(id=request['id']).delete()
 
                 # Clear user's Credentials
                 sfa_user = sfa_get_user(wsgi_request, request['user_hrn'])
                 clear_user_creds(wsgi_request,sfa_user['user_email'])
 
-            except Exception, e:
-                request_status['SFA slice'] = {'status': False, 'description': str(e)}
-
-        elif request['type'] == 'authority':
-            try:
+            elif request['type'] == 'authority':
                 #hrn = "%s.%s" % (request['authority_hrn'], request['site_authority'])
                 hrn = request['site_authority']
                 # XXX tmp sfa dependency
@@ -684,13 +674,20 @@ def portal_validate_request(wsgi_request, request_ids):
                 logger.info("ADD Authority")
                 sfa_add_authority(wsgi_request, sfa_authority_params)
                 request_status['SFA authority'] = {'status': True }
-                PendingAuthority.objects.get(id=request['id']).delete()
+                a = PendingAuthority.objects.get(id=request['id'])
+                ctx = { 
+                    'site_name'     : a.site_name,
+                    'short_name'    : a.short_name,
+                    'url'           : a.url,
+                    'city'          : a.city,
+                    'country'       : a.country,                          
+                    'portal_url'    : a.current_site,
+                }
+                user_email = a.email
 
-            except Exception, e:
-                request_status['SFA authority'] = {'status': False, 'description': str(e)}
+                PendingAuthority.objects.get(id=request['id']).delete()
 
-        elif request['type'] == 'project':
-            try:
+            elif request['type'] == 'project':
                 hrn = request['authority_hrn'] + '.' + request['project_name']
 
                 # Only hrn is required for Manifold Query 
@@ -704,25 +701,40 @@ def portal_validate_request(wsgi_request, request_ids):
                 authority_add_pis(wsgi_request, hrn , request['user_hrn'])
 
                 request_status['SFA project'] = {'status': True }
-                PendingProject.objects.get(id=request['id']).delete()
+                p = PendingProject.objects.get(id=request['id'])
+                ctx = {
+                    'project_name'  : p.project_name, 
+                    'authority_hrn' : p.authority_hrn,
+                    'email'         : p.email,        
+                    'purpose'       : p.purpose,
+                }      
+                user_email = p.email
 
-            except Exception, e:
-                request_status['SFA project'] = {'status': False, 'description': str(e)}
+                PendingProject.objects.get(id=request['id']).delete()
 
-        elif request['type'] == 'join':
-            try:
+            elif request['type'] == 'join':
                 # Add user as a PI of the project
                 # Clear user's Credentials
                 authority_add_pis(wsgi_request, request['authority_hrn'] , request['user_hrn'])
 
                 request_status['SFA join'] = {'status': True }
+                j = PendingJoin.objects.get(id=request['id'])
+                ctx = {
+                    'project_name'  : j.project_name, 
+                    'authority_hrn' : j.authority_hrn,
+                    'email'         : j.email,        
+                    'user_hrn'      : j.user_hrn,
+                }      
+                user_email = j.email
+
                 PendingJoin.objects.get(id=request['id']).delete()
+            else:
+                raise Exception, 'unknown type of request %s' % request['type']
+            # XXX Remove from Pendings in database
 
-            except Exception, e:
-                request_status['SFA join'] = {'status': False, 'description': str(e)+' - '+str(request)}
-        else:
-            request_status['other'] = {'status': False, 'description': 'unknown type of request'}
-        # XXX Remove from Pendings in database
+            send_status_email(ctx, user_email, request['type'], 'validated')
+        except Exception, e:
+            request_status['SFA '+request['type']] = {'status': False, 'description': str(e)}
 
         status['%s__%s' % (request['type'], request['id'])] = request_status
 
@@ -761,8 +773,8 @@ def portal_reject_request(wsgi_request, request_ids):
         
         request_status = {}
 
-        if request['type'] == 'user':
-            try:
+        try:
+            if request['type'] == 'user':
                 request_status['SFA user'] = {'status': True }
                 # getting user email based on id 
                 ## RAW SQL queries on Django DB- https://docs.djangoproject.com/en/dev/topics/db/sql/
@@ -774,120 +786,114 @@ def portal_reject_request(wsgi_request, request_ids):
                 ctx = {
                     'first_name'    : first_name, 
                     'last_name'     : last_name, 
+                    'email'         : user_email,
                     'portal_url'    : current_site,
                     }
-                try:
-                    theme.template_name = 'user_request_denied.txt'
-                    text_content = render_to_string(theme.template, ctx)
-                    theme.template_name = 'user_request_denied.html'
-                    html_content = render_to_string(theme.template, ctx)
-                    theme.template_name = 'email_default_sender.txt'
-                    sender =  render_to_string(theme.template, ctx)
-                    sender = sender.replace('\n', '')
-                               
-                    subject = 'User request denied.'
-
-                    msg = EmailMultiAlternatives(subject, text_content, sender, [user_email])
-                    msg.attach_alternative(html_content, "text/html")
-                    msg.send()
-                except Exception as e:
-                    logger.error("Failed to send email, please check the mail templates and the SMTP configuration of your server")   
 
                 # removing from Django portal_pendinguser
                 PendingUser.objects.get(id=request['id']).delete()
-            
+                
                 delete_local_user(wsgi_request, user_email)
-            except Exception, e:
-                request_status['SFA authority'] = {'status': False, 'description': str(e)}
-                      
-        elif request['type'] == 'slice':
-            request_status['SFA slice'] = {'status': True } 
-
-            # getting user email based on id 
-            ## RAW SQL queries on Django DB- https://docs.djangoproject.com/en/dev/topics/db/sql/
-            for user in PendingSlice.objects.raw('SELECT * FROM portal_pendingslice WHERE id = %s', [request['id']]):
-                user_email= user.type_of_nodes # XXX type_of_nodes field contains the email [shd be renamed in DB]
-                slice_name = user.slice_name
-                purpose = user.purpose
-                url = user.number_of_nodes
-
-            ctx = {
-                'slice_name': slice_name,
-                'purpose': purpose,
-                'url': url,
-                'portal_url': current_site,
-                }
-            try:
-                theme.template_name = 'slice_request_denied.txt'
-                text_content = render_to_string(theme.template, ctx)
-                theme.template_name = 'slice_request_denied.html'
-                html_content = render_to_string(theme.template, ctx)
-                theme.template_name = 'email_default_sender.txt'
-                sender =  render_to_string(theme.template, ctx)
-                sender = sender.replace('\n', '')
-                               
-                subject = 'Slice request denied.'
-
-                msg = EmailMultiAlternatives(subject, text_content, sender, [user_email])
-                msg.attach_alternative(html_content, "text/html")
-                msg.send()
-            except Exception as e:
-                logger.error("Failed to send email, please check the mail templates and the SMTP configuration of your server")
-                      
-            PendingSlice.objects.get(id=request['id']).delete()
-
-        elif request['type'] == 'authority':
-            request_status['SFA authority'] = {'status': True }
-            
-            # getting user email based on id 
-            ## RAW SQL queries on Django DB- https://docs.djangoproject.com/en/dev/topics/db/sql/
-            for user in PendingAuthority.objects.raw('SELECT * FROM portal_pendingauthority WHERE id = %s', [request['id']]):
-                user_email= user.address_line1 # XXX address_line1 field contains the email [shd be renamed in DB]
-                site_name = user.site_name
-                city = user.address_city
-                country = user.address_country
-                short_name = user.site_abbreviated_name
-                url = user.site_url
-
-            ctx = { 
-                'site_name': site_name,
-                'short_name': short_name,
-                'url': url,
-                'city': city,
-                'country': country,                          
-                'portal_url'    : current_site,
-                }
+                          
+            elif request['type'] == 'slice':
+                request_status['SFA slice'] = {'status': True } 
+
+                # getting user email based on id 
+                ## RAW SQL queries on Django DB- https://docs.djangoproject.com/en/dev/topics/db/sql/
+                for user in PendingSlice.objects.raw('SELECT * FROM portal_pendingslice WHERE id = %s', [request['id']]):
+                    user_email= user.type_of_nodes # XXX type_of_nodes field contains the email [shd be renamed in DB]
+                    slice_name = user.slice_name
+                    purpose = user.purpose
+                    url = user.number_of_nodes
+
+                ctx = {
+                    'slice_name': slice_name,
+                    'purpose': purpose,
+                    'url': url,
+                    'portal_url': current_site,
+                    }
+
+                PendingSlice.objects.get(id=request['id']).delete()
+
+            elif request['type'] == 'authority':
+                request_status['SFA authority'] = {'status': True }
                 
-            try:
-                theme.template_name = 'authority_request_denied.txt'
-                text_content = render_to_string(theme.template, ctx)
-                theme.template_name = 'authority_request_denied.html'
-                html_content = render_to_string(theme.template, ctx)
-                theme.template_name = 'email_default_sender.txt'
-                sender =  render_to_string(theme.template, ctx)
-                sender = sender.replace('\n', '')
-                subject = 'Authority request denied.'
-                msg = EmailMultiAlternatives(subject, text_content, sender, [user_email])
-                msg.attach_alternative(html_content, "text/html")
-                msg.send()
-            except Exception as e:
-                logger.error("Failed to send email, please check the mail templates and the SMTP configuration of your server")
-
-            PendingAuthority.objects.get(id=request['id']).delete()
-
-        # XXX TMP we should send an email to the user to inform him/her
-        elif request['type'] == 'project':
-            request_status['SFA project'] = {'status': True }
-            PendingProject.objects.get(id=request['id']).delete()
-
-        elif request['type'] == 'join':
-            request_status['SFA join'] = {'status': True }
-            PendingJoin.objects.get(id=request['id']).delete()
+                # getting user email based on id 
+                ## RAW SQL queries on Django DB- https://docs.djangoproject.com/en/dev/topics/db/sql/
+                for user in PendingAuthority.objects.raw('SELECT * FROM portal_pendingauthority WHERE id = %s', [request['id']]):
+                    user_email= user.address_line1 # XXX address_line1 field contains the email [shd be renamed in DB]
+                    site_name = user.site_name
+                    city = user.address_city
+                    country = user.address_country
+                    short_name = user.site_abbreviated_name
+                    url = user.site_url
+
+                ctx = { 
+                    'site_name': site_name,
+                    'short_name': short_name,
+                    'url': url,
+                    'city': city,
+                    'country': country,                          
+                    'portal_url'    : current_site,
+                    }
+                    
+                PendingAuthority.objects.get(id=request['id']).delete()
+
+            # XXX TMP we should send an email to the user to inform him/her
+            elif request['type'] == 'project':
+                request_status['SFA project'] = {'status': True }
+                p = PendingProject.objects.get(id=request['id'])
+                ctx = {
+                    'project_name'  : p.project_name, 
+                    'authority_hrn' : p.authority_hrn,
+                    'email'         : p.email,        
+                    'purpose'       : p.purpose,
+                }      
+                user_email = p.email
+                PendingProject.objects.get(id=request['id']).delete()
+
+            elif request['type'] == 'join':
+                request_status['SFA join'] = {'status': True }
+                j = PendingJoin.objects.get(id=request['id'])
+                ctx = {
+                    'project_name'  : j.project_name, 
+                    'authority_hrn' : j.authority_hrn,
+                    'email'         : j.email,        
+                    'user_hrn'      : j.user_hrn,
+                }      
+
+                user_email = j.email
+                PendingJoin.objects.get(id=request['id']).delete()
+            else:
+                raise Exception, 'unknown type of request %s' % request['type']
+
+            send_status_email(ctx, user_email, request['type'], 'denied')
+        except Exception, e:
+            request_status['SFA '+request['type']] = {'status': False, 'description': str(e)}
 
         status['%s__%s' % (request['type'], request['id'])] = request_status
 
     return status
 
+def send_status_email(ctx, user_email, obj_type, status):
+    try:
+        theme.template_name = obj_type + '_request_' + status + '.txt'
+        text_content = render_to_string(theme.template, ctx)
+        theme.template_name = obj_type + '_request_' + status + '.html'
+        html_content = render_to_string(theme.template, ctx)
+        theme.template_name = 'email_default_sender.txt'
+        sender =  render_to_string(theme.template, ctx)
+        sender = sender.replace('\n', '')
+                       
+        subject = obj_type + ' request '+ status +'.'
+    
+        msg = EmailMultiAlternatives(subject, text_content, sender, [user_email])
+        msg.attach_alternative(html_content, "text/html")
+        msg.send()
+    except Exception as e:
+        logger.error("Failed to send email, please check the mail templates and the SMTP configuration of your server")
+
+
 # Django and ajax
 # http://djangosnippets.org/snippets/942/
 
@@ -968,23 +974,6 @@ def create_slice(wsgi_request, request):
             clear_user_creds(wsgi_request,user_email)
         # log user activity
         activity.slice.validate(request, { "slice" : hrn })
-        try:
-            theme.template_name = 'slice_request_validated.txt'
-            text_content = render_to_string(theme.template, request)
-            theme.template_name = 'slice_request_validated.html'
-            html_content = render_to_string(theme.template, request)
-        
-            theme.template_name = 'email_default_sender.txt'
-            sender =  render_to_string(theme.template, request)
-            sender = sender.replace('\n', '')
-
-            subject = 'Slice request validated'
-
-            msg = EmailMultiAlternatives(subject, text_content, sender, [user_email])
-            msg.attach_alternative(html_content, "text/html")
-            msg.send()
-        except Exception as e:
-            logger.error("Failed to send email, please check the mail templates and the SMTP configuration of your server")
        
     return results
 
@@ -1003,27 +992,7 @@ def create_pending_slice(wsgi_request, request, email):
     )
     s.save()
 
-    try:
-        # Send an email: the recipients are the PI of the authority
-        recipients = authority_get_pi_emails(wsgi_request, request['authority_hrn'])
-
-        theme.template_name = 'slice_request_email.txt' 
-        text_content = render_to_string(theme.template, request)
-    
-        theme.template_name = 'slice_request_email.html' 
-        html_content = render_to_string(theme.template, request)
-    
-        theme.template_name = 'slice_request_email_subject.txt'
-        subject = render_to_string(theme.template, request)
-        subject = subject.replace('\n', '')
-    
-        sender = email
-        msg = EmailMultiAlternatives(subject, text_content, sender, recipients)
-        msg.attach_alternative(html_content, "text/html")
-        msg.send()
-    except Exception as e:
-        logger.error("Failed to send email, please check the mail templates and the SMTP configuration of your server")
-
+    send_email_to_pis(wsgi_request, request, 'slice')
 
 def create_pending_project(wsgi_request, request):
     """
@@ -1039,6 +1008,8 @@ def create_pending_project(wsgi_request, request):
     )
     s.save()
 
+    send_email_to_pis(wsgi_request, request, 'project')
+
 def create_pending_join(wsgi_request, request):
     """
     """
@@ -1052,27 +1023,35 @@ def create_pending_join(wsgi_request, request):
     )
     s.save()
 
+    send_email_to_pis(wsgi_request, request, 'join')
+
+#-------------------------------------------------------------------------------
+# SEND EMAILS
+#-------------------------------------------------------------------------------
+
+def send_email_to_pis(wsgi_request, request, obj_type):
+    try:
+        # Send an email: the recipients are the PIs of the authority
+        recipients = authority_get_pi_emails(wsgi_request, request['authority_hrn'])
+
+        theme.template_name = obj_type + '_request_email.txt' 
+        text_content = render_to_string(theme.template, request)
+
+        theme.template_name = obj_type + '_request_email.html' 
+        html_content = render_to_string(theme.template, request)
+
+        theme.template_name = obj_type + '_request_email_subject.txt'
+        subject = render_to_string(theme.template, request)
+        subject = subject.replace('\n', '')
+
+        theme.template_name = 'email_default_sender.txt'
+        sender =  render_to_string(theme.template, request)
 
-#     try:
-#         # Send an email: the recipients are the PI of the authority
-#         recipients = authority_get_pi_emails(wsgi_request, request['authority_hrn'])
-# 
-#         theme.template_name = 'slice_request_email.txt' 
-#         text_content = render_to_string(theme.template, request)
-#     
-#         theme.template_name = 'slice_request_email.html' 
-#         html_content = render_to_string(theme.template, request)
-#     
-#         theme.template_name = 'slice_request_email_subject.txt'
-#         subject = render_to_string(theme.template, request)
-#         subject = subject.replace('\n', '')
-#     
-#         sender = email
-#         msg = EmailMultiAlternatives(subject, text_content, sender, recipients)
-#         msg.attach_alternative(html_content, "text/html")
-#         msg.send()
-#     except Exception, e:
-#         print "Failed to send email, please check the mail templates and the SMTP configuration of your server"
+        msg = EmailMultiAlternatives(subject, text_content, sender, recipients)
+        msg.attach_alternative(html_content, "text/html")
+        msg.send()
+    except Exception, e:
+        print "Failed to send email, please check the mail templates and the SMTP configuration of your server"
 
 
 #-------------------------------------------------------------------------------
@@ -1161,25 +1140,6 @@ def sfa_create_user(wsgi_request, request, namespace = None, as_admin = False):
 
     if not results:
         raise Exception, "Could not create %s. Already exists ?" % sfa_user_params['user_hrn']
-    else:
-        try:
-            theme.template_name = 'user_request_validated.txt'
-            text_content = render_to_string(theme.template, request)
-            theme.template_name = 'user_request_validated.html'
-            html_content = render_to_string(theme.template, request)
-        
-            theme.template_name = 'email_default_sender.txt'
-            sender =  render_to_string(theme.template, request)
-            sender = sender.replace('\n', '')
-
-
-            subject = 'Account validated'
-
-            msg = EmailMultiAlternatives(subject, text_content, sender, [request['email']])
-            msg.attach_alternative(html_content, "text/html")
-            msg.send()
-        except Exception as e:
-            logger.error("Failed to send email, please check the mail templates and the SMTP configuration of your server")
 
     return results
 
@@ -1313,32 +1273,10 @@ def create_pending_user(wsgi_request, request, user_detail):
             'config'        : json.dumps(account_config),
         }
         manifold_add_account(wsgi_request, account_params)
+
+    # Email to PIs is sent when the user activates his email
+    # portal/emailactivationview.py
+
     except Exception as e:
         logger.error("Failed creating manifold account on platform {} for user: {}".format('myslice', request['email']))
 
-    try:
-        # Send an email: the recipients are the PI of the authority
-        # If No PI is defined for this Authority, send to a default email (different for each theme)
-        recipients = authority_get_pi_emails(wsgi_request, request['authority_hrn'])
-        
-        theme.template_name = 'user_request_email.html'
-        html_content = render_to_string(theme.template, request)
-        theme.template_name = 'user_request_email.txt'
-        text_content = render_to_string(theme.template, request)
-    
-        theme.template_name = 'user_request_email_subject.txt'
-        subject = render_to_string(theme.template, request)
-        subject = subject.replace('\n', '')
-    
-        theme.template_name = 'email_default_sender.txt'
-        sender =  render_to_string(theme.template, request)
-        sender = sender.replace('\n', '')
-    
-        msg = EmailMultiAlternatives(subject, text_content, sender, recipients)
-        msg.attach_alternative(html_content, "text/html")
-        msg.send()
-    except Exception, e:
-        logger.error("Failed to send email, please check the mail templates and the SMTP configuration of your server")
-        import traceback
-        logger.error(traceback.format_exc())
index 8bb164f..c54cdcb 100644 (file)
@@ -17,7 +17,7 @@ from unfold.loginrequired               import FreeAccessView
 from portal.actions                     import (
     manifold_update_user, manifold_update_account, manifold_add_account,
     manifold_delete_account, sfa_update_user, authority_get_pi_emails,
-    make_request_user, create_user)
+    make_request_user, create_user, send_email_to_pis)
 from portal.models                      import PendingUser, PendingAuthority
 
 from unfold.page                        import Page    
@@ -62,8 +62,11 @@ class ActivateEmailView(FreeAccessView, ThemeView):
         for key, value in kwargs.iteritems():
             if key == "hash_code":
                 hash_code=value
+
         if PendingUser.objects.filter(email_hash__iexact = hash_code).filter(status__iexact = 'False'):           
             activation = 'success'
+            pending_users = PendingUser.objects.filter(email_hash__iexact = hash_code)
+            pending_user = pending_users[0]
 
             # AUTO VALIDATION of PLE enabled users (only for OneLab Portal)
             if self.theme == "onelab":
@@ -72,14 +75,11 @@ class ActivateEmailView(FreeAccessView, ThemeView):
                 # as we currently need to do a Resolve on each user_hrn of the Registry in order to get its email
                 # TODO in SFA XXX We need a Resolve based on email
                 # TODO maybe we can use MyPLC API for PLE
-                pending_users = PendingUser.objects.filter(email_hash__iexact = hash_code)
 
                 # by default user is not in PLE
                 ple_user_enabled = False
 
-                if pending_users:
-                    pending_user = pending_users[0]
-                    
+                if pending_user:
                     # Auto Validation 
                     if self.is_ple_enabled(pending_user):
                         pending_user_request = make_request_user(pending_user)
@@ -90,30 +90,17 @@ class ActivateEmailView(FreeAccessView, ThemeView):
 
                         # template user auto validated
                         activation = 'validated'
-
-                        # sending email after activation success
-                        #try:
-                        #    # Send an email: the recipient is the user
-                        #    recipients = pending_user_eamil 
-                        #    theme.template_name = 'user_request_email.html'
-                        #    html_content = render_to_string(theme.template, request)
-                        #    theme.template_name = 'user_request_email.txt'
-                        #    text_content = render_to_string(theme.template, request)
-                        #    theme.template_name = 'user_request_email_subject.txt'
-                        #    subject = render_to_string(theme.template, request)
-                        #    subject = subject.replace('\n', '')
-                        #    theme.template_name = 'email_default_sender.txt'
-                        #    sender =  render_to_string(theme.template, request)
-                        #    sender = sender.replace('\n', '')
-                        #    msg = EmailMultiAlternatives(subject, text_content, sender, recipients)
-                        #    msg.attach_alternative(html_content, "text/html")
-                        #    msg.send()
-                        #except Exception as e:
-                        #    logger.error("Failed to send email, please check the mail templates and the SMTP configuration of your server")
-                        #    import traceback
-                        #    logger.error(traceback.format_exc())
             
             PendingUser.objects.filter(email_hash__iexact = hash_code).update(status='True')
+            u = {}
+            u['first_name']    =  pending_user.first_name   
+            u['last_name']     =  pending_user.last_name    
+            u['authority_hrn'] =  pending_user.authority_hrn
+            u['email']         =  pending_user.email        
+            u['user_hrn']      =  pending_user.user_hrn     
+            u['pi']            =  pending_user.pi           
+
+            send_email_to_pis(self.request, u, 'user')
         else:
             activation = 'failed'
         
diff --git a/portal/templates/fed4fire/fed4fire_join_request_denied.html b/portal/templates/fed4fire/fed4fire_join_request_denied.html
new file mode 100644 (file)
index 0000000..5b98402
--- /dev/null
@@ -0,0 +1,18 @@
+<img src="https://portal.fed4fire.eu/static/img/f4f-logo.png" width="80px">
+<br>
+<p>Dear Fed4FIRE user,</p>
+<p></p>
+<p>You have recently requested to join a project in the Fed4FIRE portal.</p>
+<br>
+<b>Project name  :</b> {{project_name}}</br>
+<b>Authority     :</b> {{authority_hrn}}</br>
+<b>Email         :</b> {{email}}</br>
+<p></p>
+<br>
+<p>We regret to inform you that, a manager of your institution has rejected your request. Please contact the manager of your institution for further information. 
+For any other queries, please contact us by replying to this email.</p>
+<br>
+<p>We wish you a fruitful user experience on Fed4FIRE.</p>
+<br>
+<p>Yours sincerely,</p>
+<p>The Fed4FIRE team</p>
diff --git a/portal/templates/fed4fire/fed4fire_join_request_denied.txt b/portal/templates/fed4fire/fed4fire_join_request_denied.txt
new file mode 100644 (file)
index 0000000..45bab22
--- /dev/null
@@ -0,0 +1,15 @@
+Dear Fed4FIRE user,
+
+You have recently requested to join a project in the Fed4FIRE portal.
+
+Project name  : {{project_name}}
+Authority     : {{authority_hrn}}
+Email         : {{email}}
+We regret to inform you that, a manager of your institution has rejected your request. Please contact the manager of your institution for further information. For any other queries, please contact us by replying to this email.
+
+We wish you a fruitful user experience on Fed4FIRE.
+
+Yours sincerely,
+The Fed4FIRE team
+
diff --git a/portal/templates/fed4fire/fed4fire_join_request_email.html b/portal/templates/fed4fire/fed4fire_join_request_email.html
new file mode 100644 (file)
index 0000000..f7949d0
--- /dev/null
@@ -0,0 +1,18 @@
+<img src="https://portal.fed4fire.eu/static/img/f4f-logo.png" width="80px">
+<br>
+<h1>JOIN PROJECT REQUEST</h1>
+<br>
+<p>You are receiving this request because we have you listed as a manager of a project that uses Fed4FIRE.</p>
+<p>A user has requested to join your project, which will allow him or her to reserve testbed resources to conduct an experiment.</p>
+<br>
+<b>Project name  :</b> {{project_name}}</br>
+<b>Authority     :</b> {{authority_hrn}}</br>
+<b>Email         :</b> {{email}}</br>
+<p></p>
+<p>You can accept or reject this request <a href="{{current_site}}/portal/project/{{authority_hrn}}.{{project_name}}#requests">in the portal.</a><p>
+<p>Please be sure that you know the user who is requesting to join your project.</p>
+<p>Fed4FIRE and its affiliated testbeds exist purely to support useful and interesting work. To ensure the future of these environments, we need to know what work is actually being done.</p>
+<p></p>
+<p>If you believe that you have received this message in error, or if you have any questions, kindly contact contact@fed4fire.eu</p>
+
+
diff --git a/portal/templates/fed4fire/fed4fire_join_request_email.txt b/portal/templates/fed4fire/fed4fire_join_request_email.txt
new file mode 100644 (file)
index 0000000..57cc4d7
--- /dev/null
@@ -0,0 +1,19 @@
+JOIN PROJECT REQUEST
+
+You are receiving this request because we have you listed as a manager a project that uses Fed4FIRE.
+A user has requested to join your project, which will allow him or her to reserve testbed resources to conduct an experiment.
+
+Project name  : {{project_name}}
+Authority     : {{authority_hrn}}
+Email         : {{email}}
+
+You can accept or reject thisrequest in: 
+{{current_site}}/portal/project/{{authority_hrn}}.{{project_name}}#requests
+
+
+Please be sure that you know the user who is requesting to join your project.
+
+Fed4FIRE and its affiliated testbeds exist purely to support useful and interesting work. To ensure the future of these environments, we need to know what work is actually being done. 
+
+If you believe that you have received this message in error, or if you have any questions, kindly contact contact@fed4fire.eu
+
diff --git a/portal/templates/fed4fire/fed4fire_join_request_validated.html b/portal/templates/fed4fire/fed4fire_join_request_validated.html
new file mode 100644 (file)
index 0000000..bc0a77a
--- /dev/null
@@ -0,0 +1,21 @@
+<img src="https://portal.fed4fire.eu/static/img/f4f-logo.png" width="80px">
+<br>
+<p>Dear Fed4FIRE user,</p>
+<p></p>
+<p>You have recently requested to join a project in the Fed4FIRE portal.</p>
+<br>
+<b>Project name  :</b> {{project_name}}</br>
+<b>Authority     :</b> {{authority_hrn}}</br>
+<b>Email         :</b> {{email}}</br>
+<p></p>
+<p>
+       We are pleased to inform you that a project manager has validated your request on the Fed4FIRE portal. 
+       You can now create slices in this project and start experimenting.
+</p>
+<p></p>
+<p>We wish you a fruitful user experience with the Fed4FIRE portal.</p>
+<p></p>
+<p>Yours sincerely,</p>
+<p>The Fed4FIRE team</p>
+
+
diff --git a/portal/templates/fed4fire/fed4fire_join_request_validated.txt b/portal/templates/fed4fire/fed4fire_join_request_validated.txt
new file mode 100644 (file)
index 0000000..fed677c
--- /dev/null
@@ -0,0 +1,15 @@
+Dear Fed4FIRE user,
+
+You have recently requested to join a project in the Fed4FIRE portal.
+
+Project name  : {{project_name}}
+Authority     : {{authority_hrn}}
+Email         : {{email}}
+
+We are pleased to inform you that a project manager has validated your request on the Fed4FIRE portal. 
+You can now create slices in this project and start experimenting.
+
+We wish you a fruitful user experience with the Fed4FIRE portal.
+
+Yours sincerely,
+The Fed4FIRE team
diff --git a/portal/templates/fed4fire/fed4fire_project_request_denied.html b/portal/templates/fed4fire/fed4fire_project_request_denied.html
new file mode 100644 (file)
index 0000000..5c4916c
--- /dev/null
@@ -0,0 +1,19 @@
+<img src="https://portal.fed4fire.eu/static/img/f4f-logo.png" width="80px">
+<br>
+<p>Dear Fed4FIRE user,</p>
+<p></p>
+<p>You have recently requested a project in the Fed4FIRE portal.</p>
+<br>
+<b>Project name  :</b> {{project_name}}</br>
+<b>Authority     :</b> {{authority_hrn}}</br>
+<b>Email         :</b> {{email}}</br>
+<b>Purpose         :</b> {{purpose}}</br>
+<p></p>
+<br>
+<p>We regret to inform you that, a manager of your institution has rejected your request. Please contact the manager of your institution for further information. 
+For any other queries, please contact us by replying to this email.</p>
+<br>
+<p>We wish you a fruitful user experience on Fed4FIRE.</p>
+<br>
+<p>Yours sincerely,</p>
+<p>The Fed4FIRE team</p>
diff --git a/portal/templates/fed4fire/fed4fire_project_request_denied.txt b/portal/templates/fed4fire/fed4fire_project_request_denied.txt
new file mode 100644 (file)
index 0000000..e5502d8
--- /dev/null
@@ -0,0 +1,16 @@
+Dear Fed4FIRE user,
+
+You have recently requested a project in the Fed4FIRE portal.
+
+Project name  : {{project_name}}
+Authority     : {{authority_hrn}}
+Email         : {{email}}
+Purpose       : {{purpose}}
+
+We regret to inform you that, a manager of your institution has rejected your request. Please contact the manager of your institution for further information. For any other queries, please contact us by replying to this email.
+
+We wish you a fruitful user experience on Fed4FIRE.
+
+Yours sincerely,
+The Fed4FIRE team
+
diff --git a/portal/templates/fed4fire/fed4fire_project_request_email.html b/portal/templates/fed4fire/fed4fire_project_request_email.html
new file mode 100644 (file)
index 0000000..c93ab40
--- /dev/null
@@ -0,0 +1,21 @@
+<img src="https://portal.fed4fire.eu/static/img/f4f-logo.png" width="80px">
+<br>
+<h1>NEW PROJECT REQUEST</h1>
+<br>
+<p>You are receiving this request because we have you listed as a manager at an organization that uses Fed4FIRE.</p>
+<p>A user from your organization has requested the creation of a new project.</p>
+<br>
+<b>Project name  :</b> {{project_name}}</br>
+<b>Authority     :</b> {{authority_hrn}}</br>
+<b>Email         :</b> {{email}}</br>
+<b>Purpose         :</b> {{purpose}}</br>
+<b>Portal url     :</b> {{current_site}}</br> 
+<p></p>
+<p>You can see this new project request <a href="{{current_site}}/portal/institution#requests">in the portal.</a><p>
+<p>Please be sure that you know the user who is requesting this project, as you are responsible for his or her actions.</p>
+<p>And kindly ensure that the stated experiment purpose is clear.</p>
+<p>Fed4FIRE and its affiliated testbeds exist purely to support useful and interesting work. To ensure the future of these environments, we need to know what work is actually being done.</p>
+<p></p>
+<p>If you believe that you have received this message in error, or if you have any questions, kindly contact contact@fed4fire.eu</p>
+
+
diff --git a/portal/templates/fed4fire/fed4fire_project_request_email.txt b/portal/templates/fed4fire/fed4fire_project_request_email.txt
new file mode 100644 (file)
index 0000000..f38fd8c
--- /dev/null
@@ -0,0 +1,20 @@
+NEW SLICE REQUEST
+
+You are receiving this request because we have you listed as a manager at an organization that uses Fed4FIRE.
+A user from your organization has requested the creation of a new slice, which will allow him or her to reserve testbed resources to conduct an experiment.
+
+Project name  : {{project_name}}
+Authority     : {{authority_hrn}}
+Email         : {{email}}
+Purpose       : {{purpose}}
+Portal url       : {{current_site}}
+
+You can see this new project request in: {{current_site}}/portal/institution#requests
+
+Please be sure that you know the user who is requesting this project, as you are responsible for his or her actions.
+And kindly ensure that the stated experiment purpose is clear. 
+Fed4FIRE and its affiliated testbeds exist purely to support useful and interesting work. To ensure the future of these environments, we need to know what work is actually being done. 
+
+If you believe that you have received this message in error, or if you have any questions, kindly contact contact@fed4fire.eu
+
diff --git a/portal/templates/fed4fire/fed4fire_project_request_validated.html b/portal/templates/fed4fire/fed4fire_project_request_validated.html
new file mode 100644 (file)
index 0000000..b8356dc
--- /dev/null
@@ -0,0 +1,22 @@
+<img src="https://portal.fed4fire.eu/static/img/f4f-logo.png" width="80px">
+<br>
+<p>Dear Fed4FIRE user,</p>
+<p></p>
+<p>You have recently requested a project in the Fed4FIRE portal.</p>
+<br>
+<b>Project name  :</b> {{project_name}}</br>
+<b>Authority     :</b> {{authority_hrn}}</br>
+<b>Email         :</b> {{email}}</br>
+<b>Purpose       :</b> {{purpose}}</br>
+<p></p>
+<p>
+       We are pleased to inform you that a manager from your institution has validated your project request on the Fed4FIRE portal. 
+       You can now create slices and start experimenting.
+</p>
+<p></p>
+<p>We wish you a fruitful user experience with the Fed4FIRE portal.</p>
+<p></p>
+<p>Yours sincerely,</p>
+<p>The Fed4FIRE team</p>
+
+
diff --git a/portal/templates/fed4fire/fed4fire_project_request_validated.txt b/portal/templates/fed4fire/fed4fire_project_request_validated.txt
new file mode 100644 (file)
index 0000000..559bbb5
--- /dev/null
@@ -0,0 +1,15 @@
+Dear Fed4FIRE user,
+
+You have recently requested a project in the Fed4FIRE portal.
+
+Project name  : {{project_name}}
+Authority     : {{authority_hrn}}
+Email         : {{email}}
+Purpose       : {{purpose}}
+
+We are pleased to inform you that a manager from your institution has validated your project request on the Fed4FIRE portal. You can now create slices and start experimenting.
+
+We wish you a fruitful user experience with the Fed4FIRE portal.
+
+Yours sincerely,
+The Fed4FIRE team