github.com/vnforks/kid/v5@v5.22.1-0.20200408055009-b89d99c65676/model/class_member.go (about)

     1  // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
     2  // See LICENSE.txt for license information.
     3  
     4  package model
     5  
     6  import (
     7  	"encoding/json"
     8  	"io"
     9  	"net/http"
    10  	"strings"
    11  )
    12  
    13  const (
    14  	CLASS_NOTIFY_DEFAULT              = "default"
    15  	CLASS_NOTIFY_ALL                  = "all"
    16  	CLASS_NOTIFY_MENTION              = "mention"
    17  	CLASS_NOTIFY_NONE                 = "none"
    18  	CLASS_MARK_UNREAD_ALL             = "all"
    19  	CLASS_MARK_UNREAD_MENTION         = "mention"
    20  	IGNORE_CLASS_MENTIONS_DEFAULT     = "default"
    21  	IGNORE_CLASS_MENTIONS_OFF         = "off"
    22  	IGNORE_CLASS_MENTIONS_ON          = "on"
    23  	IGNORE_CLASS_MENTIONS_NOTIFY_PROP = "ignore_class_mentions"
    24  )
    25  
    26  type ClassMember struct {
    27  	ClassId       string    `json:"class_id"`
    28  	UserId        string    `json:"user_id"`
    29  	Roles         string    `json:"roles"`
    30  	NotifyProps   StringMap `json:"notify_props"`
    31  	LastViewedAt  int64     `json:"last_viewed_at"`
    32  	LastUpdateAt  int64     `json:"last_update_at"`
    33  	SchemeUser    bool      `json:"scheme_user"`
    34  	SchemeAdmin   bool      `json:"scheme_admin"`
    35  	ExplicitRoles string    `json:"explicit_roles"`
    36  }
    37  
    38  type ClassMembers []ClassMember
    39  
    40  type ClassMemberForExport struct {
    41  	ClassMember
    42  	ClassName string
    43  	Username  string
    44  }
    45  
    46  func (o *ClassMembers) ToJson() string {
    47  	if b, err := json.Marshal(o); err != nil {
    48  		return "[]"
    49  	} else {
    50  		return string(b)
    51  	}
    52  }
    53  
    54  func ClassMembersFromJson(data io.Reader) *ClassMembers {
    55  	var o *ClassMembers
    56  	json.NewDecoder(data).Decode(&o)
    57  	return o
    58  }
    59  
    60  func (o *ClassMember) ToJson() string {
    61  	b, _ := json.Marshal(o)
    62  	return string(b)
    63  }
    64  
    65  func ClassMemberFromJson(data io.Reader) *ClassMember {
    66  	var o *ClassMember
    67  	json.NewDecoder(data).Decode(&o)
    68  	return o
    69  }
    70  
    71  func (o *ClassMember) IsValid() *AppError {
    72  
    73  	if len(o.ClassId) != 26 {
    74  		return NewAppError("ClassMember.IsValid", "model.class_member.is_valid.class_id.app_error", nil, "", http.StatusBadRequest)
    75  	}
    76  
    77  	if len(o.UserId) != 26 {
    78  		return NewAppError("ClassMember.IsValid", "model.class_member.is_valid.user_id.app_error", nil, "", http.StatusBadRequest)
    79  	}
    80  
    81  	notifyLevel := o.NotifyProps[DESKTOP_NOTIFY_PROP]
    82  	if len(notifyLevel) > 20 || !IsClassNotifyLevelValid(notifyLevel) {
    83  		return NewAppError("ClassMember.IsValid", "model.class_member.is_valid.notify_level.app_error", nil, "notify_level="+notifyLevel, http.StatusBadRequest)
    84  	}
    85  
    86  	if pushLevel, ok := o.NotifyProps[PUSH_NOTIFY_PROP]; ok {
    87  		if len(pushLevel) > 20 || !IsClassNotifyLevelValid(pushLevel) {
    88  			return NewAppError("ClassMember.IsValid", "model.class_member.is_valid.push_level.app_error", nil, "push_notification_level="+pushLevel, http.StatusBadRequest)
    89  		}
    90  	}
    91  
    92  	if sendEmail, ok := o.NotifyProps[EMAIL_NOTIFY_PROP]; ok {
    93  		if len(sendEmail) > 20 || !IsSendEmailValid(sendEmail) {
    94  			return NewAppError("ClassMember.IsValid", "model.class_member.is_valid.email_value.app_error", nil, "push_notification_level="+sendEmail, http.StatusBadRequest)
    95  		}
    96  	}
    97  
    98  	return nil
    99  }
   100  
   101  func (o *ClassMember) PreSave() {
   102  	o.LastUpdateAt = GetMillis()
   103  }
   104  
   105  func (o *ClassMember) PreUpdate() {
   106  	o.LastUpdateAt = GetMillis()
   107  }
   108  
   109  func (o *ClassMember) GetRoles() []string {
   110  	return strings.Fields(o.Roles)
   111  }
   112  
   113  func IsClassNotifyLevelValid(notifyLevel string) bool {
   114  	return notifyLevel == CLASS_NOTIFY_DEFAULT ||
   115  		notifyLevel == CLASS_NOTIFY_ALL ||
   116  		notifyLevel == CLASS_NOTIFY_MENTION ||
   117  		notifyLevel == CLASS_NOTIFY_NONE
   118  }
   119  
   120  func IsSendEmailValid(sendEmail string) bool {
   121  	return sendEmail == CLASS_NOTIFY_DEFAULT || sendEmail == "true" || sendEmail == "false"
   122  }
   123  
   124  func IsIgnoreClassMentionsValid(ignoreClassMentions string) bool {
   125  	return ignoreClassMentions == IGNORE_CLASS_MENTIONS_ON || ignoreClassMentions == IGNORE_CLASS_MENTIONS_OFF || ignoreClassMentions == IGNORE_CLASS_MENTIONS_DEFAULT
   126  }
   127  
   128  func GetDefaultClassNotifyProps() StringMap {
   129  	return StringMap{
   130  		DESKTOP_NOTIFY_PROP:               CLASS_NOTIFY_DEFAULT,
   131  		MARK_UNREAD_NOTIFY_PROP:           CLASS_MARK_UNREAD_ALL,
   132  		PUSH_NOTIFY_PROP:                  CLASS_NOTIFY_DEFAULT,
   133  		EMAIL_NOTIFY_PROP:                 CLASS_NOTIFY_DEFAULT,
   134  		IGNORE_CLASS_MENTIONS_NOTIFY_PROP: IGNORE_CLASS_MENTIONS_DEFAULT,
   135  	}
   136  }