diff --git a/' b/'
new file mode 100644
index 00000000000..61ae44e0aba
--- /dev/null
+++ b/'
@@ -0,0 +1,134 @@
+
+
+.sidemenu {
+ display: flex;
+ flex-flow: column;
+ flex-direction: column;
+ width: $side-menu-width;
+ background-color: $side-menu-bg;
+ z-index: 1;
+
+ a:focus {
+ text-decoration: none;
+ }
+}
+
+.sidemenu__top {
+ flex-grow: 1;
+}
+
+.sidemenu__bottom {
+ padding-bottom: $spacer;
+}
+
+.sidemenu-item {
+ position: relative;
+ @include left-brand-border();
+
+ &.active,
+ &:hover {
+ background-color: $side-menu-item-hover-bg;
+ @include left-brand-border-gradient();
+
+ .dropdown-menu {
+ margin: 0;
+ display: block;
+ opacity: 0;
+ top: 0px;
+ // important to overlap it otherwise it can be hidden
+ // again by the mouse getting outside the hover space
+ left: $side-menu-width - 2px;
+ @include animation('dropdown-anim 100ms ease-in-out 100ms forwards');
+ z-index: 1;
+ }
+ }
+}
+
+.dropup.sidemenu-item:hover .dropdown-menu {
+ top: auto !important;
+}
+
+.sidemenu-link {
+ color: $link-color;
+ line-height: 42px;
+ padding: 0px 10px 0px 10px;
+ display: block;
+ position: relative;
+ font-size: 16px;
+ border: 1px solid transparent;
+
+ img {
+ border-radius: 50%;
+ width: 28px;
+ height: 28px;
+ box-shadow: 0 0 14px 2px rgba(255,255,255, 0.05);
+ }
+}
+
+@include keyframes(dropdown-anim) {
+ 0% {
+ opacity: 0;
+ //transform: translate3d(-5%,0,0);
+ }
+ 100% {
+ opacity: 1;
+ //transform: translate3d(0,0,0);
+ }
+}
+
+.icon-circle {
+ width: 35px;
+ height: 35px;
+ display: inline-block;
+ i {
+ color: $link-color;
+ opacity: .7;
+ position: relative;
+ left: 3px;
+ font-size: 130%;
+ }
+
+ .fa {
+ top: 2px;
+ }
+
+ .icon-gf {
+ top: 5px;
+ }
+
+ img {
+ left: 3px;
+ position: relative;
+ }
+}
+
+.side-menu-header {
+ padding: 10px 10px 10px 20px;
+ white-space: nowrap;
+ background-color: $side-menu-item-hover-bg;
+ font-size: 17px;
+}
+
+li.sidemenu-org-switcher {
+ border-bottom: 1px solid $dropdownDividerBottom;
+}
+
+.sidemenu-org-switcher__org-name {
+ font-size: $font-size-base;
+}
+
+.sidemenu-org-switcher__org-current {
+ font-size: $font-size-xs;
+ color: $text-color-weak;
+}
+
+.sidemenu-org-switcher__switch {
+ font-size: $font-size-sm;
+ padding-left: 1.5rem;
+ display: flex;
+ align-items: center;
+ i.fa > {
+ margin-right: 5px;
+ top: 0;
+ }
+}
diff --git a/pkg/api/dtos/models.go b/pkg/api/dtos/models.go
index d1c346e9539..b155858c58c 100644
--- a/pkg/api/dtos/models.go
+++ b/pkg/api/dtos/models.go
@@ -27,6 +27,7 @@ type CurrentUser struct {
Email string `json:"email"`
Name string `json:"name"`
LightTheme bool `json:"lightTheme"`
+ OrgCount int `json:"orgCount"`
OrgId int64 `json:"orgId"`
OrgName string `json:"orgName"`
OrgRole m.RoleType `json:"orgRole"`
diff --git a/pkg/api/frontendsettings.go b/pkg/api/frontendsettings.go
index 2693d5f9683..53d72d411ef 100644
--- a/pkg/api/frontendsettings.go
+++ b/pkg/api/frontendsettings.go
@@ -141,7 +141,6 @@ func getFrontendSettingsMap(c *middleware.Context) (map[string]interface{}, erro
"alertingEnabled": setting.AlertingEnabled,
"googleAnalyticsId": setting.GoogleAnalyticsId,
"disableLoginForm": setting.DisableLoginForm,
- "disableSignoutMenu": setting.DisableSignoutMenu,
"externalUserMngInfo": setting.ExternalUserMngInfo,
"externalUserMngLinkUrl": setting.ExternalUserMngLinkUrl,
"externalUserMngLinkName": setting.ExternalUserMngLinkName,
diff --git a/pkg/api/index.go b/pkg/api/index.go
index da696df1210..23ba7aedc23 100644
--- a/pkg/api/index.go
+++ b/pkg/api/index.go
@@ -50,6 +50,7 @@ func setIndexViewData(c *middleware.Context) (*dtos.IndexViewData, error) {
Login: c.Login,
Email: c.Email,
Name: c.Name,
+ OrgCount: c.OrgCount,
OrgId: c.OrgId,
OrgName: c.OrgName,
OrgRole: c.OrgRole,
@@ -86,9 +87,9 @@ func setIndexViewData(c *middleware.Context) (*dtos.IndexViewData, error) {
if c.OrgRole == m.ROLE_ADMIN || c.OrgRole == m.ROLE_EDITOR {
data.NavTree = append(data.NavTree, &dtos.NavLink{
- Text: "New",
+ Text: "Create",
Icon: "fa fa-fw fa-plus",
- Url: "",
+ Url: "#",
Children: []*dtos.NavLink{
{Text: "Dashboard", Icon: "fa fa-fw fa-plus", Url: setting.AppSubUrl + "/dashboard/new"},
{Text: "Folder", Icon: "fa fa-fw fa-plus", Url: setting.AppSubUrl + "/dashboard/new/?editview=new-folder"},
@@ -112,17 +113,33 @@ func setIndexViewData(c *middleware.Context) (*dtos.IndexViewData, error) {
})
if c.IsSignedIn {
- data.NavTree = append(data.NavTree, &dtos.NavLink{
+ profileNode := &dtos.NavLink{
Text: c.SignedInUser.Login,
Id: "profile",
Img: data.User.GravatarUrl,
Url: setting.AppSubUrl + "/profile",
HideFromMenu: true,
Children: []*dtos.NavLink{
- {Text: "Signout", Url: setting.AppSubUrl + "/logout", Icon: "fa fa-fw fa-sign-out", Target: "_self"},
{Text: "Your profile", Url: setting.AppSubUrl + "/profile", Icon: "fa fa-fw fa-sliders"},
{Text: "Change Password", Id: "change-password", Url: setting.AppSubUrl + "/profile/password", Icon: "fa fa-fw fa-lock", HideFromMenu: true},
},
+ }
+
+ if !setting.DisableSignoutMenu {
+ // add sign out first
+ profileNode.Children = append([]*dtos.NavLink{
+ {Text: "Sign out", Url: setting.AppSubUrl + "/logout", Icon: "fa fa-fw fa-sign-out", Target: "_self"},
+ }, profileNode.Children...)
+ }
+
+ data.NavTree = append(data.NavTree, profileNode)
+ } else {
+ data.NavTree = append(data.NavTree, &dtos.NavLink{
+ Text: "Sign in",
+ Id: "sign-in",
+ Icon: "fa fa-fw fa-sign-in",
+ Url: setting.AppSubUrl + "/login",
+ HideFromMenu: true,
})
}
@@ -226,7 +243,7 @@ func setIndexViewData(c *middleware.Context) (*dtos.IndexViewData, error) {
},
},
{
- Text: "User Management",
+ Text: "Users",
Id: "users",
Description: "Manage users & user groups",
Icon: "fa fa-fw fa-users",
@@ -258,21 +275,22 @@ func setIndexViewData(c *middleware.Context) (*dtos.IndexViewData, error) {
})
}
- data.NavTree = append(data.NavTree, &dtos.NavLink{
- Text: "Help",
- Id: "help",
- Url: "/help",
- Icon: "fa fa-fw fa-question",
- HideFromMenu: true,
- Children: []*dtos.NavLink{
- {Text: "Shortcuts", Url: "/shortcuts", Icon: "fa fa-fw fa-keyboard-o", Target: "_self"},
- {Text: "Community site", Url: "http://community.grafana.com", Icon: "fa fa-fw fa-comment", Target: "_blank"},
- {Text: "Documentation", Url: "http://docs.grafana.org", Icon: "fa fa-fw fa-file", Target: "_blank"},
- },
- })
data.NavTree = append(data.NavTree, cfgNode)
}
+ data.NavTree = append(data.NavTree, &dtos.NavLink{
+ Text: "Help",
+ Id: "help",
+ Url: "#",
+ Icon: "fa fa-fw fa-question",
+ HideFromMenu: true,
+ Children: []*dtos.NavLink{
+ {Text: "Keyboard shortcuts", Url: "/shortcuts", Icon: "fa fa-fw fa-keyboard-o", Target: "_self"},
+ {Text: "Community site", Url: "http://community.grafana.com", Icon: "fa fa-fw fa-comment", Target: "_blank"},
+ {Text: "Documentation", Url: "http://docs.grafana.org", Icon: "fa fa-fw fa-file", Target: "_blank"},
+ },
+ })
+
return &data, nil
}
diff --git a/pkg/models/user.go b/pkg/models/user.go
index 805bac2628f..bb12bc0038d 100644
--- a/pkg/models/user.go
+++ b/pkg/models/user.go
@@ -160,6 +160,7 @@ type SignedInUser struct {
Name string
Email string
ApiKeyId int64
+ OrgCount int
IsGrafanaAdmin bool
HelpFlags1 HelpFlags1
LastSeenAt time.Time
diff --git a/pkg/services/sqlstore/user.go b/pkg/services/sqlstore/user.go
index 14f9ddb08c6..00eb0c4bc6b 100644
--- a/pkg/services/sqlstore/user.go
+++ b/pkg/services/sqlstore/user.go
@@ -350,6 +350,7 @@ func GetSignedInUser(query *m.GetSignedInUserQuery) error {
u.name as name,
u.help_flags1 as help_flags1,
u.last_seen_at as last_seen_at,
+ (SELECT COUNT(*) FROM org_user where org_user.user_id = u.id) as org_count,
org.name as org_name,
org_user.role as org_role,
org.id as org_id
diff --git a/public/app/core/components/navbar/navbar.ts b/public/app/core/components/navbar/navbar.ts
index 1106cd13903..3f576617e31 100644
--- a/public/app/core/components/navbar/navbar.ts
+++ b/public/app/core/components/navbar/navbar.ts
@@ -11,7 +11,6 @@ export class NavbarCtrl {
/** @ngInject */
constructor(private $scope, private $rootScope, private contextSrv) {
- console.log(this.model);
}
showSearch() {
diff --git a/public/app/core/components/sidemenu/sidemenu.html b/public/app/core/components/sidemenu/sidemenu.html
index fd8d1e28da6..6dd08687743 100644
--- a/public/app/core/components/sidemenu/sidemenu.html
+++ b/public/app/core/components/sidemenu/sidemenu.html
@@ -36,7 +36,16 @@
-