/*
* Symphony - A modern community (forum/SNS/blog) platform written in Java.
* Copyright (C) 2012-2017, b3log.org & hacpai.com
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.b3log.symphony.model;
import org.apache.commons.lang.StringUtils;
import org.b3log.symphony.util.Symphonys;
import org.json.JSONObject;
/**
* This class defines ext of user model relevant keys.
*
* @author <a href="http://88250.b3log.org">Liang Ding</a>
* @author Bill Ho
* @version 2.8.1.13, Jan 20, 2017
* @see org.b3log.latke.model.User
* @since 0.2.0
*/
public final class UserExt {
/**
* Key of user guide step.
*/
public static final String USER_GUIDE_STEP = "userGuideStep";
/**
* Key of user language.
*/
public static final String USER_LANGUAGE = "userLanguage";
/**
* Key of user timezone.
*/
public static final String USER_TIMEZONE = "userTimezone";
/**
* Key of user keyboard shortcuts status.
*/
public static final String USER_KEYBOARD_SHORTCUTS_STATUS = "userKeyboardShortcutsStatus";
/**
* Key of user subscription mail status.
*/
public static final String USER_SUB_MAIL_STATUS = "userSubMailStatus";
/**
* Key of user subscription mail send time.
*/
public static final String USER_SUB_MAIL_SEND_TIME = "userSubMailSendTime";
/**
* Key of user avatar view mode.
*/
public static final String USER_AVATAR_VIEW_MODE = "userAvatarViewMode";
/**
* Key of user list page size.
*/
public static final String USER_LIST_PAGE_SIZE = "userListPageSize";
/**
* Key of forge link status.
*/
public static final String USER_FORGE_LINK_STATUS = "userForgeLinkStatus";
/**
* Key of user point status.
*/
public static final String USER_POINT_STATUS = "userPointStatus";
/**
* Key of user follower status.
*/
public static final String USER_FOLLOWER_STATUS = "userFollowerStatus";
/**
* Key of user following article status.
*/
public static final String USER_FOLLOWING_ARTICLE_STATUS = "userFollowingArticleStatus";
/**
* Key of user watching article status.
*/
public static final String USER_WATCHING_ARTICLE_STATUS = "userWatchingArticleStatus";
/**
* Key of user following tag status.
*/
public static final String USER_FOLLOWING_TAG_STATUS = "userFollowingTagStatus";
/**
* Key of user following user status.
*/
public static final String USER_FOLLOWING_USER_STATUS = "userFollowingUserStatus";
/**
* Key of user comment status.
*/
public static final String USER_COMMENT_STATUS = "userCommentStatus";
/**
* Key of user article status.
*/
public static final String USER_ARTICLE_STATUS = "userArticleStatus";
/**
* Key of user online status.
*/
public static final String USER_ONLINE_STATUS = "userOnlineStatus";
/**
* Key of user timeline status.
*/
public static final String USER_TIMELINE_STATUS = "userTimelineStatus";
/**
* Key of user User-Agent status.
*/
public static final String USER_UA_STATUS = "userUAStatus";
/**
* Key of user notify status.
*/
public static final String USER_NOTIFY_STATUS = "userNotifyStatus";
/**
* Key of user nickname.
*/
public static final String USER_NICKNAME = "userNickname";
/**
* Key of user comment view mode.
*/
public static final String USER_COMMENT_VIEW_MODE = "userCommentViewMode";
/**
* Key of sync to client.
*/
public static final String SYNC_TO_CLIENT = "syncWithSymphonyClient";
/**
* Key of user geo status.
*/
public static final String USER_GEO_STATUS = "userGeoStatus";
/**
* Key of user update time.
*/
public static final String USER_UPDATE_TIME = "userUpdateTime";
/**
* Key of user city.
*/
public static final String USER_CITY = "userCity";
/**
* Key of user country.
*/
public static final String USER_COUNTRY = "userCountry";
/**
* Key of user province.
*/
public static final String USER_PROVINCE = "userProvince";
/**
* Key of user skin.
*/
public static final String USER_SKIN = "userSkin";
/**
* Key of mobile user skin.
*/
public static final String USER_MOBILE_SKIN = "userMobileSkin";
/**
* Key of user checkin time.
*/
public static final String USER_CHECKIN_TIME = "userCheckinTime";
/**
* Key of user longest checkin streak start.
*/
public static final String USER_LONGEST_CHECKIN_STREAK_START = "userLongestCheckinStreakStart";
/**
* Key of user longest checkin streak end.
*/
public static final String USER_LONGEST_CHECKIN_STREAK_END = "userLongestCheckinStreakEnd";
/**
* Key of user current checkin streak start.
*/
public static final String USER_CURRENT_CHECKIN_STREAK_START = "userCurrentCheckinStreakStart";
/**
* Key of user current checkin streak start end.
*/
public static final String USER_CURRENT_CHECKIN_STREAK_END = "userCurrentCheckinStreakEnd";
/**
* Key of user longest checkin streak.
*/
public static final String USER_LONGEST_CHECKIN_STREAK = "userLongestCheckinStreak";
/**
* Key of user current checkin streak.
*/
public static final String USER_CURRENT_CHECKIN_STREAK = "userCurrentCheckinStreak";
/**
* Key of user article count.
*/
public static final String USER_ARTICLE_COUNT = "userArticleCount";
/**
* Key of user comment count.
*/
public static final String USER_COMMENT_COUNT = "userCommentCount";
/**
* Key of new tag count.
*/
public static final String USER_TAG_COUNT = "userTagCount";
/**
* Key of user status.
*/
public static final String USER_STATUS = "userStatus";
/**
* Key of user point.
*/
public static final String USER_POINT = "userPoint";
/**
* Key of user used point.
*/
public static final String USER_USED_POINT = "userUsedPoint";
/**
* Key of user join point rank.
*/
public static final String USER_JOIN_POINT_RANK = "userJoinPointRank";
/**
* Key of user join used point rank.
*/
public static final String USER_JOIN_USED_POINT_RANK = "userJoinUsedPointRank";
/**
* Key of user tags.
*/
public static final String USER_TAGS = "userTags";
/**
* Key of user QQ.
*/
public static final String USER_QQ = "userQQ";
/**
* Key of user number.
*/
public static final String USER_NO = "userNo";
/**
* Key of user intro.
*/
public static final String USER_INTRO = "userIntro";
/**
* Key of user avatar type.
*/
public static final String USER_AVATAR_TYPE = "userAvatarType";
/**
* Key of user avatar URL.
*/
public static final String USER_AVATAR_URL = "userAvatarURL";
/**
* Key of user B3log key.
*/
public static final String USER_B3_KEY = "userB3Key";
/**
* Key of user B3log client add article URL.
*/
public static final String USER_B3_CLIENT_ADD_ARTICLE_URL = "userB3ClientAddArticleURL";
/**
* Key of user B3log client update article URL.
*/
public static final String USER_B3_CLIENT_UPDATE_ARTICLE_URL = "userB3ClientUpdateArticleURL";
/**
* Key of user B3log client add comment URL.
*/
public static final String USER_B3_CLIENT_ADD_COMMENT_URL = "userB3ClientAddCommentURL";
/**
* Key of online flag.
*/
public static final String USER_ONLINE_FLAG = "userOnlineFlag";
/**
* Key of latest post article time.
*/
public static final String USER_LATEST_ARTICLE_TIME = "userLatestArticleTime";
/**
* Key of latest comment time.
*/
public static final String USER_LATEST_CMT_TIME = "userLatestCmtTime";
/**
* Key of latest login time.
*/
public static final String USER_LATEST_LOGIN_TIME = "userLatestLoginTime";
/**
* Key of latest login IP.
*/
public static final String USER_LATEST_LOGIN_IP = "userLatestLoginIP";
/**
* Key of app role.
*/
public static final String USER_APP_ROLE = "userAppRole";
//// Transient ////
/**
* Key of user create time.
*/
public static final String USER_T_CREATE_TIME = "userCreateTime";
/**
* Key of user point in Hex.
*/
public static final String USER_T_POINT_HEX = "userPointHex";
/**
* Key of user point in Color Code.
*/
public static final String USER_T_POINT_CC = "userPointCC";
/**
* Key of user name lower case.
*/
public static final String USER_T_NAME_LOWER_CASE = "userNameLowerCase";
/**
* Key of user id.
*/
public static final String USER_T_ID = "userId";
//// User subscription mail status constants
/**
* User subscription mail status - enabled.
*/
public static final int USER_SUB_MAIL_STATUS_ENABLED = 0;
/**
* User subscription mail status - disabled.
*/
public static final int USER_SUB_MAIL_STATUS_DISABLED = 1;
//// User guide step constants
/**
* User guide step - finish.
*/
public static final int USER_GUIDE_STEP_FIN = 0;
/**
* User guide step - upload avatar.
*/
public static final int USER_GUIDE_STEP_UPLOAD_AVATAR = 1;
/**
* User guide step - follow tags.
*/
public static final int USER_GUIDE_STEP_FOLLOW_TAGS = 2;
/**
* User guide step - follow users.
*/
public static final int USER_GUIDE_STEP_FOLLOW_USERS = 3;
/**
* User guide step - star project.
*/
public static final int USER_GUIDE_STEP_STAR_PROJECT = 4;
//// Default Commenter constants
/**
* Default commenter name.
*/
public static final String DEFAULT_CMTER_NAME = "Default Commenter";
/**
* Default commenter email.
*/
public static final String DEFAULT_CMTER_EMAIL = "default_commenter@b3log.org";
/**
* Default commenter role.
*/
public static final String DEFAULT_CMTER_ROLE = "defaultCommenterRole";
//// Null user
/**
* Null user name.
*/
public static final String NULL_USER_NAME = "_";
//// Anonymous user.
/**
* Anonymous user name.
*/
public static final String ANONYMOUS_USER_NAME = "someone";
/**
* Anonymous user id.
*/
public static final String ANONYMOUS_USER_ID = "0";
//// Status constants
/**
* User status - valid.
*/
public static final int USER_STATUS_C_VALID = 0;
/**
* User status - invalid.
*/
public static final int USER_STATUS_C_INVALID = 1;
/**
* User status - registered but not verified.
*/
public static final int USER_STATUS_C_NOT_VERIFIED = 2;
/**
* User status - invalid login.
*/
public static final int USER_STATUS_C_INVALID_LOGIN = 3;
//// Join point rank constants
/**
* User join point rank - join.
*/
public static final int USER_JOIN_POINT_RANK_C_JOIN = 0;
/**
* User join point rank - not join.
*/
public static final int USER_JOIN_POINT_RANK_C_NOT_JOIN = 1;
/**
* User join used point rank - join.
*/
public static final int USER_JOIN_USED_POINT_RANK_C_JOIN = 0;
/**
* User join used point rank - not join.
*/
public static final int USER_JOIN_USED_POINT_RANK_C_NOT_JOIN = 1;
//// User XXX Status constants
/**
* User XXX (notify/point/follower/following article/following tag/following user/comment/article) status - public.
*/
public static final int USER_XXX_STATUS_C_PUBLIC = 0;
/**
* User XXX (notify/point/follower/following article/watching article/following tag/following user/comment/article) status - private.
*/
public static final int USER_XXX_STATUS_C_PRIVATE = 1;
/**
* User XXX (UA) status - enabled.
*/
public static final int USER_XXX_STATUS_C_ENABLED = 0;
/**
* User XXX (UA) status - disabled.
*/
public static final int USER_XXX_STATUS_C_DISABLED = 1;
//// Avatar View Mode constants
/**
* User avatar view mode - original.
*/
public static final int USER_AVATAR_VIEW_MODE_C_ORIGINAL = 0;
/**
* User avatar view mode - static.
*/
public static final int USER_AVATAR_VIEW_MODE_C_STATIC = 1;
//// Comment View Mode constants
/**
* User comment view mode - traditional.
*/
public static final int USER_COMMENT_VIEW_MODE_C_TRADITIONAL = 0;
/**
* User comment view mode - real time.
*/
public static final int USER_COMMENT_VIEW_MODE_C_REALTIME = 1;
//// Geo Status constants
/**
* User geo status - public.
*/
public static final int USER_GEO_STATUS_C_PUBLIC = 0;
/**
* User geo status - private.
*/
public static final int USER_GEO_STATUS_C_PRIVATE = 1;
//// Avatar type constants
/**
* User avatar type - Gravatar.
*
* @deprecated only upload allowed since 1.3.0
*/
public static final int USER_AVATAR_TYPE_C_GRAVATAR = 0;
/**
* User avatar type - External Link.
*
* @deprecated only upload allowed since 1.3.0
*/
public static final int USER_AVATAR_TYPE_C_EXTERNAL_LINK = 1;
/**
* User avatar type - Upload.
*/
public static final int USER_AVATAR_TYPE_C_UPLOAD = 2;
//// App role constants
/**
* User app role - Hacker.
*/
public static final int USER_APP_ROLE_C_HACKER = 0;
/**
* User app role - Painter.
*/
public static final int USER_APP_ROLE_C_PAINTER = 1;
/**
* Private constructor.
*/
private UserExt() {
}
/**
* Gets color code of the specified point.
*
* @param point the specified point
* @return color code
*/
public static String toCCString(final int point) {
final String hex = Integer.toHexString(point);
if (1 == hex.length()) {
return hex + hex + hex + hex + hex + hex;
}
if (2 == hex.length()) {
final String a1 = hex.substring(0, 1);
final String a2 = hex.substring(1);
return a1 + a1 + a1 + a2 + a2 + a2;
}
if (3 == hex.length()) {
final String a1 = hex.substring(0, 1);
final String a2 = hex.substring(1, 2);
final String a3 = hex.substring(2);
return a1 + a1 + a2 + a2 + a3 + a3;
}
if (4 == hex.length()) {
final String a1 = hex.substring(0, 1);
final String a2 = hex.substring(1, 2);
final String a3 = hex.substring(2, 3);
final String a4 = hex.substring(3);
return a1 + a2 + a3 + a4 + a3 + a4;
}
if (5 == hex.length()) {
final String a1 = hex.substring(0, 1);
final String a2 = hex.substring(1, 2);
final String a3 = hex.substring(2, 3);
final String a4 = hex.substring(3, 4);
final String a5 = hex.substring(4);
return a1 + a2 + a3 + a4 + a5 + a5;
}
if (6 == hex.length()) {
return hex;
}
return hex.substring(0, 6);
}
/**
* Checks the specified user name whether is a reserved user name.
*
* @param userName the specified tag string
* @return {@code true} if it is, returns {@code false} otherwise
*/
public static boolean isReservedUserName(final String userName) {
for (final String reservedUserName : Symphonys.RESERVED_USER_NAMES) {
if (StringUtils.equalsIgnoreCase(userName, reservedUserName)) {
return true;
}
}
return false;
}
/**
* Checks whether the specified user updated avatar.
*
* @param user the specified user
* @return {@code true} if the specified user updated avatar, returns {@code false} otherwise
*/
public static boolean updatedAvatar(final JSONObject user) {
return user.optString(UserExt.USER_AVATAR_URL).contains("_");
}
/**
* Checks whether the specified user finshed guide.
*
* @param user the specified user
* @return {@code true} if the specified user finshed guide, returns {@code false} otherwise
*/
public static boolean finshedGuide(final JSONObject user) {
return UserExt.USER_GUIDE_STEP_FIN == user.optInt(UserExt.USER_GUIDE_STEP);
}
}