@WebMethod("friend/usersset") public boolean setFriends(QueryParams qp, HttpServletRequest req) throws UnsupportedEncodingException { FriendshipLogic fs = GlobalLogics.getFriendship(); Context ctx = WutongContext.getContext(qp, true); try { List<String> l = StringUtils2.splitList(qp.checkGetString("friendIds"), ",", true); MessageDelayCombineUtils.sendEmailCombineAndDelayNewFollower(ctx, ctx.getViewerIdString(), l); } catch (Exception e) { L.error(ctx, e, "delay and combine new follower email error!@@@@"); } String viewerId = ctx.getViewerIdString(); String friendIds = qp.checkGetString("friendIds"); String circleId = qp.checkGetString("circleId"); ConversationLogic c = GlobalLogics.getConversation(); if (c.getEnabled(ctx, Constants.LOCAL_CIRCLE_OBJECT, circleId) == 1) { Set<String> friends = StringUtils2.splitSet(friendIds, ",", true); for (String friend : friends) { c.createConversationP( ctx, Constants.USER_OBJECT, friend, Constants.C_SUBSCRIBE_LOCAL_CIRCLE, viewerId); } } return fs.setFriendsP( ctx, viewerId, friendIds, circleId, Constants.FRIEND_REASON_MANUALSELECT, qp.getBoolean("isadd", true)); }
@Override protected String getTitleHtml(Context ctx, Object... args) { String apk_id = (String) args[0]; String userid = (String) args[1]; String username = (String) args[2]; String appname = (String) args[3]; String act = "分享"; String returnString = ""; StreamLogic stream = GlobalLogics.getStream(); RecordSet es_shared_Users = stream.findWhoSharedApp(ctx, apk_id, 200); String a = es_shared_Users.joinColumnValues("source", ","); List<String> ll = StringUtils2.splitList(a, ",", true); if (!ll.contains(userid)) { act = "评论"; } if (getSettingKey(ctx).equals(Constants.NTF_MY_APP_LIKE)) { // returnString = "您分享(评论)的<stream id="+streamid+">stream</stream>被<user // id="+userid+">"+username+"</user> like了"; // 您"+act+"的 returnString = nameLinks + "赞了应用:<a href=\"borqs://application/details?id=" + apk_id + "\">" + appname + "</a>"; } return returnString; }
@WebMethod("circle/show") public RecordSet showCircles(QueryParams qp) { FriendshipLogic fs = GlobalLogics.getFriendship(); GroupLogic group = GlobalLogics.getGroup(); Context ctx = WutongContext.getContext(qp, false); String userId = qp.getString("user", ctx.getViewerIdString()); boolean withPublicCircles = qp.getBoolean("with_public_circles", false); if (!withPublicCircles) { RecordSet recs = fs.getCircles( ctx, userId, qp.getString("circles", ""), qp.getBoolean("with_users", false)); attachSubscribe(ctx, recs); return recs; } else { String circleIds = qp.getString("circles", ""); boolean withMembers = qp.getBoolean("with_users", false); List<String> circles = StringUtils2.splitList(circleIds, ",", true); List<String> groups = group.getGroupIdsFromMentions(ctx, circles); circles.removeAll(groups); RecordSet recs = fs.getCirclesP(ctx, userId, StringUtils2.joinIgnoreBlank(",", circles), withMembers); RecordSet recs0 = group.getGroups( ctx, PUBLIC_CIRCLE_ID_BEGIN, PUBLIC_CIRCLE_ID_END, ctx.getViewerIdString(), StringUtils2.joinIgnoreBlank(",", groups), GROUP_LIGHT_COLS + ",circle_ids,formal,subtype,parent_id", withMembers); recs0.renameColumn(GRP_COL_ID, "circle_id"); recs0.renameColumn(GRP_COL_NAME, "circle_name"); for (Record rec : recs) rec.put("type", CIRCLE_TYPE_LOCAL); for (Record rec : recs0) rec.put("type", CIRCLE_TYPE_PUBLIC); recs.addAll(recs0); attachSubscribe(ctx, recs); return recs; } }
@TraceCall @Override public RecordSet getPages(Context ctx, long[] pageIds) { RecordSet pageRecs = new RecordSet(); if (ArrayUtils.isNotEmpty(pageIds)) { String sql = new SQLBuilder.Select() .select(StringUtils2.splitArray(BASIC_COLS, ",", true)) .from(pageTable) .where( "destroyed_time=0 AND page_id IN (${page_ids})", "page_ids", StringUtils2.join(pageIds, ",")) .toString(); SQLExecutor se = getSqlExecutor(); se.executeRecordSet(sql, pageRecs); attachBasicInfo(ctx, pageRecs); } return pageRecs; }
@Override public List<Long> getScope(Context ctx, String senderId, Object... args) { List<Long> userIds = new ArrayList<Long>(); String targetIds = (String) args[0]; List<Long> targets = StringUtils2.splitIntList(targetIds, ","); for (long target : targets) { if (!userIds.contains(target)) { if ((target >= Constants.PUBLIC_CIRCLE_ID_BEGIN) && (target <= Constants.GROUP_ID_END)) { GroupLogic groupImpl = GlobalLogics.getGroup(); String members = groupImpl.getAllMembers(ctx, target, -1, -1, ""); List<Long> memberIds = StringUtils2.splitIntList(members, ","); userIds.addAll(memberIds); } else if (Constants.getUserTypeById(target) == Constants.PAGE_OBJECT) { long[] followerIds = GlobalLogics.getFriendship() .getFollowerIds(ctx, target, 0, Constants.GROUP_ID_BEGIN, -1, -1); userIds.addAll(Arrays.asList(ArrayUtils.toObject(followerIds))); } else { userIds.add(target); toIds.add(target); } } else { if (Constants.getUserTypeById(target) == Constants.USER_OBJECT) { toIds.add(target); } } } HashSet<Long> set = new HashSet<Long>(userIds); userIds = new ArrayList<Long>(set); // exclude sender if (StringUtils.isNotBlank(senderId)) { userIds.remove(Long.parseLong(senderId)); } L.trace(ctx, "Poll Invite Notification Receive userIds: " + userIds); return userIds; }
@Override public List<Long> getScope(Context ctx, String senderId, RecordSet recs, Object... args) { List<Long> userIds = new ArrayList<Long>(); List<String> reasons = new ArrayList<String>(); reasons.add(String.valueOf(Constants.C_STREAM_TO)); reasons.add(String.valueOf(Constants.C_STREAM_ADDTO)); ConversationLogic conversation = GlobalLogics.getConversation(); RecordSet conversation_users = conversation.getConversation( ctx, Constants.POST_OBJECT, (String) args[0], reasons, 0, 0, 100); for (Record r : conversation_users) { long userId = Long.parseLong(r.getString("from_")); if (!userIds.contains(userId)) { if ((userId >= Constants.PUBLIC_CIRCLE_ID_BEGIN) && (userId <= Constants.GROUP_ID_END)) { groups.add(userId); GroupLogic groupImpl = GlobalLogics.getGroup(); String members = groupImpl.getAllMembers(ctx, userId, -1, -1, ""); List<Long> memberIds = StringUtils2.splitIntList(members, ","); userIds.addAll(memberIds); if (recs == null) { recs = new RecordSet(); } RecordSet notifRecs = groupImpl.getMembersNotification(ctx, userId, members); recs.addAll(notifRecs); for (Record notifRec : notifRecs) { String memberId = notifRec.getString("member"); long recvNotif = notifRec.getInt("recv_notif", 0); if (recvNotif == 2) { userIds.remove(Long.parseLong(memberId)); } } } else userIds.add(userId); } } // =========================new send to ,from conversation end ==================== // exclude sender if (StringUtils.isNotBlank(senderId)) { userIds.remove(Long.parseLong(senderId)); } try { IgnoreLogic ignore = GlobalLogics.getIgnore(); userIds = ignore.formatIgnoreUserListP(ctx, userIds, "", ""); } catch (Exception e) { } return userIds; }
protected void process(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // L.trace("begin process"); String url = StringUtils.removeStart( StringUtils2.joinIgnoreNull(req.getServletPath(), req.getPathInfo()), "/"); if (processDocument(url, req, resp)) return; Invoker invoker = invokers.get(url); if (invoker != null) { invoker.invoke(req, resp); } else { resp.setStatus(404); // Not Found } // L.trace("end process"); }
@TraceCall @Override public Record getPageNoThrow(Context ctx, long pageId) { String sql = new SQLBuilder.Select() .select(StringUtils2.splitArray(BASIC_COLS, ",", true)) .from(pageTable) .where("destroyed_time=0 AND page_id = ${v(page_id)}", "page_id", pageId) .toString(); SQLExecutor se = getSqlExecutor(); Record pageRec = se.executeRecord(sql, null); if (MapUtils.isEmpty(pageRec)) return null; attachBasicInfo(ctx, pageRec); attachDetailInfo(ctx, pageRec); return pageRec; }
@TraceCall @Override public void destroyPage(Context ctx, long pageId, boolean destroyAssociated) { checkUpdatePagePermission(ctx, pageId); String sql; SQLExecutor se = getSqlExecutor(); if (destroyAssociated) { sql = new SQLBuilder.Select() .select("associated_id", "free_circle_ids") .from(pageTable) .where("destroyed_time=0 AND page_id = ${v(page_id)}", "page_id", pageId) .toString(); Record pageRec = se.executeRecord(sql, null); if (MapUtils.isNotEmpty(pageRec)) { long associatedId = pageRec.getInt("associated_id"); long[] freeCircleIds = StringUtils2.splitIntArray(pageRec.getString("free_circle_ids"), ","); long[] allCircleIds = associatedId > 0 ? ArrayUtils.add(freeCircleIds, 0, associatedId) : freeCircleIds; for (long circleId : allCircleIds) { GlobalLogics.getGroup() .updateGroupSimple(ctx, circleId, new Record(), Record.of("page_id", 0L)); } } } sql = new SQLBuilder.Update() .update(pageTable) .value("destroyed_time", DateUtils.nowMillis()) .where("page_id=${v(page_id)}", "page_id", pageId) .toString(); se.executeUpdate(sql); }
@Override protected String getData(Context ctx, Object... args) { if (toIds.isEmpty()) return ""; else return "," + StringUtils2.joinIgnoreBlank(",", toIds) + ","; }
private void attachDetailInfo(Context ctx, Record pageRec) { long associatedId = pageRec.getInt("associated_id", 0L); Record rec = Commons.getUnifiedUser(ctx, associatedId); rec.copyColumn(GRP_COL_ID, "circle_id"); rec.copyColumn(GRP_COL_NAME, "circle_name"); String freeCircleIds = pageRec.getString("free_circle_ids"); RecordSet freeCircleRecs; if (StringUtils.isBlank(freeCircleIds)) { freeCircleRecs = new RecordSet(); } else { freeCircleRecs = GlobalLogics.getGroup() .getGroups( ctx, Constants.PUBLIC_CIRCLE_ID_BEGIN, Constants.PUBLIC_CIRCLE_ID_END, ctx.getViewerIdString(), freeCircleIds, Constants.GROUP_LIGHT_COLS, false); } freeCircleRecs.copyColumn(GRP_COL_ID, "circle_id"); freeCircleRecs.copyColumn(GRP_COL_NAME, "circle_name"); pageRec.put("associated", rec); pageRec.put("free_circles", freeCircleRecs); long[] followerIds = GlobalLogics.getFriendship() .getFollowerIds(ctx, ctx.getViewerId(), 0, Constants.GROUP_ID_BEGIN, 0, 15); RecordSet followerUserRecs = GlobalLogics.getAccount() .getUsers( ctx, ctx.getViewerIdString(), StringUtils2.join(followerIds, ","), AccountLogic.USER_LIGHT_COLUMNS, true); followerUserRecs.retainsCount(5); pageRec.put("followers", followerUserRecs); int objType = Constants.getUserTypeById(associatedId); if (objType == Constants.PUBLIC_CIRCLE_OBJECT) { boolean b = GlobalLogics.getGroup() .hasRight(ctx, associatedId, ctx.getViewerId(), Constants.ROLE_MEMBER); pageRec.put("in_associated_circle", b); } else { pageRec.put("in_associated_circle", false); } // shared count String viewerId = ctx.getViewerIdString(); String pageId = pageRec.getString("page_id"); StreamLogic stream = GlobalLogics.getStream(); Record sharedCount = new Record(); int sharedText = stream.getSharedCount(ctx, viewerId, pageId, TEXT_POST); sharedCount.put("shared_text", sharedText); int sharedPhoto = stream.getSharedCount(ctx, viewerId, pageId, PHOTO_POST); sharedCount.put("shared_photo", sharedPhoto); int sharedBook = stream.getSharedCount(ctx, viewerId, pageId, BOOK_POST); sharedCount.put("shared_book", sharedBook); int sharedApk = stream.getSharedCount(ctx, viewerId, pageId, APK_POST); sharedCount.put("shared_apk", sharedApk); int sharedLink = stream.getSharedCount(ctx, viewerId, pageId, LINK_POST); sharedCount.put("shared_link", sharedLink); int shared_static_file = stream.getSharedCount(ctx, viewerId, pageId, FILE_POST); sharedCount.put("shared_static_file", shared_static_file); int shared_audio = stream.getSharedCount(ctx, viewerId, pageId, AUDIO_POST); sharedCount.put("shared_audio", shared_audio); int shared_video = stream.getSharedCount(ctx, viewerId, pageId, VIDEO_POST); sharedCount.put("shared_video", shared_video); sharedCount.put( "shared_poll", GlobalLogics.getPoll().getRelatedPollCount(ctx, viewerId, pageId)); String eventIds = GlobalLogics.getGroup().getPageEvents(ctx, Long.parseLong(pageId)); Set<String> set = StringUtils2.splitSet(eventIds, ",", true); sharedCount.put("shared_event", set.size()); pageRec.put("shared_count", sharedCount); }