Skip to content

Commit

Permalink
Issue #127: 'Redesign the permission management for project creation'…
Browse files Browse the repository at this point in the history
… (solved bug)
  • Loading branch information
CarolinaFernandez committed May 9, 2013
1 parent a540422 commit 7838ed6
Showing 1 changed file with 91 additions and 22 deletions.
113 changes: 91 additions & 22 deletions expedient/src/python/expedient/clearinghouse/permissionmgmt/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
from expedient.clearinghouse.project.views import create, create_project_roles
from expedient.clearinghouse.project.models import Project
import uuid
from expedient.common.utils.mail import send_mail # Wrapper for django.core.mail__send_mail
from django.conf import settings

TEMPLATE_PATH = "permissionmgmt"

Expand Down Expand Up @@ -72,7 +74,7 @@ def filter_id(id):
my_perms=my_perms,
),
)

def confirm_requests(request):
"""Confirm the approval of the permission requests."""

Expand Down Expand Up @@ -104,23 +106,43 @@ def confirm_requests(request):
# sender=req.permission_owner,
# msg_type=DatedMessage.TYPE_WARNING)

posted_message = "Request for %s denied." % str(req.requested_permission.target).capitalize()
post_message = "Request for %s denied." % str(req.requested_permission.target).capitalize()
if req.requested_permission.permission.name == "can_create_project":
# Removes "* Project name: "
try:
project_name = req.message.split("||")[0].strip()[16:]
post_message = "Request for project %s creation denied." % project_name

# Notify requesting user
try:
send_mail(
settings.EMAIL_SUBJECT_PREFIX + "Denied project request for '%s'" % (project_name),
"Your request for the creation of project '%s' has been denied.\n\n\nYou may want to get in contact with the Island Manager for further details." % project_name,
from_email = settings.DEFAULT_FROM_EMAIL,
recipient_list = [req.requesting_user.email],
)
except Exception as e:
print "[WARNING] User e-mail notification could not be sent. Details: %s" % str(e)

except:
pass
posted_message = "Request for project %s creation denied." % project_name
# -------------------------------------------
# It is not about permission granting anymore
# -------------------------------------------
# Notify requesting user
DatedMessage.objects.post_message_to_user(
posted_message,
post_message,
user = req.requesting_user,
sender = req.permission_owner,
msg_type = DatedMessage.TYPE_WARNING)

# Notify user with permission (e.g. root)
DatedMessage.objects.post_message_to_user(
post_message,
user = request.user,
sender = req.permission_owner,
msg_type = DatedMessage.TYPE_WARNING)

for req, delegate in approved_reqs:
# --------------------------------------------------------
# Do NOT grant permission to create projects in the future
Expand All @@ -135,34 +157,81 @@ def confirm_requests(request):
# sender=req.permission_owner,
# msg_type=DatedMessage.TYPE_SUCCESS)

posted_message = "Request for %s approved." % str(req.requested_permission.target).capitalize()
post_message = "Request for %s approved." % str(req.requested_permission.target).capitalize()
permission_user_post = post_message
requesting_user_post = post_message
email_header = post_message
email_body = "%s." % post_message
message_type = DatedMessage.TYPE_SUCCESS
# ---------------------------------------
# Project will be created in a direct way
# ---------------------------------------
if req.requested_permission.permission.name == "can_create_project":
project = Project()
project.uuid = uuid.uuid4()
project_name = ""
try:
project = Project()
project.uuid = uuid.uuid4()
message = req.message.split("||")
# Removes "* Project name: "
project.name = message[0].strip()[16:]
project_name = project.name
# Removes "* Project description: "
project.description = message[3].strip()[23:]
posted_message = "Successfully created project %s." % project.name
except:
# If some parsing error were to occur, set random name and description
import random
nonce = str(random.randrange(10000))
project.name = "Project_" % nonce
project.description = "Description_" % nonce
posted_message = "Project %s created, but you might need to edit it." % project.name
project.save()
create_project_roles(project, req.requesting_user)
DatedMessage.objects.post_message_to_user(
posted_message,
user = req.requesting_user,
sender = req.permission_owner,
msg_type = DatedMessage.TYPE_SUCCESS)
post_message = "Successfully created project %s" % project.name
project.save()
create_project_roles(project, req.requesting_user)
email_header = "Approved project request for '%s'" % project_name
email_body = "Your request for the creation of project '%s' has been approved." % project_name
except Exception as e:
# Any error when creating a project results into:
# 1. Denying the petition
# 2. Notifying user in their Expedient
# 3. Notifying user via e-mail
post_message = "Project '%s' could not be created" % project_name
permission_user_post = post_message
requesting_user_post = post_message

# Handle exception text for user
if "duplicate entry" in str(e).lower():
email_body = "There is already a project with name '%s'. Try using a different name" % project_name
requesting_user_post += ". Details: project '%s' already exists" % project_name
else:
email_body = "There might have been a problem when interpreting the information for project '%s'" % str(project_name)
requesting_user_post += ". Contact your Island Manager for further details"

# Handle exception text for admin
if "Details" not in post_message:
permission_user_post = "%s. Details: %s" % (post_message, str(e))

message_type = DatedMessage.TYPE_ERROR
# Email for requesting user
email_header = "Denied project request for '%s'" % project_name
email_body = "Your request for the creation of project '%s' has been denied because of the following causes:\n\n%s\n\n\nYou may want to get in contact with the Island Manager for further details." % (project_name, email_body)

# Notify requesting user
DatedMessage.objects.post_message_to_user(
requesting_user_post,
user = req.requesting_user,
sender = req.permission_owner,
msg_type = message_type)

try:
send_mail(
settings.EMAIL_SUBJECT_PREFIX + email_header,
email_body,
from_email = settings.DEFAULT_FROM_EMAIL,
recipient_list = [req.requesting_user.email],
)
except Exception as e:
print "[WARNING] User e-mail notification could not be sent. Details: %s" % str(e)

# Notify user with permission (e.g. root)
DatedMessage.objects.post_message_to_user(
permission_user_post,
user = request.user,
sender = req.permission_owner,
msg_type = message_type)


# After this post we will be done with all this information
del request.session["approved_req_ids"]
Expand Down

0 comments on commit 7838ed6

Please sign in to comment.