diff --git a/data/model.py b/data/model.py index 831e66fd3..05d9ff681 100644 --- a/data/model.py +++ b/data/model.py @@ -326,7 +326,7 @@ def verify_user(username, password): def get_user_organizations(username): UserAlias = User.alias() - all_teams = User.select().join(Team).join(TeamMember) + all_teams = User.select().distinct().join(Team).join(TeamMember) with_user = all_teams.join(UserAlias, on=(UserAlias.id == TeamMember.user)) return with_user.where(User.organization == True, UserAlias.username == username) diff --git a/endpoints/api.py b/endpoints/api.py index 5c2636e47..bd9afc873 100644 --- a/endpoints/api.py +++ b/endpoints/api.py @@ -74,7 +74,8 @@ def get_logged_in_user(): return { 'name': o.username, 'gravatar': compute_hash(o.email), - 'is_org_admin': admin_org.can() + 'is_org_admin': admin_org.can(), + 'can_create_repo': admin_org.can() or CreateRepositoryPermission(o.username).can() } if current_user.is_anonymous(): @@ -90,7 +91,8 @@ def get_logged_in_user(): 'email': user.email, 'gravatar': compute_hash(user.email), 'askForPassword': user.password_hash is None, - 'organizations': [org_view(o) for o in organizations] + 'organizations': [org_view(o) for o in organizations], + 'can_create_repo': True }) diff --git a/endpoints/web.py b/endpoints/web.py index 6596a52ba..9f8712629 100644 --- a/endpoints/web.py +++ b/endpoints/web.py @@ -58,6 +58,11 @@ def guide(): return index('') +@app.route('/organizations/') +@app.route('/organizations/new/') +def organizations(): + return index('') + @app.route('/user/') def user(): return index('') diff --git a/static/css/quay.css b/static/css/quay.css index 0fead2172..5671c1109 100644 --- a/static/css/quay.css +++ b/static/css/quay.css @@ -46,6 +46,26 @@ font-size: 14px; } +.namespace-selector-dropdown .namespace-item { + position: relative; +} + +.namespace-selector-dropdown .namespace-item .fa { + position: absolute; + right: 12px; + top: 12px; + color: #aaa; +} + +.namespace-selector-dropdown .namespace-item.disabled img { + -webkit-filter: grayscale(1); + opacity: 0.5; +} + +.namespace-selector-dropdown .namespace-item .tooltip-inner { + min-width: 200px; +} + .user-notification { background: red; } @@ -930,6 +950,20 @@ p.editable:hover i { margin-bottom: 40px; } +.repo-list .button-bar-right { + float: right; +} + +.repo-list .section-header { + padding: 10px; + border-bottom: 1px solid #eee; + margin-bottom: 10px; +} + +.repo-list .button-bar-right button { + margin-right: 10px; +} + .repo-listing { display: block; margin-bottom: 20px; @@ -1559,6 +1593,24 @@ p.editable:hover i { display: inline-block; } +.org-list h2 { + margin-bottom: 20px; +} + +.org-list .button-bar-right { + text-align: right; +} + +.org-list .organization-listing { + font-size: 18px; + padding: 10px; +} + +.org-list .organization-listing img { + margin-left: 10px; + margin-right: 16px; +} + .plan-manager-element .plans-table thead td { color: #aaa; font-weight: bold; diff --git a/static/directives/namespace-selector.html b/static/directives/namespace-selector.html index bc8abc9a2..98d91394d 100644 --- a/static/directives/namespace-selector.html +++ b/static/directives/namespace-selector.html @@ -10,11 +10,17 @@ {{namespace}} @@ -45,6 +46,7 @@ 1 +
  • Organizations
  • Sign out
  • diff --git a/static/partials/landing.html b/static/partials/landing.html index 5c9962fd0..a57a7f72b 100644 --- a/static/partials/landing.html +++ b/static/partials/landing.html @@ -29,7 +29,7 @@
    Browse all repositories - Create a new repository + Create a new repository
    diff --git a/static/partials/new-organization.html b/static/partials/new-organization.html new file mode 100644 index 000000000..8fd32cd45 --- /dev/null +++ b/static/partials/new-organization.html @@ -0,0 +1 @@ +new org diff --git a/static/partials/new-repo.html b/static/partials/new-repo.html index a8ab2cba5..393d7003c 100644 --- a/static/partials/new-repo.html +++ b/static/partials/new-repo.html @@ -29,7 +29,7 @@
    - + / diff --git a/static/partials/organizations.html b/static/partials/organizations.html new file mode 100644 index 000000000..ec7e66928 --- /dev/null +++ b/static/partials/organizations.html @@ -0,0 +1,71 @@ +
    +
    + +
    + + + + +
    +

    Organizations

    + + +
    + + +
    + +
    +
    +
    Organizations
    +
    + Organizations in Quay provide unique features for businesses and other groups, such as team-based sharing and fine-grain permission controls. +
    +
    +
    + + +
    +
    + +
    +
    +
    Working in teams
    +
    + Organizations are designed for business blah blah blah +
    +
    +
    + +
    +
    + +
    +
    +
    Global and Local Permissions
    +
    + Organizations are designed for business blah blah blah +
    +
    +
    + +
    +
    diff --git a/static/partials/repo-list.html b/static/partials/repo-list.html index 94e381f08..3bb5bfb0c 100644 --- a/static/partials/repo-list.html +++ b/static/partials/repo-list.html @@ -4,14 +4,26 @@
    - - - + -

    Your Repositories

    Repositories

    diff --git a/templates/base.html b/templates/base.html index 3769a7566..9e654bb91 100644 --- a/templates/base.html +++ b/templates/base.html @@ -47,6 +47,7 @@ +