diff --git a/atst/forms/update_member.py b/atst/forms/update_member.py new file mode 100644 index 00000000..236cfbb8 --- /dev/null +++ b/atst/forms/update_member.py @@ -0,0 +1,16 @@ +from flask_wtf import Form +from wtforms.fields import StringField +from wtforms.fields.html5 import EmailField +from wtforms.validators import Required, Email, Length + +from atst.forms.validators import IsNumber +from atst.forms.fields import SelectField + +from .data import WORKSPACE_ROLES + + +class UpdateMemberForm(Form): + + workspace_role = SelectField( + "Workspace Role", choices=WORKSPACE_ROLES, validators=[Required()], default="" + ) diff --git a/atst/models/workspace.py b/atst/models/workspace.py index aca024a4..1128079a 100644 --- a/atst/models/workspace.py +++ b/atst/models/workspace.py @@ -5,6 +5,7 @@ from atst.models import Base from atst.models.types import Id from atst.models.mixins import TimestampsMixin from atst.utils import first_or_none +from atst.models.workspace_user import WorkspaceUser MOCK_MEMBERS = [ @@ -68,4 +69,4 @@ class Workspace(Base, TimestampsMixin): @property def members(self): - return MOCK_MEMBERS + return [ WorkspaceUser(role.user, role) for role in self.roles] diff --git a/atst/models/workspace_user.py b/atst/models/workspace_user.py index 5e3ee1ed..59576a17 100644 --- a/atst/models/workspace_user.py +++ b/atst/models/workspace_user.py @@ -16,3 +16,20 @@ class WorkspaceUser(object): def workspace_id(self): return self.workspace_role.workspace_id + + @property + def user_id(self): + return self.user.id + + @property + def user_name(self): + return self.user.full_name + + @property + def role(self): + return self.workspace_role.role.name + + @property + def status(self): + return "radical" + diff --git a/atst/routes/workspaces.py b/atst/routes/workspaces.py index 665d266c..f6e8a5f1 100644 --- a/atst/routes/workspaces.py +++ b/atst/routes/workspaces.py @@ -9,9 +9,12 @@ from flask import ( from atst.domain.exceptions import UnauthorizedError from atst.domain.workspaces import Workspaces +from atst.domain.workspace_users import WorkspaceUsers from atst.domain.projects import Projects from atst.forms.new_project import NewProjectForm from atst.forms.new_member import NewMemberForm +from atst.forms.update_member import UpdateMemberForm +from atst.forms.forms import ValidatedForm from atst.domain.authz import Authorization from atst.models.permissions import Permissions @@ -119,3 +122,29 @@ def create_member(workspace_id): ) else: return render_template("member_new.html", workspace=workspace, form=form) + + +@bp.route("/workspaces//members//member_edit") +def view_member(workspace_id, member_id): + workspace = Workspaces.get(g.current_user, workspace_id) + member = WorkspaceUsers.get(workspace_id, member_id) + form = NewMemberForm(http_request.form) + + return render_template("member_edit.html", form=form, workspace=workspace, member=member) + +@bp.route("/workspaces//members//member_edit", methods=['POST']) +def update_member(workspace_id, member_id): + workspace = Workspaces.get(g.current_user, workspace_id) + member = WorkspaceUsers.get(workspace_id, member_id) + form = UpdateMemberForm(http_request.form) + + if form.validate(): + return redirect( + url_for( + "workspaces.workspace_members", + workspace_id=workspace.id, + ) + ) + else: + return render_template("member_edit.html", form=form, workspace=workspace, member=member) + diff --git a/templates/member_edit.html b/templates/member_edit.html index db52347b..12eb0245 100644 --- a/templates/member_edit.html +++ b/templates/member_edit.html @@ -2,48 +2,44 @@ {% from "components/icon.html" import Icon %} {% from "components/modal.html" import Modal %} +{% from "components/selector.html" import Selector %} {% block content %} -
-
-

Danny Knight

+
+ {{ form.csrf_token }} + +
+
+

Danny Knight

+ +
+ + {{ Selector(form.workspace_role) }} +
-
- -
- +
+
+
+
DOD ID:
+
789
+
+
+
Email:
+
knight@mil.gov
+
+
+ edit account details +
-
-
-
-
DOD ID:
-
789
-
-
-
Email:
-
knight@mil.gov
-
-
- edit account details -
-
-
-
-

Manage Access
Grant access to an environment

+
+
+

Manage Access
Grant access to an environment

+
-
-
@@ -51,174 +47,96 @@ Search
- -{% call Modal(name='rolesModal', dismissable=False) %} -
-
-

- Environment access for Danny Knight -
Project Name - Environment Name
-

-
- -
-
    -
  • - - +
    +
    -{% endcall %} +
    + +
    -
    - -
    +
    + + + {{ Icon('x') }} + Cancel + +
    -
    - -
    - - +
  • diff --git a/templates/workspace_members.html b/templates/workspace_members.html index bf61ea3d..403a0f97 100644 --- a/templates/workspace_members.html +++ b/templates/workspace_members.html @@ -77,10 +77,10 @@ {% for m in workspace.members %} - {{ m['first_name'] }} {{ m['last_name'] }} + {{ m.user_name }} {% if m['num_projects'] == '0' %} No Project Access {% endif %} - {{ m['status'] }} - {{ m['workspace_role'] }} + {{ m.status }} + {{ m.role }} {% endfor %}