~netlandish/links

ec5a47104611711b03d54e8013735742f7e290e7 — Peter Sanchez 27 days ago e035c9b
Showing when an integration is active.

Fixes: https://todo.code.netlandish.com/~netlandish/links/70
3 files changed, 35 insertions(+), 12 deletions(-)

M core/routes.go
M slack/routes.go
M templates/org_integration.html
M core/routes.go => core/routes.go +28 -10
@@ 2684,6 2684,7 @@ func (s *Service) Integrations(c echo.Context) error {
	pd.Data["mm_instruction"] = lt.Translate("As system admin run this command in the channel you want to connect")
	pd.Data["disconnect"] = lt.Translate("Disconnect")
	pd.Data["connect"] = lt.Translate("Connect")
	pd.Data["connected"] = lt.Translate("Connected")
	pd.Data["back"] = lt.Translate("Back")
	var isRestricted bool
	if links.BillingEnabled(gctx.Server.Config) && org.IsRestricted([]int{models.BillingStatusFree}) {


@@ 2692,24 2693,40 @@ func (s *Service) Integrations(c echo.Context) error {

	baseURL := links.GetLinksDomainURL(c)
	baseURL.Path = c.Echo().Reverse("mattermost:manifest", slug)
	opts = &database.FilterOptions{
		Filter: sq.Eq{"o.owner_id": user.ID},
		Limit:  1,
	}

	var mmConn *models.MattermostConnection
	mmConns, err := models.GetMattermostConnections(c.Request().Context(), opts)
	if err != nil {
		return err
	}
	if len(mmConns) > 0 {
		mmConn = mmConns[0]
	if org.MattermostConnID.Valid {
		opts = &database.FilterOptions{
			Filter: sq.Eq{"mc.id": org.MattermostConnID.Int64},
			Limit:  1,
		}
		mmConns, err := models.GetMattermostConnections(c.Request().Context(), opts)
		if err != nil {
			return err
		}
		if len(mmConns) > 0 {
			mmConn = mmConns[0]
		}
	}

	var slConn *models.SlackConnection
	slackURL, err := slack.GetSlackURL(c, org.Slug)
	if err != nil {
		return err
	}
	if org.SlackConnID.Valid {
		opts = &database.FilterOptions{
			Filter: sq.Eq{"sc.id": org.SlackConnID.Int64},
			Limit:  1,
		}
		slConns, err := models.GetSlackConnections(c.Request().Context(), opts)
		if err != nil {
			return err
		}
		if len(slConns) > 0 {
			slConn = slConns[0]
		}
	}

	gmap := gobwebs.Map{
		"org":          org,


@@ 2717,6 2734,7 @@ func (s *Service) Integrations(c echo.Context) error {
		"isRestricted": isRestricted,
		"mmURL":        baseURL.String(),
		"slackURL":     slackURL,
		"slConn":       slConn,
		"mmConn":       mmConn,
	}
	return links.Render(c, http.StatusOK, "org_integration.html", gmap)

M slack/routes.go => slack/routes.go +2 -1
@@ 308,7 308,8 @@ func (s *Service) ConnectSlack(c echo.Context) error {
	}
	org := orgs[0]

	if links.BillingEnabled(gctx.Server.Config) && org.IsRestricted([]int{models.BillingStatusFree, models.BillingStatusFree}) {
	if links.BillingEnabled(gctx.Server.Config) &&
		org.IsRestricted([]int{models.BillingStatusFree}) {
		lt := localizer.GetSessionLocalizer(c)
		messages.Error(c, lt.Translate("Sorry, free accounts do not support Slack Integration. Please upgrade to continue"))
		return c.Redirect(http.StatusMovedPermanently, c.Echo().Reverse("billing:create_subscription", org.Slug))

M templates/org_integration.html => templates/org_integration.html +5 -1
@@ 13,7 13,11 @@
            <tbody>
                <tr>
                    <td><strong>Slack</strong></td>
                    <td><a href="{{.slackURL}}" class="button error" target="_blank">{{$.pd.Data.connect}}</a></td>
		    {{ if .slConn }}
                        <td><a href="{{reverse "slack:slack_disconnect" .slConn.ID}}" class="button error">{{$.pd.Data.disconnect}}</a></td>
		    {{ else }}
                        <td><a href="{{.slackURL}}" class="button error" target="_blank">{{$.pd.Data.connect}}</a></td>
		    {{ end }}
                </tr>
                <tr>
                    <td><strong>Mattermost</strong></td>