summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.md2
-rw-r--r--STYLE-GUIDE.md14
-rw-r--r--api/file.go1
-rw-r--r--api/post_test.go4
-rw-r--r--api/team.go2
-rw-r--r--model/post.go4
-rw-r--r--store/sql_channel_store.go3
-rw-r--r--store/sql_post_store.go16
-rw-r--r--store/sql_post_store_test.go2
-rw-r--r--store/sql_store.go148
-rw-r--r--store/sql_team_store.go10
-rw-r--r--store/sql_user_store.go28
-rw-r--r--web/react/components/sidebar_right_menu.jsx7
-rw-r--r--web/react/components/team_import_tab.jsx10
-rw-r--r--web/react/components/team_signup_password_page.jsx38
-rw-r--r--web/react/utils/utils.jsx1
-rw-r--r--web/static/css/google-fonts.css168
-rw-r--r--web/static/fonts/59ZRklaO5bWGqF5A9baEERJtnKITppOI_IvcXXDNrsc.woff2bin5740 -> 0 bytes
-rw-r--r--web/static/fonts/K88pR3goAWT7BTt32Z01mxJtnKITppOI_IvcXXDNrsc.woff2bin16868 -> 0 bytes
-rw-r--r--web/static/fonts/LWCjsQkB6EMdfHrEVqA1KRJtnKITppOI_IvcXXDNrsc.woff2bin2332 -> 0 bytes
-rw-r--r--web/static/fonts/MTP_ySUJH_bn48VBG8sNShWV49_lSm1NYrwo-zkhivY.woff2bin2332 -> 0 bytes
-rw-r--r--web/static/fonts/MTP_ySUJH_bn48VBG8sNSj0LW-43aMEzIO6XUTLjad8.woff2bin12692 -> 0 bytes
-rw-r--r--web/static/fonts/MTP_ySUJH_bn48VBG8sNSpX5f-9o1vgP2EXwfjgl7AY.woff2bin9896 -> 0 bytes
-rw-r--r--web/static/fonts/MTP_ySUJH_bn48VBG8sNSq-j2U0lmluP9RWlSytm3ho.woff2bin17608 -> 0 bytes
-rw-r--r--web/static/fonts/MTP_ySUJH_bn48VBG8sNSqaRobkAwv3vxw3jMhVENGA.woff2bin8380 -> 0 bytes
-rw-r--r--web/static/fonts/MTP_ySUJH_bn48VBG8sNSugdm0LZdjqr5-oayXSOefg.woff2bin16164 -> 0 bytes
-rw-r--r--web/static/fonts/MTP_ySUJH_bn48VBG8sNSv8zf_FOSsgRmwsS7Aa9k2w.woff2bin5916 -> 0 bytes
-rw-r--r--web/static/fonts/RjgO7rYTmqiVp7vzi-Q5URJtnKITppOI_IvcXXDNrsc.woff2bin9676 -> 0 bytes
-rw-r--r--web/static/fonts/cJZKeOuBrn4kERxqtaUH3VtXRa8TVwTICgirnJhmVJw.woff2bin15572 -> 0 bytes
-rw-r--r--web/static/fonts/k3k702ZOKiLJc3WVjuplzBWV49_lSm1NYrwo-zkhivY.woff2bin2332 -> 0 bytes
-rw-r--r--web/static/fonts/k3k702ZOKiLJc3WVjuplzD0LW-43aMEzIO6XUTLjad8.woff2bin12640 -> 0 bytes
-rw-r--r--web/static/fonts/k3k702ZOKiLJc3WVjuplzJX5f-9o1vgP2EXwfjgl7AY.woff2bin9848 -> 0 bytes
-rw-r--r--web/static/fonts/k3k702ZOKiLJc3WVjuplzK-j2U0lmluP9RWlSytm3ho.woff2bin17880 -> 0 bytes
-rw-r--r--web/static/fonts/k3k702ZOKiLJc3WVjuplzKaRobkAwv3vxw3jMhVENGA.woff2bin8528 -> 0 bytes
-rw-r--r--web/static/fonts/k3k702ZOKiLJc3WVjuplzOgdm0LZdjqr5-oayXSOefg.woff2bin16276 -> 0 bytes
-rw-r--r--web/static/fonts/k3k702ZOKiLJc3WVjuplzP8zf_FOSsgRmwsS7Aa9k2w.woff2bin5832 -> 0 bytes
-rw-r--r--web/static/fonts/u-WUoqrET9fUeobQW7jkRRJtnKITppOI_IvcXXDNrsc.woff2bin12288 -> 0 bytes
-rw-r--r--web/static/fonts/xozscpT2726on7jbcb_pAhJtnKITppOI_IvcXXDNrsc.woff2bin8160 -> 0 bytes
-rw-r--r--web/templates/head.html2
39 files changed, 142 insertions, 318 deletions
diff --git a/README.md b/README.md
index 9d8e5dfd3..1dd9620d6 100644
--- a/README.md
+++ b/README.md
@@ -205,7 +205,7 @@ Contributing
To contribute to this open source project please review the [Mattermost Contribution Guidelines]( http://www.mattermost.org/contribute-to-mattermost/).
-To setup your machine for development of mattermost see: [Developer Machine Setup](scripts/README_DEV.md)
+To setup your machine for development of mattermost see: [Developer Machine Setup](scripts/README_DEV.md).
License
-------
diff --git a/STYLE-GUIDE.md b/STYLE-GUIDE.md
index 0da0a14f8..470788cf5 100644
--- a/STYLE-GUIDE.md
+++ b/STYLE-GUIDE.md
@@ -22,8 +22,8 @@ The following is an abridged version of the [Airbnb Javascript Style Guide](http
### Whitespace
-- Indentation is four spaces
-- Use a space before the leading brace
+- Indentation is four spaces.
+- Use a space before the leading brace.
- Use one space between the comma and the next argument in a bracketed list. No other space.
- Use whitespace to make code more readable.
- Do not use more than one newline to separate code blocks.
@@ -49,7 +49,7 @@ function myFunction ( parm1, parm2 ){
### Semicolons
-- You must use them always
+- You must use them always.
```javascript
// Correct
@@ -85,14 +85,14 @@ var my_variable = 4;
```javascript
// Correct
-if (somthing) {
+if (something) {
stuff...;
} else if (otherthing) {
stuff...;
}
// Incorrect
-if (somthing)
+if (something)
{
stuff...;
}
@@ -102,8 +102,8 @@ else
}
// Incorrect
-if (somthing) stuff...;
-if (somthing)
+if (something) stuff...;
+if (something)
stuff...;
```
diff --git a/api/file.go b/api/file.go
index 50482a057..800c512c5 100644
--- a/api/file.go
+++ b/api/file.go
@@ -347,6 +347,7 @@ func getFile(c *Context, w http.ResponseWriter, r *http.Request) {
}
w.Header().Set("Cache-Control", "max-age=2592000, public")
+ w.Header().Set("Content-Length", strconv.Itoa(len(f)))
w.Write(f)
}
diff --git a/api/post_test.go b/api/post_test.go
index ac9adf358..85d92de3a 100644
--- a/api/post_test.go
+++ b/api/post_test.go
@@ -331,7 +331,7 @@ func TestGetPosts(t *testing.T) {
t.Fatal("wrong order")
}
- if len(r1.Posts) != 4 {
+ if len(r1.Posts) != 2 { // 3a1 and 3; 3a1's parent already there
t.Fatal("wrong size")
}
@@ -345,7 +345,7 @@ func TestGetPosts(t *testing.T) {
t.Fatal("wrong order")
}
- if len(r2.Posts) != 4 {
+ if len(r2.Posts) != 3 { // 2 and 1a1; + 1a1's parent
t.Log(r2.Posts)
t.Fatal("wrong size")
}
diff --git a/api/team.go b/api/team.go
index d123b7dfa..e34b3a610 100644
--- a/api/team.go
+++ b/api/team.go
@@ -268,7 +268,7 @@ func createTeam(c *Context, w http.ResponseWriter, r *http.Request) {
rteam := result.Data.(*model.Team)
if _, err := CreateDefaultChannels(c, rteam.Id); err != nil {
- c.Err = nil
+ c.Err = err
return
}
diff --git a/model/post.go b/model/post.go
index f8a3032a3..0c035d4e7 100644
--- a/model/post.go
+++ b/model/post.go
@@ -120,9 +120,7 @@ func (o *Post) PreSave() {
o.OriginalId = ""
- if o.CreateAt <= 0 {
- o.CreateAt = GetMillis()
- }
+ o.CreateAt = GetMillis()
o.UpdateAt = o.CreateAt
if o.Props == nil {
diff --git a/store/sql_channel_store.go b/store/sql_channel_store.go
index d503d2225..d2e3943df 100644
--- a/store/sql_channel_store.go
+++ b/store/sql_channel_store.go
@@ -37,8 +37,7 @@ func NewSqlChannelStore(sqlStore *SqlStore) ChannelStore {
}
func (s SqlChannelStore) UpgradeSchemaIfNeeded() {
- s.CreateColumnIfNotExists("Channels", "ExtraUpdateAt", "TotalMsgCount", "bigint(20)", "0")
- s.CreateColumnIfNotExists("Channels", "CreatorId", "ExtraUpdateAt", "varchar(26)", "")
+ s.CreateColumnIfNotExists("Channels", "CreatorId", "varchar(26)", "character varying(26)", "")
}
func (s SqlChannelStore) CreateIndexesIfNotExists() {
diff --git a/store/sql_post_store.go b/store/sql_post_store.go
index 4ea28507b..cd668b13c 100644
--- a/store/sql_post_store.go
+++ b/store/sql_post_store.go
@@ -35,11 +35,6 @@ func NewSqlPostStore(sqlStore *SqlStore) PostStore {
}
func (s SqlPostStore) UpgradeSchemaIfNeeded() {
-
- // These execs are for upgrading currently created databases to full utf8mb4 compliance
- // Will be removed as seen fit for upgrading
- s.GetMaster().Exec("ALTER TABLE Posts charset=utf8mb4")
- s.GetMaster().Exec("ALTER TABLE Posts MODIFY COLUMN Message varchar(4000) CHARACTER SET utf8mb4")
}
func (s SqlPostStore) CreateIndexesIfNotExists() {
@@ -291,7 +286,7 @@ func (s SqlPostStore) GetPostsSince(channelId string, time int64) StoreChannel {
WHERE
(UpdateAt > :Time
AND ChannelId = :ChannelId)
- LIMIT 100)
+ LIMIT 1000)
UNION
(SELECT
*
@@ -307,7 +302,7 @@ func (s SqlPostStore) GetPostsSince(channelId string, time int64) StoreChannel {
WHERE
UpdateAt > :Time
AND ChannelId = :ChannelId
- LIMIT 100) temp_tab))
+ LIMIT 1000) temp_tab))
ORDER BY CreateAt DESC`,
map[string]interface{}{"ChannelId": channelId, "Time": time})
@@ -319,7 +314,9 @@ func (s SqlPostStore) GetPostsSince(channelId string, time int64) StoreChannel {
for _, p := range posts {
list.AddPost(p)
- list.AddOrder(p.Id)
+ if p.UpdateAt > time {
+ list.AddOrder(p.Id)
+ }
}
result.Data = list
@@ -377,7 +374,8 @@ func (s SqlPostStore) getParentsPosts(channelId string, offset int, limit int) S
ChannelId = :ChannelId1
AND DeleteAt = 0
ORDER BY CreateAt DESC
- LIMIT :Limit OFFSET :Offset) q3) q1 ON q1.RootId = q2.RootId
+ LIMIT :Limit OFFSET :Offset) q3
+ WHERE q3.RootId != '') q1 ON q1.RootId = q2.Id
WHERE
ChannelId = :ChannelId2
AND DeleteAt = 0
diff --git a/store/sql_post_store_test.go b/store/sql_post_store_test.go
index 8854fb5c4..4564e2deb 100644
--- a/store/sql_post_store_test.go
+++ b/store/sql_post_store_test.go
@@ -374,7 +374,7 @@ func TestPostStoreGetPostsWtihDetails(t *testing.T) {
t.Fatal("invalid order")
}
- if len(r1.Posts) != 6 {
+ if len(r1.Posts) != 5 { //the last 4, + o1 (o3 and o2a's parent)
t.Fatal("wrong size")
}
diff --git a/store/sql_store.go b/store/sql_store.go
index 0d4f76a72..98c67d668 100644
--- a/store/sql_store.go
+++ b/store/sql_store.go
@@ -123,13 +123,29 @@ func setupConnection(con_type string, driver string, dataSource string, maxIdle
}
func (ss SqlStore) DoesColumnExist(tableName string, columnName string) bool {
- // XXX TODO FIXME this should be removed after 0.6.0
if utils.Cfg.SqlSettings.DriverName == "postgres" {
- return false
- }
+ count, err := ss.GetMaster().SelectInt(
+ `SELECT COUNT(0)
+ FROM pg_attribute
+ WHERE attrelid = $1::regclass
+ AND attname = $2
+ AND NOT attisdropped`,
+ strings.ToLower(tableName),
+ strings.ToLower(columnName),
+ )
+
+ if err != nil {
+ l4g.Critical("Failed to check if column exists %v", err)
+ time.Sleep(time.Second)
+ panic("Failed to check if column exists " + err.Error())
+ }
+
+ return count > 0
- count, err := ss.GetMaster().SelectInt(
- `SELECT
+ } else if utils.Cfg.SqlSettings.DriverName == "mysql" {
+
+ count, err := ss.GetMaster().SelectInt(
+ `SELECT
COUNT(0) AS column_exists
FROM
information_schema.COLUMNS
@@ -137,81 +153,101 @@ func (ss SqlStore) DoesColumnExist(tableName string, columnName string) bool {
TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = ?
AND COLUMN_NAME = ?`,
- tableName,
- columnName,
- )
- if err != nil {
- l4g.Critical("Failed to check if column exists %v", err)
+ tableName,
+ columnName,
+ )
+
+ if err != nil {
+ l4g.Critical("Failed to check if column exists %v", err)
+ time.Sleep(time.Second)
+ panic("Failed to check if column exists " + err.Error())
+ }
+
+ return count > 0
+
+ } else {
+ l4g.Critical("Failed to check if column exists because of missing driver")
time.Sleep(time.Second)
- panic("Failed to check if column exists " + err.Error())
+ panic("Failed to check if column exists because of missing driver")
}
- return count > 0
}
-func (ss SqlStore) CreateColumnIfNotExists(tableName string, columnName string, afterName string, colType string, defaultValue string) bool {
-
- // XXX TODO FIXME this should be removed after 0.6.0
- if utils.Cfg.SqlSettings.DriverName == "postgres" {
- return false
- }
+func (ss SqlStore) CreateColumnIfNotExists(tableName string, columnName string, mySqlColType string, postgresColType string, defaultValue string) bool {
if ss.DoesColumnExist(tableName, columnName) {
return false
}
- _, err := ss.GetMaster().Exec("ALTER TABLE " + tableName + " ADD " + columnName + " " + colType + " DEFAULT '" + defaultValue + "'" + " AFTER " + afterName)
- if err != nil {
- l4g.Critical("Failed to create column %v", err)
+ if utils.Cfg.SqlSettings.DriverName == "postgres" {
+ _, err := ss.GetMaster().Exec("ALTER TABLE " + tableName + " ADD " + columnName + " " + postgresColType + " DEFAULT '" + defaultValue + "'")
+ if err != nil {
+ l4g.Critical("Failed to create column %v", err)
+ time.Sleep(time.Second)
+ panic("Failed to create column " + err.Error())
+ }
+
+ return true
+
+ } else if utils.Cfg.SqlSettings.DriverName == "mysql" {
+ _, err := ss.GetMaster().Exec("ALTER TABLE " + tableName + " ADD " + columnName + " " + mySqlColType + " DEFAULT '" + defaultValue + "'")
+ if err != nil {
+ l4g.Critical("Failed to create column %v", err)
+ time.Sleep(time.Second)
+ panic("Failed to create column " + err.Error())
+ }
+
+ return true
+
+ } else {
+ l4g.Critical("Failed to create column because of missing driver")
time.Sleep(time.Second)
- panic("Failed to create column " + err.Error())
+ panic("Failed to create column because of missing driver")
}
-
- return true
}
-func (ss SqlStore) RemoveColumnIfExists(tableName string, columnName string) bool {
+// func (ss SqlStore) RemoveColumnIfExists(tableName string, columnName string) bool {
- // XXX TODO FIXME this should be removed after 0.6.0
- if utils.Cfg.SqlSettings.DriverName == "postgres" {
- return false
- }
+// // XXX TODO FIXME this should be removed after 0.6.0
+// if utils.Cfg.SqlSettings.DriverName == "postgres" {
+// return false
+// }
- if !ss.DoesColumnExist(tableName, columnName) {
- return false
- }
+// if !ss.DoesColumnExist(tableName, columnName) {
+// return false
+// }
- _, err := ss.GetMaster().Exec("ALTER TABLE " + tableName + " DROP COLUMN " + columnName)
- if err != nil {
- l4g.Critical("Failed to drop column %v", err)
- time.Sleep(time.Second)
- panic("Failed to drop column " + err.Error())
- }
+// _, err := ss.GetMaster().Exec("ALTER TABLE " + tableName + " DROP COLUMN " + columnName)
+// if err != nil {
+// l4g.Critical("Failed to drop column %v", err)
+// time.Sleep(time.Second)
+// panic("Failed to drop column " + err.Error())
+// }
- return true
-}
+// return true
+// }
-func (ss SqlStore) RenameColumnIfExists(tableName string, oldColumnName string, newColumnName string, colType string) bool {
+// func (ss SqlStore) RenameColumnIfExists(tableName string, oldColumnName string, newColumnName string, colType string) bool {
- // XXX TODO FIXME this should be removed after 0.6.0
- if utils.Cfg.SqlSettings.DriverName == "postgres" {
- return false
- }
+// // XXX TODO FIXME this should be removed after 0.6.0
+// if utils.Cfg.SqlSettings.DriverName == "postgres" {
+// return false
+// }
- if !ss.DoesColumnExist(tableName, oldColumnName) {
- return false
- }
+// if !ss.DoesColumnExist(tableName, oldColumnName) {
+// return false
+// }
- _, err := ss.GetMaster().Exec("ALTER TABLE " + tableName + " CHANGE " + oldColumnName + " " + newColumnName + " " + colType)
+// _, err := ss.GetMaster().Exec("ALTER TABLE " + tableName + " CHANGE " + oldColumnName + " " + newColumnName + " " + colType)
- if err != nil {
- l4g.Critical("Failed to rename column %v", err)
- time.Sleep(time.Second)
- panic("Failed to drop column " + err.Error())
- }
+// if err != nil {
+// l4g.Critical("Failed to rename column %v", err)
+// time.Sleep(time.Second)
+// panic("Failed to drop column " + err.Error())
+// }
- return true
-}
+// return true
+// }
func (ss SqlStore) CreateIndexIfNotExists(indexName string, tableName string, columnName string) {
ss.createIndexIfNotExists(indexName, tableName, columnName, false)
diff --git a/store/sql_team_store.go b/store/sql_team_store.go
index 7b0be0540..2784f8630 100644
--- a/store/sql_team_store.go
+++ b/store/sql_team_store.go
@@ -5,7 +5,6 @@ package store
import (
"github.com/mattermost/platform/model"
- "github.com/mattermost/platform/utils"
)
type SqlTeamStore struct {
@@ -29,15 +28,6 @@ func NewSqlTeamStore(sqlStore *SqlStore) TeamStore {
}
func (s SqlTeamStore) UpgradeSchemaIfNeeded() {
- defaultValue := "0"
- if utils.Cfg.TeamSettings.AllowValetDefault {
- defaultValue = "1"
- }
- s.CreateColumnIfNotExists("Teams", "AllowValet", "AllowedDomains", "tinyint(1)", defaultValue)
- if !s.DoesColumnExist("Teams", "DisplayName") {
- s.RenameColumnIfExists("Teams", "Name", "DisplayName", "varchar(64)")
- s.RenameColumnIfExists("Teams", "Domain", "Name", "varchar(64)")
- }
}
func (s SqlTeamStore) CreateIndexesIfNotExists() {
diff --git a/store/sql_user_store.go b/store/sql_user_store.go
index 4b1189c2e..64a18545a 100644
--- a/store/sql_user_store.go
+++ b/store/sql_user_store.go
@@ -5,9 +5,9 @@ package store
import (
"fmt"
- "strings"
"github.com/mattermost/platform/model"
"github.com/mattermost/platform/utils"
+ "strings"
)
type SqlUserStore struct {
@@ -40,32 +40,8 @@ func NewSqlUserStore(sqlStore *SqlStore) UserStore {
}
func (us SqlUserStore) UpgradeSchemaIfNeeded() {
- us.CreateColumnIfNotExists("Users", "LastPictureUpdate", "LastPasswordUpdate", "bigint(20)", "0")
-
- // migrating the FullName column to Nickname and adding the FirstName and LastName columns for MM-825
- if us.RenameColumnIfExists("Users", "FullName", "Nickname", "varchar(64)") {
- us.CreateColumnIfNotExists("Users", "FirstName", "Nickname", "varchar(64)", "")
- us.CreateColumnIfNotExists("Users", "LastName", "FirstName", "varchar(64)", "")
-
- // infer values of first and last name by splitting the previous full name
- if _, err := us.GetMaster().Exec("UPDATE Users SET FirstName = SUBSTRING_INDEX(SUBSTRING_INDEX(Nickname, ' ', 1), ' ', -1)"); err != nil {
- panic("Failed to set first name from nickname " + err.Error())
- }
-
- // only set the last name from full names that are comprised of multiple words (ie that have at least one space in them)
- if _, err := us.GetMaster().Exec("Update Users SET LastName = SUBSTRING(Nickname, INSTR(Nickname, ' ') + 1) " +
- "WHERE CHAR_LENGTH(REPLACE(Nickname, ' ', '')) < CHAR_LENGTH(Nickname)"); err != nil {
- panic("Failed to set last name from nickname " + err.Error())
- }
- }
-
- us.CreateColumnIfNotExists("Users", "AuthService", "AuthData", "varchar(32)", "") // for OAuth Client
-
- us.CreateColumnIfNotExists("Users", "FailedAttempts", "LastPictureUpdate", "int(11)", "0")
}
-//func (ss SqlStore) CreateColumnIfNotExists(tableName string, columnName string, afterName string, colType string, defaultValue string) bool {
-
func (us SqlUserStore) CreateIndexesIfNotExists() {
us.CreateIndexIfNotExists("idx_users_team_id", "Users", "TeamId")
us.CreateIndexIfNotExists("idx_users_email", "Users", "Email")
@@ -168,7 +144,7 @@ func (us SqlUserStore) Update(user *model.User, allowActiveUpdate bool) StoreCha
nonUsernameKeys := []string{}
splitKeys := strings.Split(user.NotifyProps["mention_keys"], ",")
for _, key := range splitKeys {
- if key != oldUser.Username && key != "@" + oldUser.Username {
+ if key != oldUser.Username && key != "@"+oldUser.Username {
nonUsernameKeys = append(nonUsernameKeys, key)
}
}
diff --git a/web/react/components/sidebar_right_menu.jsx b/web/react/components/sidebar_right_menu.jsx
index d221ca840..615bc4ef2 100644
--- a/web/react/components/sidebar_right_menu.jsx
+++ b/web/react/components/sidebar_right_menu.jsx
@@ -15,7 +15,6 @@ module.exports = React.createClass({
var inviteLink = '';
var teamSettingsLink = '';
var manageLink = '';
- var renameLink = '';
var currentUser = UserStore.getCurrentUser();
var isAdmin = false;
@@ -48,11 +47,6 @@ module.exports = React.createClass({
<a href='#' data-toggle='modal' data-target='#team_members'><i className='glyphicon glyphicon-wrench'></i>Manage Team</a>
</li>
);
- renameLink = (
- <li>
- <a href='#' data-toggle='modal' data-target='#rename_team_link'><i className='glyphicon glyphicon-pencil'></i>Rename</a>
- </li>
- );
}
var siteName = '';
@@ -77,7 +71,6 @@ module.exports = React.createClass({
{inviteLink}
{teamLink}
{manageLink}
- {renameLink}
<li><a href='#' onClick={this.handleLogoutClick}><i className='glyphicon glyphicon-log-out'></i>Logout</a></li>
<li className='divider'></li>
<li><a target='_blank' href='/static/help/configure_links.html'><i className='glyphicon glyphicon-question-sign'></i>Help</a></li>
diff --git a/web/react/components/team_import_tab.jsx b/web/react/components/team_import_tab.jsx
index ecb3491b0..e3415d7f4 100644
--- a/web/react/components/team_import_tab.jsx
+++ b/web/react/components/team_import_tab.jsx
@@ -23,12 +23,10 @@ module.exports = React.createClass({
var uploadHelpText = (
<div>
<br/>
- Slack does now allow you to export any of your files or images stored in slack. Private channels and direct message channels are also not exported. Therefore, no files, images, or private channels will be imported.
- <br/>
- Slack bot posts are not imported.
- <br/>
- Unable to import Slack channels that are not valid Mattermost channels. (ex underscores)
- <br/>
+ Slack does not allow you to export files, images, private groups or direct messages stored in Slack. Therefore, Slack import to Mattermost only supports importing of text messages in your Slack team's public channels.
+ <br/><br/>
+ The Slack import to Mattermost is in "Preview". Slack bot posts and channels with underscores do not yet import.
+ <br/><br/>
</div>
);
var uploadSection = (
diff --git a/web/react/components/team_signup_password_page.jsx b/web/react/components/team_signup_password_page.jsx
index e4f35f100..bbe82a5c2 100644
--- a/web/react/components/team_signup_password_page.jsx
+++ b/web/react/components/team_signup_password_page.jsx
@@ -31,31 +31,35 @@ module.exports = React.createClass({
teamSignup.user.allow_marketing = true;
delete teamSignup.wizard;
- // var ctl = this;
-
client.createTeamFromSignup(teamSignup,
function success() {
client.track('signup', 'signup_team_08_complete');
var props = this.props;
- $('#sign-up-button').button('reset');
- props.state.wizard = 'finished';
- props.updateParent(props.state, true);
+
+ client.loginByEmail(teamSignup.team.name, teamSignup.team.email, teamSignup.user.password,
+ function(data) {
+ UserStore.setLastEmail(teamSignup.team.email);
+ UserStore.setCurrentUser(teamSignup.user);
+ if (this.props.hash > 0) {
+ BrowserStore.setGlobalItem(this.props.hash, JSON.stringify({wizard: 'finished'}));
+ }
- window.location.href = utils.getWindowLocationOrigin() + '/' + props.state.team.name + '/login?email=' + encodeURIComponent(teamSignup.team.email);
+ $('#sign-up-button').button('reset');
+ props.state.wizard = 'finished';
+ props.updateParent(props.state, true);
- // client.loginByEmail(teamSignup.team.domain, teamSignup.team.email, teamSignup.user.password,
- // function(data) {
- // TeamStore.setLastName(teamSignup.team.domain);
- // UserStore.setLastEmail(teamSignup.team.email);
- // UserStore.setCurrentUser(data);
- // window.location.href = '/channels/town-square';
- // }.bind(ctl),
- // function(err) {
- // this.setState({nameError: err.message});
- // }.bind(ctl)
- // );
+ window.location.href = '/';
+ }.bind(this),
+ function(err) {
+ if (err.message === 'Login failed because email address has not been verified') {
+ window.location.href = '/verify_email?email=' + encodeURIComponent(teamSignup.team.email) + '&teamname=' + encodeURIComponent(teamSignup.team.name);
+ } else {
+ this.setState({serverError: err.message});
+ }
+ }.bind(this)
+ );
}.bind(this),
function error(err) {
this.setState({serverError: err.message});
diff --git a/web/react/utils/utils.jsx b/web/react/utils/utils.jsx
index f0cf17446..34a0d55da 100644
--- a/web/react/utils/utils.jsx
+++ b/web/react/utils/utils.jsx
@@ -289,7 +289,6 @@ function getYoutubeEmbed(link) {
$('.video-uploader.' + youtubeId).html(metadata.channelTitle);
$('.video-title.' + youtubeId).find('a').html(metadata.title);
$('.post-list-holder-by-time').scrollTop($('.post-list-holder-by-time')[0].scrollHeight);
- $('.post-list-holder-by-time').perfectScrollbar('update');
}
if (config.GoogleDeveloperKey) {
diff --git a/web/static/css/google-fonts.css b/web/static/css/google-fonts.css
deleted file mode 100644
index e052b22c7..000000000
--- a/web/static/css/google-fonts.css
+++ /dev/null
@@ -1,168 +0,0 @@
-/* cyrillic-ext */
-@font-face {
- font-family: 'Open Sans';
- font-style: normal;
- font-weight: 400;
- src: local('Open Sans'), local('OpenSans'), url(/static/fonts/K88pR3goAWT7BTt32Z01mxJtnKITppOI_IvcXXDNrsc.woff2) format('woff2');
- unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F;
-}
-/* cyrillic */
-@font-face {
- font-family: 'Open Sans';
- font-style: normal;
- font-weight: 400;
- src: local('Open Sans'), local('OpenSans'), url(/static/fonts/RjgO7rYTmqiVp7vzi-Q5URJtnKITppOI_IvcXXDNrsc.woff2) format('woff2');
- unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
-}
-/* greek-ext */
-@font-face {
- font-family: 'Open Sans';
- font-style: normal;
- font-weight: 400;
- src: local('Open Sans'), local('OpenSans'), url(/static/fonts/LWCjsQkB6EMdfHrEVqA1KRJtnKITppOI_IvcXXDNrsc.woff2) format('woff2');
- unicode-range: U+1F00-1FFF;
-}
-/* greek */
-@font-face {
- font-family: 'Open Sans';
- font-style: normal;
- font-weight: 400;
- src: local('Open Sans'), local('OpenSans'), url(/static/fonts/xozscpT2726on7jbcb_pAhJtnKITppOI_IvcXXDNrsc.woff2) format('woff2');
- unicode-range: U+0370-03FF;
-}
-/* vietnamese */
-@font-face {
- font-family: 'Open Sans';
- font-style: normal;
- font-weight: 400;
- src: local('Open Sans'), local('OpenSans'), url(/static/fonts/59ZRklaO5bWGqF5A9baEERJtnKITppOI_IvcXXDNrsc.woff2) format('woff2');
- unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB;
-}
-/* latin-ext */
-@font-face {
- font-family: 'Open Sans';
- font-style: normal;
- font-weight: 400;
- src: local('Open Sans'), local('OpenSans'), url(/static/fonts/u-WUoqrET9fUeobQW7jkRRJtnKITppOI_IvcXXDNrsc.woff2) format('woff2');
- unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
-}
-/* latin */
-@font-face {
- font-family: 'Open Sans';
- font-style: normal;
- font-weight: 400;
- src: local('Open Sans'), local('OpenSans'), url(/static/fonts/cJZKeOuBrn4kERxqtaUH3VtXRa8TVwTICgirnJhmVJw.woff2) format('woff2');
- unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
-}
-/* cyrillic-ext */
-@font-face {
- font-family: 'Open Sans';
- font-style: normal;
- font-weight: 600;
- src: local('Open Sans Semibold'), local('OpenSans-Semibold'), url(/static/fonts/MTP_ySUJH_bn48VBG8sNSq-j2U0lmluP9RWlSytm3ho.woff2) format('woff2');
- unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F;
-}
-/* cyrillic */
-@font-face {
- font-family: 'Open Sans';
- font-style: normal;
- font-weight: 600;
- src: local('Open Sans Semibold'), local('OpenSans-Semibold'), url(/static/fonts/MTP_ySUJH_bn48VBG8sNSpX5f-9o1vgP2EXwfjgl7AY.woff2) format('woff2');
- unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
-}
-/* greek-ext */
-@font-face {
- font-family: 'Open Sans';
- font-style: normal;
- font-weight: 600;
- src: local('Open Sans Semibold'), local('OpenSans-Semibold'), url(/static/fonts/MTP_ySUJH_bn48VBG8sNShWV49_lSm1NYrwo-zkhivY.woff2) format('woff2');
- unicode-range: U+1F00-1FFF;
-}
-/* greek */
-@font-face {
- font-family: 'Open Sans';
- font-style: normal;
- font-weight: 600;
- src: local('Open Sans Semibold'), local('OpenSans-Semibold'), url(/static/fonts/MTP_ySUJH_bn48VBG8sNSqaRobkAwv3vxw3jMhVENGA.woff2) format('woff2');
- unicode-range: U+0370-03FF;
-}
-/* vietnamese */
-@font-face {
- font-family: 'Open Sans';
- font-style: normal;
- font-weight: 600;
- src: local('Open Sans Semibold'), local('OpenSans-Semibold'), url(/static/fonts/MTP_ySUJH_bn48VBG8sNSv8zf_FOSsgRmwsS7Aa9k2w.woff2) format('woff2');
- unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB;
-}
-/* latin-ext */
-@font-face {
- font-family: 'Open Sans';
- font-style: normal;
- font-weight: 600;
- src: local('Open Sans Semibold'), local('OpenSans-Semibold'), url(/static/fonts/MTP_ySUJH_bn48VBG8sNSj0LW-43aMEzIO6XUTLjad8.woff2) format('woff2');
- unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
-}
-/* latin */
-@font-face {
- font-family: 'Open Sans';
- font-style: normal;
- font-weight: 600;
- src: local('Open Sans Semibold'), local('OpenSans-Semibold'), url(/static/fonts/MTP_ySUJH_bn48VBG8sNSugdm0LZdjqr5-oayXSOefg.woff2) format('woff2');
- unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
-}
-/* cyrillic-ext */
-@font-face {
- font-family: 'Open Sans';
- font-style: normal;
- font-weight: 700;
- src: local('Open Sans Bold'), local('OpenSans-Bold'), url(/static/fonts/k3k702ZOKiLJc3WVjuplzK-j2U0lmluP9RWlSytm3ho.woff2) format('woff2');
- unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F;
-}
-/* cyrillic */
-@font-face {
- font-family: 'Open Sans';
- font-style: normal;
- font-weight: 700;
- src: local('Open Sans Bold'), local('OpenSans-Bold'), url(/static/fonts/k3k702ZOKiLJc3WVjuplzJX5f-9o1vgP2EXwfjgl7AY.woff2) format('woff2');
- unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
-}
-/* greek-ext */
-@font-face {
- font-family: 'Open Sans';
- font-style: normal;
- font-weight: 700;
- src: local('Open Sans Bold'), local('OpenSans-Bold'), url(/static/fonts/k3k702ZOKiLJc3WVjuplzBWV49_lSm1NYrwo-zkhivY.woff2) format('woff2');
- unicode-range: U+1F00-1FFF;
-}
-/* greek */
-@font-face {
- font-family: 'Open Sans';
- font-style: normal;
- font-weight: 700;
- src: local('Open Sans Bold'), local('OpenSans-Bold'), url(/static/fonts/k3k702ZOKiLJc3WVjuplzKaRobkAwv3vxw3jMhVENGA.woff2) format('woff2');
- unicode-range: U+0370-03FF;
-}
-/* vietnamese */
-@font-face {
- font-family: 'Open Sans';
- font-style: normal;
- font-weight: 700;
- src: local('Open Sans Bold'), local('OpenSans-Bold'), url(/static/fonts/k3k702ZOKiLJc3WVjuplzP8zf_FOSsgRmwsS7Aa9k2w.woff2) format('woff2');
- unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB;
-}
-/* latin-ext */
-@font-face {
- font-family: 'Open Sans';
- font-style: normal;
- font-weight: 700;
- src: local('Open Sans Bold'), local('OpenSans-Bold'), url(/static/fonts/k3k702ZOKiLJc3WVjuplzD0LW-43aMEzIO6XUTLjad8.woff2) format('woff2');
- unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
-}
-/* latin */
-@font-face {
- font-family: 'Open Sans';
- font-style: normal;
- font-weight: 700;
- src: local('Open Sans Bold'), local('OpenSans-Bold'), url(/static/fonts/k3k702ZOKiLJc3WVjuplzOgdm0LZdjqr5-oayXSOefg.woff2) format('woff2');
- unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
-}
diff --git a/web/static/fonts/59ZRklaO5bWGqF5A9baEERJtnKITppOI_IvcXXDNrsc.woff2 b/web/static/fonts/59ZRklaO5bWGqF5A9baEERJtnKITppOI_IvcXXDNrsc.woff2
deleted file mode 100644
index bb845920d..000000000
--- a/web/static/fonts/59ZRklaO5bWGqF5A9baEERJtnKITppOI_IvcXXDNrsc.woff2
+++ /dev/null
Binary files differ
diff --git a/web/static/fonts/K88pR3goAWT7BTt32Z01mxJtnKITppOI_IvcXXDNrsc.woff2 b/web/static/fonts/K88pR3goAWT7BTt32Z01mxJtnKITppOI_IvcXXDNrsc.woff2
deleted file mode 100644
index 0f1eeae6c..000000000
--- a/web/static/fonts/K88pR3goAWT7BTt32Z01mxJtnKITppOI_IvcXXDNrsc.woff2
+++ /dev/null
Binary files differ
diff --git a/web/static/fonts/LWCjsQkB6EMdfHrEVqA1KRJtnKITppOI_IvcXXDNrsc.woff2 b/web/static/fonts/LWCjsQkB6EMdfHrEVqA1KRJtnKITppOI_IvcXXDNrsc.woff2
deleted file mode 100644
index cd4712862..000000000
--- a/web/static/fonts/LWCjsQkB6EMdfHrEVqA1KRJtnKITppOI_IvcXXDNrsc.woff2
+++ /dev/null
Binary files differ
diff --git a/web/static/fonts/MTP_ySUJH_bn48VBG8sNShWV49_lSm1NYrwo-zkhivY.woff2 b/web/static/fonts/MTP_ySUJH_bn48VBG8sNShWV49_lSm1NYrwo-zkhivY.woff2
deleted file mode 100644
index 97af2592f..000000000
--- a/web/static/fonts/MTP_ySUJH_bn48VBG8sNShWV49_lSm1NYrwo-zkhivY.woff2
+++ /dev/null
Binary files differ
diff --git a/web/static/fonts/MTP_ySUJH_bn48VBG8sNSj0LW-43aMEzIO6XUTLjad8.woff2 b/web/static/fonts/MTP_ySUJH_bn48VBG8sNSj0LW-43aMEzIO6XUTLjad8.woff2
deleted file mode 100644
index bb98ecd51..000000000
--- a/web/static/fonts/MTP_ySUJH_bn48VBG8sNSj0LW-43aMEzIO6XUTLjad8.woff2
+++ /dev/null
Binary files differ
diff --git a/web/static/fonts/MTP_ySUJH_bn48VBG8sNSpX5f-9o1vgP2EXwfjgl7AY.woff2 b/web/static/fonts/MTP_ySUJH_bn48VBG8sNSpX5f-9o1vgP2EXwfjgl7AY.woff2
deleted file mode 100644
index d539aeb5e..000000000
--- a/web/static/fonts/MTP_ySUJH_bn48VBG8sNSpX5f-9o1vgP2EXwfjgl7AY.woff2
+++ /dev/null
Binary files differ
diff --git a/web/static/fonts/MTP_ySUJH_bn48VBG8sNSq-j2U0lmluP9RWlSytm3ho.woff2 b/web/static/fonts/MTP_ySUJH_bn48VBG8sNSq-j2U0lmluP9RWlSytm3ho.woff2
deleted file mode 100644
index 7019bcecd..000000000
--- a/web/static/fonts/MTP_ySUJH_bn48VBG8sNSq-j2U0lmluP9RWlSytm3ho.woff2
+++ /dev/null
Binary files differ
diff --git a/web/static/fonts/MTP_ySUJH_bn48VBG8sNSqaRobkAwv3vxw3jMhVENGA.woff2 b/web/static/fonts/MTP_ySUJH_bn48VBG8sNSqaRobkAwv3vxw3jMhVENGA.woff2
deleted file mode 100644
index 4111b3667..000000000
--- a/web/static/fonts/MTP_ySUJH_bn48VBG8sNSqaRobkAwv3vxw3jMhVENGA.woff2
+++ /dev/null
Binary files differ
diff --git a/web/static/fonts/MTP_ySUJH_bn48VBG8sNSugdm0LZdjqr5-oayXSOefg.woff2 b/web/static/fonts/MTP_ySUJH_bn48VBG8sNSugdm0LZdjqr5-oayXSOefg.woff2
deleted file mode 100644
index 8993a4de6..000000000
--- a/web/static/fonts/MTP_ySUJH_bn48VBG8sNSugdm0LZdjqr5-oayXSOefg.woff2
+++ /dev/null
Binary files differ
diff --git a/web/static/fonts/MTP_ySUJH_bn48VBG8sNSv8zf_FOSsgRmwsS7Aa9k2w.woff2 b/web/static/fonts/MTP_ySUJH_bn48VBG8sNSv8zf_FOSsgRmwsS7Aa9k2w.woff2
deleted file mode 100644
index 363eedbf5..000000000
--- a/web/static/fonts/MTP_ySUJH_bn48VBG8sNSv8zf_FOSsgRmwsS7Aa9k2w.woff2
+++ /dev/null
Binary files differ
diff --git a/web/static/fonts/RjgO7rYTmqiVp7vzi-Q5URJtnKITppOI_IvcXXDNrsc.woff2 b/web/static/fonts/RjgO7rYTmqiVp7vzi-Q5URJtnKITppOI_IvcXXDNrsc.woff2
deleted file mode 100644
index 1fd235c2d..000000000
--- a/web/static/fonts/RjgO7rYTmqiVp7vzi-Q5URJtnKITppOI_IvcXXDNrsc.woff2
+++ /dev/null
Binary files differ
diff --git a/web/static/fonts/cJZKeOuBrn4kERxqtaUH3VtXRa8TVwTICgirnJhmVJw.woff2 b/web/static/fonts/cJZKeOuBrn4kERxqtaUH3VtXRa8TVwTICgirnJhmVJw.woff2
deleted file mode 100644
index 5287058cf..000000000
--- a/web/static/fonts/cJZKeOuBrn4kERxqtaUH3VtXRa8TVwTICgirnJhmVJw.woff2
+++ /dev/null
Binary files differ
diff --git a/web/static/fonts/k3k702ZOKiLJc3WVjuplzBWV49_lSm1NYrwo-zkhivY.woff2 b/web/static/fonts/k3k702ZOKiLJc3WVjuplzBWV49_lSm1NYrwo-zkhivY.woff2
deleted file mode 100644
index 1503cf259..000000000
--- a/web/static/fonts/k3k702ZOKiLJc3WVjuplzBWV49_lSm1NYrwo-zkhivY.woff2
+++ /dev/null
Binary files differ
diff --git a/web/static/fonts/k3k702ZOKiLJc3WVjuplzD0LW-43aMEzIO6XUTLjad8.woff2 b/web/static/fonts/k3k702ZOKiLJc3WVjuplzD0LW-43aMEzIO6XUTLjad8.woff2
deleted file mode 100644
index 4d8eb8975..000000000
--- a/web/static/fonts/k3k702ZOKiLJc3WVjuplzD0LW-43aMEzIO6XUTLjad8.woff2
+++ /dev/null
Binary files differ
diff --git a/web/static/fonts/k3k702ZOKiLJc3WVjuplzJX5f-9o1vgP2EXwfjgl7AY.woff2 b/web/static/fonts/k3k702ZOKiLJc3WVjuplzJX5f-9o1vgP2EXwfjgl7AY.woff2
deleted file mode 100644
index 8394e2ec8..000000000
--- a/web/static/fonts/k3k702ZOKiLJc3WVjuplzJX5f-9o1vgP2EXwfjgl7AY.woff2
+++ /dev/null
Binary files differ
diff --git a/web/static/fonts/k3k702ZOKiLJc3WVjuplzK-j2U0lmluP9RWlSytm3ho.woff2 b/web/static/fonts/k3k702ZOKiLJc3WVjuplzK-j2U0lmluP9RWlSytm3ho.woff2
deleted file mode 100644
index bef0033ff..000000000
--- a/web/static/fonts/k3k702ZOKiLJc3WVjuplzK-j2U0lmluP9RWlSytm3ho.woff2
+++ /dev/null
Binary files differ
diff --git a/web/static/fonts/k3k702ZOKiLJc3WVjuplzKaRobkAwv3vxw3jMhVENGA.woff2 b/web/static/fonts/k3k702ZOKiLJc3WVjuplzKaRobkAwv3vxw3jMhVENGA.woff2
deleted file mode 100644
index ffc6ce438..000000000
--- a/web/static/fonts/k3k702ZOKiLJc3WVjuplzKaRobkAwv3vxw3jMhVENGA.woff2
+++ /dev/null
Binary files differ
diff --git a/web/static/fonts/k3k702ZOKiLJc3WVjuplzOgdm0LZdjqr5-oayXSOefg.woff2 b/web/static/fonts/k3k702ZOKiLJc3WVjuplzOgdm0LZdjqr5-oayXSOefg.woff2
deleted file mode 100644
index be4c25b42..000000000
--- a/web/static/fonts/k3k702ZOKiLJc3WVjuplzOgdm0LZdjqr5-oayXSOefg.woff2
+++ /dev/null
Binary files differ
diff --git a/web/static/fonts/k3k702ZOKiLJc3WVjuplzP8zf_FOSsgRmwsS7Aa9k2w.woff2 b/web/static/fonts/k3k702ZOKiLJc3WVjuplzP8zf_FOSsgRmwsS7Aa9k2w.woff2
deleted file mode 100644
index cf04c330b..000000000
--- a/web/static/fonts/k3k702ZOKiLJc3WVjuplzP8zf_FOSsgRmwsS7Aa9k2w.woff2
+++ /dev/null
Binary files differ
diff --git a/web/static/fonts/u-WUoqrET9fUeobQW7jkRRJtnKITppOI_IvcXXDNrsc.woff2 b/web/static/fonts/u-WUoqrET9fUeobQW7jkRRJtnKITppOI_IvcXXDNrsc.woff2
deleted file mode 100644
index 0b5a66eb4..000000000
--- a/web/static/fonts/u-WUoqrET9fUeobQW7jkRRJtnKITppOI_IvcXXDNrsc.woff2
+++ /dev/null
Binary files differ
diff --git a/web/static/fonts/xozscpT2726on7jbcb_pAhJtnKITppOI_IvcXXDNrsc.woff2 b/web/static/fonts/xozscpT2726on7jbcb_pAhJtnKITppOI_IvcXXDNrsc.woff2
deleted file mode 100644
index 7971f5342..000000000
--- a/web/static/fonts/xozscpT2726on7jbcb_pAhJtnKITppOI_IvcXXDNrsc.woff2
+++ /dev/null
Binary files differ
diff --git a/web/templates/head.html b/web/templates/head.html
index c27597f82..02904e764 100644
--- a/web/templates/head.html
+++ b/web/templates/head.html
@@ -27,7 +27,7 @@
<link id="favicon" rel="icon" href="/static/images/favicon.ico" type="image/x-icon">
<link rel="shortcut icon" href="/static/images/favicon.ico" type="image/x-icon">
- <link href='/static/css/google-fonts.css' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Open+Sans:400,600,700' rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="/static/css/styles.css">
<script src="/static/js/perfect-scrollbar-0.6.3.jquery.js"></script>