/*
* Juick
* Copyright (C) 2008-2011, Ugnich Anton
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see .
*/
package com.juick.server;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collections;
/**
*
* @author Ugnich Anton
*/
public class MessagesQueries {
public static boolean canViewThread(Connection sql, int mid, int uid) {
int privacy = 0;
int owner_uid = 0;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
stmt = sql.prepareStatement("SELECT user_id,privacy FROM messages WHERE messages.message_id=?");
stmt.setInt(1, mid);
rs = stmt.executeQuery();
if (rs.first()) {
owner_uid = rs.getInt(1);
privacy = rs.getInt(2);
}
} catch (SQLException e) {
System.err.println(e);
} finally {
Utils.finishSQL(rs, stmt);
}
return privacy >= 0
|| uid == owner_uid
|| ((privacy == -1 || privacy == -2) && uid > 0 && UserQueries.isInWL(sql, owner_uid, uid))
|| (privacy == -3 && uid > 0 && hasAccessToMessage(sql, mid, uid));
}
public static boolean hasAccessToMessage(Connection sql, int mid, int uid) {
boolean ret = false;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
stmt = sql.prepareStatement("SELECT 1 FROM messages_access WHERE message_id=? AND user_id=?");
stmt.setInt(1, mid);
stmt.setInt(2, uid);
rs = stmt.executeQuery();
if (rs.first()) {
ret = rs.getInt(1) == 1;
}
} catch (SQLException e) {
System.err.println(e);
} finally {
Utils.finishSQL(rs, stmt);
}
return ret;
}
public static boolean isReadOnly(Connection sql, int mid) {
boolean ret = false;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
stmt = sql.prepareStatement("SELECT readonly FROM messages WHERE message_id=?");
stmt.setInt(1, mid);
rs = stmt.executeQuery();
if (rs.first()) {
ret = rs.getInt(1) == 1;
}
} catch (SQLException e) {
System.err.println(e);
} finally {
Utils.finishSQL(rs, stmt);
}
return ret;
}
public static boolean isSubscribed(Connection sql, int uid, int mid) {
boolean ret = false;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
stmt = sql.prepareStatement("SELECT 1 FROM subscr_messages WHERE suser_id=? AND message_id=?");
stmt.setInt(1, uid);
stmt.setInt(2, mid);
rs = stmt.executeQuery();
if (rs.first()) {
ret = rs.getInt(1) == 1;
}
} catch (SQLException e) {
System.err.println(e);
} finally {
Utils.finishSQL(rs, stmt);
}
return ret;
}
public static int getMessagePrivacy(Connection sql, int mid) {
return SQLHelpers.getInt(sql, "SELECT privacy FROM messages WHERE message_id=?", mid, -4);
}
public static com.juick.Message getMessage(Connection sql, int mid) {
com.juick.Message msg = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
stmt = sql.prepareStatement("SELECT messages.user_id,users.nick,TIMESTAMPDIFF(MINUTE,messages.ts,NOW()),DATE_FORMAT(messages.ts,'%Y-%m-%d %H:%i:%s'),messages.readonly,messages.privacy,messages.replies,messages.attach,messages.place_id,messages.lat,messages.lon FROM messages INNER JOIN users ON messages.user_id=users.id WHERE messages.message_id=?");
stmt.setInt(1, mid);
rs = stmt.executeQuery();
if (rs.first()) {
msg = new com.juick.Message();
msg.MID = mid;
msg.User = new com.juick.User();
msg.User.UID = rs.getInt(1);
msg.User.UName = rs.getString(2);
msg.TimeAgo = rs.getInt(3);
msg.TimestampString = rs.getString(4);
msg.ReadOnly = rs.getBoolean(5);
msg.Privacy = rs.getInt(6);
msg.FriendsOnly = msg.Privacy < 0;
msg.Replies = rs.getInt(7);
msg.AttachmentType = rs.getString(8);
//if (rs.getInt(9) > 0) {
// msg.Place = PlacesQueries.getPlace(sql, rs.getInt(9));
//}
if (rs.getDouble(10) != 0) {
msg.Place = new com.juick.Place();
msg.Place.lat = rs.getDouble(10);
msg.Place.lon = rs.getDouble(11);
}
}
} catch (SQLException e) {
System.err.println(e);
} finally {
Utils.finishSQL(rs, stmt);
}
if (msg == null) {
return null;
}
try {
stmt = sql.prepareStatement("SELECT tags,repliesby,txt FROM messages_txt WHERE message_id=?");
stmt.setInt(1, mid);
rs = stmt.executeQuery();
if (rs.first()) {
if (rs.getString(1) != null) {
msg.parseTags(rs.getString(1));
}
msg.RepliesBy = rs.getString(2);
msg.Text = rs.getString(3);
}
} catch (SQLException e) {
System.err.println(e);
} finally {
Utils.finishSQL(rs, stmt);
}
return msg;
}
public static com.juick.Message getReply(Connection sql, int mid, int rid) {
com.juick.Message msg = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
stmt = sql.prepareStatement("SELECT replies.user_id,users.nick,replies.replyto,DATE_FORMAT(replies.ts,'%Y-%m-%d %H:%i:%s'),replies.attach,replies.txt FROM replies INNER JOIN users ON replies.user_id=users.id WHERE replies.message_id=? AND replies.reply_id=?");
stmt.setInt(1, mid);
stmt.setInt(2, rid);
rs = stmt.executeQuery();
if (rs.first()) {
msg = new com.juick.Message();
msg.MID = mid;
msg.RID = rid;
msg.User = new com.juick.User();
msg.User.UID = rs.getInt(1);
msg.User.UName = rs.getString(2);
msg.ReplyTo = rs.getInt(3);
msg.TimestampString = rs.getString(4);
msg.AttachmentType = rs.getString(5);
msg.Text = rs.getString(6);
}
} catch (SQLException e) {
System.err.println(e);
} finally {
Utils.finishSQL(rs, stmt);
}
return msg;
}
public static com.juick.User getMessageAuthor(Connection sql, int mid) {
com.juick.User user = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
stmt = sql.prepareStatement("SELECT messages.user_id,users.nick FROM messages INNER JOIN users ON messages.user_id=users.id WHERE messages.message_id=?");
stmt.setInt(1, mid);
rs = stmt.executeQuery();
if (rs.first()) {
user = new com.juick.User();
user.UID = rs.getInt(1);
user.UName = rs.getString(2);
}
} catch (SQLException e) {
System.err.println(e);
} finally {
Utils.finishSQL(rs, stmt);
}
return user;
}
public static ArrayList getMessageTagsIDs(Connection sql, int mid) {
ArrayList tids = new ArrayList();
PreparedStatement stmt = null;
ResultSet rs = null;
try {
stmt = sql.prepareStatement("SELECT tag_id FROM messages_tags WHERE message_id=?");
stmt.setInt(1, mid);
rs = stmt.executeQuery();
rs.beforeFirst();
while (rs.next()) {
tids.add(rs.getInt(1));
}
} catch (SQLException e) {
System.err.println(e);
} finally {
Utils.finishSQL(rs, stmt);
}
return tids;
}
public static ArrayList getMessageRecommendations(Connection sql, int mid) {
ArrayList users = new ArrayList();
PreparedStatement stmt = null;
ResultSet rs = null;
try {
stmt = sql.prepareStatement("SELECT users.nick FROM favorites INNER JOIN users ON (favorites.message_id=? AND favorites.user_id=users.id)");
stmt.setInt(1, mid);
rs = stmt.executeQuery();
rs.beforeFirst();
while (rs.next()) {
users.add(rs.getString(1));
}
} catch (SQLException e) {
System.err.println(e);
} finally {
Utils.finishSQL(rs, stmt);
}
return users;
}
public static ArrayList getAll(Connection sql, int visitor_uid, int before) {
ArrayList mids = new ArrayList(20);
PreparedStatement stmt = null;
ResultSet rs = null;
try {
if (visitor_uid > 1) {
if (before > 0) {
stmt = sql.prepareStatement("SELECT message_id FROM messages WHERE message_id AND (privacy>0 OR user_id=?) AND lang='ru' AND user_id NOT IN (SELECT bl_user_id FROM bl_users WHERE user_id=?) ORDER BY message_id DESC LIMIT 20");
stmt.setInt(1, before);
stmt.setInt(2, visitor_uid);
stmt.setInt(3, visitor_uid);
} else {
stmt = sql.prepareStatement("SELECT message_id FROM messages WHERE (privacy>0 OR user_id=?) AND lang='ru' AND user_id NOT IN (SELECT bl_user_id FROM bl_users WHERE user_id=?) ORDER BY message_id DESC LIMIT 20");
stmt.setInt(1, visitor_uid);
stmt.setInt(2, visitor_uid);
}
} else {
if (before > 0) {
stmt = sql.prepareStatement("SELECT message_id FROM messages WHERE message_id AND privacy>0 AND lang='ru' ORDER BY message_id DESC LIMIT 20");
stmt.setInt(1, before);
} else {
stmt = sql.prepareStatement("SELECT message_id FROM messages WHERE privacy>0 AND lang='ru' ORDER BY message_id DESC LIMIT 20");
}
}
rs = stmt.executeQuery();
rs.beforeFirst();
while (rs.next()) {
mids.add(rs.getInt(1));
}
} catch (SQLException e) {
System.err.println(e);
} finally {
Utils.finishSQL(rs, stmt);
}
return mids;
}
public static ArrayList getTag(Connection sql, int tid, int visitor_uid, int before, int cnt) {
ArrayList mids = new ArrayList(20);
PreparedStatement stmt = null;
ResultSet rs = null;
try {
if (before > 0) {
stmt = sql.prepareStatement("SELECT messages.message_id FROM messages_tags INNER JOIN messages USING(message_id) WHERE messages_tags.tag_id=? AND messages.message_id AND (messages.privacy>0 OR messages.user_id=?) ORDER BY messages.message_id DESC LIMIT ?");
stmt.setInt(1, tid);
stmt.setInt(2, before);
stmt.setInt(3, visitor_uid);
stmt.setInt(4, cnt);
} else {
stmt = sql.prepareStatement("SELECT messages.message_id FROM messages_tags INNER JOIN messages USING(message_id) WHERE messages_tags.tag_id=? AND (messages.privacy>0 OR messages.user_id=?) ORDER BY messages.message_id DESC LIMIT ?");
stmt.setInt(1, tid);
stmt.setInt(2, visitor_uid);
stmt.setInt(3, cnt);
}
rs = stmt.executeQuery();
rs.beforeFirst();
while (rs.next()) {
mids.add(rs.getInt(1));
}
} catch (SQLException e) {
System.err.println(e);
} finally {
Utils.finishSQL(rs, stmt);
}
return mids;
}
public static ArrayList getTags(Connection sql, String tids, int visitor_uid, int before, int cnt) {
ArrayList mids = new ArrayList(20);
PreparedStatement stmt = null;
ResultSet rs = null;
try {
if (before > 0) {
stmt = sql.prepareStatement("SELECT messages.message_id FROM messages_tags INNER JOIN messages USING(message_id) WHERE messages_tags.tag_id IN (" + tids + ") AND messages.message_id AND (messages.privacy>0 OR messages.user_id=?) ORDER BY messages.message_id DESC LIMIT ?");
stmt.setInt(1, before);
stmt.setInt(2, visitor_uid);
stmt.setInt(3, cnt);
} else {
stmt = sql.prepareStatement("SELECT messages.message_id FROM messages_tags INNER JOIN messages USING(message_id) WHERE messages_tags.tag_id IN (" + tids + ") AND (messages.privacy>0 OR messages.user_id=?) ORDER BY messages.message_id DESC LIMIT ?");
stmt.setInt(1, visitor_uid);
stmt.setInt(2, cnt);
}
rs = stmt.executeQuery();
rs.beforeFirst();
while (rs.next()) {
mids.add(rs.getInt(1));
}
} catch (SQLException e) {
System.err.println(e);
} finally {
Utils.finishSQL(rs, stmt);
}
return mids;
}
public static ArrayList getPlace(Connection sql, int place_id, int visitor_uid, int before) {
ArrayList mids = new ArrayList(20);
PreparedStatement stmt = null;
ResultSet rs = null;
try {
if (before > 0) {
stmt = sql.prepareStatement("SELECT message_id FROM messages WHERE place_id=? AND message_id AND (privacy>0 OR user_id=?) ORDER BY message_id DESC LIMIT 20");
stmt.setInt(1, place_id);
stmt.setInt(2, before);
stmt.setInt(3, visitor_uid);
} else {
stmt = sql.prepareStatement("SELECT message_id FROM messages WHERE place_id=? AND (privacy>0 OR user_id=?) ORDER BY message_id DESC LIMIT 20");
stmt.setInt(1, place_id);
stmt.setInt(2, visitor_uid);
}
rs = stmt.executeQuery();
rs.beforeFirst();
while (rs.next()) {
mids.add(rs.getInt(1));
}
} catch (SQLException e) {
System.err.println(e);
} finally {
Utils.finishSQL(rs, stmt);
}
return mids;
}
public static ArrayList getMyFeed(Connection sql, int uid, int before) {
ArrayList mids = new ArrayList(40);
PreparedStatement stmt = null;
ResultSet rs = null;
try {
if (before > 0) {
stmt = sql.prepareStatement("SELECT message_id FROM messages INNER JOIN subscr_users ON (subscr_users.suser_id=? AND subscr_users.user_id=messages.user_id) WHERE message_id AND (privacy>=0 OR (privacy>=-2 AND privacy<=-1 AND messages.user_id IN (SELECT user_id FROM wl_users WHERE wl_user_id=?))) ORDER BY message_id DESC LIMIT 20");
stmt.setInt(1, uid);
stmt.setInt(2, before);
stmt.setInt(3, uid);
} else {
stmt = sql.prepareStatement("SELECT message_id FROM messages INNER JOIN subscr_users ON (subscr_users.suser_id=? AND subscr_users.user_id=messages.user_id) WHERE (privacy>=0 OR (privacy>=-2 AND privacy<=-1 AND messages.user_id IN (SELECT user_id FROM wl_users WHERE wl_user_id=?))) ORDER BY message_id DESC LIMIT 20");
stmt.setInt(1, uid);
stmt.setInt(2, uid);
}
rs = stmt.executeQuery();
rs.beforeFirst();
while (rs.next()) {
mids.add(rs.getInt(1));
}
} catch (SQLException e) {
System.err.println(e);
} finally {
Utils.finishSQL(rs, stmt);
}
try {
if (before > 0) {
stmt = sql.prepareStatement("SELECT message_id FROM messages WHERE user_id=? AND message_id ORDER BY message_id DESC LIMIT 20");
stmt.setInt(1, uid);
stmt.setInt(2, before);
} else {
stmt = sql.prepareStatement("SELECT message_id FROM messages WHERE user_id=? ORDER BY message_id DESC LIMIT 20");
stmt.setInt(1, uid);
}
rs = stmt.executeQuery();
rs.beforeFirst();
while (rs.next()) {
mids.add(rs.getInt(1));
}
} catch (SQLException e) {
System.err.println(e);
} finally {
Utils.finishSQL(rs, stmt);
}
Collections.sort(mids, Collections.reverseOrder());
int remove = mids.size() - 20;
for (int i = 0; i < remove; i++) {
mids.remove(20);
}
return mids;
}
public static ArrayList getPrivate(Connection sql, int uid, int before) {
ArrayList mids = new ArrayList(20);
PreparedStatement stmt = null;
ResultSet rs = null;
try {
if (before > 0) {
stmt = sql.prepareStatement("SELECT message_id FROM (SELECT message_id FROM messages_access WHERE user_id=? AND message_id UNION SELECT message_id FROM messages WHERE user_id=? AND privacy<-1 AND message_id) AS t ORDER BY message_id DESC LIMIT 20");
stmt.setInt(1, uid);
stmt.setInt(2, before);
stmt.setInt(3, uid);
stmt.setInt(4, before);
} else {
stmt = sql.prepareStatement("SELECT message_id FROM (SELECT message_id FROM messages_access WHERE user_id=? UNION SELECT message_id FROM messages WHERE user_id=? AND privacy<-1) AS t ORDER BY message_id DESC LIMIT 20");
stmt.setInt(1, uid);
stmt.setInt(2, uid);
}
rs = stmt.executeQuery();
rs.beforeFirst();
while (rs.next()) {
mids.add(rs.getInt(1));
}
} catch (SQLException e) {
System.err.println(e);
} finally {
Utils.finishSQL(rs, stmt);
}
return mids;
}
public static ArrayList getDiscussions(Connection sql, int uid, int before) {
ArrayList mids = new ArrayList(20);
PreparedStatement stmt = null;
ResultSet rs = null;
try {
if (before > 0) {
stmt = sql.prepareStatement("SELECT message_id FROM subscr_messages WHERE suser_id=? AND message_id ORDER BY message_id DESC LIMIT 20");
stmt.setInt(1, uid);
stmt.setInt(2, before);
} else {
stmt = sql.prepareStatement("SELECT message_id FROM subscr_messages WHERE suser_id=? ORDER BY message_id DESC LIMIT 20");
stmt.setInt(1, uid);
}
rs = stmt.executeQuery();
rs.beforeFirst();
while (rs.next()) {
mids.add(rs.getInt(1));
}
} catch (SQLException e) {
System.err.println(e);
} finally {
Utils.finishSQL(rs, stmt);
}
return mids;
}
public static ArrayList getRecommended(Connection sql, int uid, int before) {
ArrayList mids = new ArrayList(20);
PreparedStatement stmt = null;
ResultSet rs = null;
try {
if (before > 0) {
stmt = sql.prepareStatement("SELECT message_id FROM favorites WHERE user_id IN (SELECT user_id FROM subscr_users WHERE suser_id=?) AND message_id ORDER BY message_id DESC LIMIT 20");
stmt.setInt(1, uid);
stmt.setInt(2, before);
} else {
stmt = sql.prepareStatement("SELECT message_id FROM favorites WHERE user_id IN (SELECT user_id FROM subscr_users WHERE suser_id=?) ORDER BY message_id DESC LIMIT 20");
stmt.setInt(1, uid);
}
rs = stmt.executeQuery();
rs.beforeFirst();
while (rs.next()) {
mids.add(rs.getInt(1));
}
} catch (SQLException e) {
System.err.println(e);
} finally {
Utils.finishSQL(rs, stmt);
}
return mids;
}
public static ArrayList getPopular(Connection sql, int before) {
ArrayList mids = new ArrayList(20);
PreparedStatement stmt = null;
ResultSet rs = null;
try {
if (before > 0) {
stmt = sql.prepareStatement("SELECT message_id FROM messages WHERE message_id AND privacy>0 AND popular=1 ORDER BY message_id DESC LIMIT 20");
stmt.setInt(1, before);
} else {
stmt = sql.prepareStatement("SELECT message_id FROM messages WHERE privacy>0 AND popular=1 ORDER BY message_id DESC LIMIT 20");
}
rs = stmt.executeQuery();
rs.beforeFirst();
while (rs.next()) {
mids.add(rs.getInt(1));
}
} catch (SQLException e) {
System.err.println(e);
} finally {
Utils.finishSQL(rs, stmt);
}
return mids;
}
public static ArrayList getPhotos(Connection sql, int visitor_uid, int before) {
ArrayList mids = new ArrayList(20);
PreparedStatement stmt = null;
ResultSet rs = null;
try {
if (before > 0) {
stmt = sql.prepareStatement("SELECT message_id FROM messages WHERE message_id AND (privacy>0 OR user_id=?) AND attach IS NOT NULL ORDER BY message_id DESC LIMIT 20");
stmt.setInt(1, before);
stmt.setInt(2, visitor_uid);
} else {
stmt = sql.prepareStatement("SELECT message_id FROM messages WHERE (privacy>0 OR user_id=?) AND attach IS NOT NULL ORDER BY message_id DESC LIMIT 20");
stmt.setInt(1, visitor_uid);
}
rs = stmt.executeQuery();
rs.beforeFirst();
while (rs.next()) {
mids.add(rs.getInt(1));
}
} catch (SQLException e) {
System.err.println(e);
} finally {
Utils.finishSQL(rs, stmt);
}
return mids;
}
public static ArrayList getSearch(Connection sql, Connection sqlSearch, String search, int before) {
ArrayList mids0 = new ArrayList(20);
PreparedStatement stmt = null;
ResultSet rs = null;
try {
if (before > 0) {
stmt = sqlSearch.prepareStatement("SELECT id AS message_id FROM messages WHERE MATCH(?) AND id ORDER BY id DESC LIMIT 25");
stmt.setString(1, search);
stmt.setInt(2, before);
} else {
stmt = sqlSearch.prepareStatement("SELECT id AS message_id FROM messages WHERE MATCH(?) ORDER BY id DESC LIMIT 25");
stmt.setString(1, search);
}
rs = stmt.executeQuery();
rs.beforeFirst();
while (rs.next()) {
mids0.add(rs.getInt(1));
}
} catch (SQLException e) {
System.err.println(e);
} finally {
Utils.finishSQL(rs, stmt);
}
ArrayList mids = new ArrayList(20);
if (mids0.size() > 0) {
try {
stmt = sql.prepareStatement("SELECT message_id FROM messages WHERE message_id IN (" + Utils.convertArrayInt2String(mids0) + ") AND privacy>0 ORDER BY message_id DESC LIMIT 20");
rs = stmt.executeQuery();
rs.beforeFirst();
while (rs.next()) {
mids.add(rs.getInt(1));
}
} catch (SQLException e) {
System.err.println(e);
} finally {
Utils.finishSQL(rs, stmt);
}
}
return mids;
}
public static ArrayList getUserBlog(Connection sql, int UID, int privacy, int before) {
ArrayList mids = new ArrayList(20);
PreparedStatement stmt = null;
ResultSet rs = null;
try {
if (before > 0) {
stmt = sql.prepareStatement("SELECT message_id FROM messages WHERE user_id=? AND message_id AND privacy>=" + privacy + " ORDER BY message_id DESC LIMIT 20");
stmt.setInt(1, UID);
stmt.setInt(2, before);
} else {
stmt = sql.prepareStatement("SELECT message_id FROM messages WHERE user_id=? AND privacy>=" + privacy + " ORDER BY message_id DESC LIMIT 20");
stmt.setInt(1, UID);
}
rs = stmt.executeQuery();
rs.beforeFirst();
while (rs.next()) {
mids.add(rs.getInt(1));
}
} catch (SQLException e) {
System.err.println(e);
} finally {
Utils.finishSQL(rs, stmt);
}
return mids;
}
public static ArrayList getUserTag(Connection sql, int UID, int TID, int privacy, int before) {
ArrayList mids = new ArrayList(20);
PreparedStatement stmt = null;
ResultSet rs = null;
try {
if (before > 0) {
stmt = sql.prepareStatement("SELECT messages.message_id FROM messages_tags INNER JOIN messages USING(message_id) WHERE messages.user_id=? AND messages_tags.tag_id=? AND messages.message_id AND messages.privacy>=" + privacy + " ORDER BY messages.message_id DESC LIMIT 20");
stmt.setInt(1, UID);
stmt.setInt(2, TID);
stmt.setInt(3, before);
} else {
stmt = sql.prepareStatement("SELECT messages.message_id FROM messages_tags INNER JOIN messages USING(message_id) WHERE messages.user_id=? AND messages_tags.tag_id=? AND messages.privacy>=" + privacy + " ORDER BY messages.message_id DESC LIMIT 20");
stmt.setInt(1, UID);
stmt.setInt(2, TID);
}
rs = stmt.executeQuery();
rs.beforeFirst();
while (rs.next()) {
mids.add(rs.getInt(1));
}
} catch (SQLException e) {
System.err.println(e);
} finally {
Utils.finishSQL(rs, stmt);
}
return mids;
}
public static ArrayList getUserRecommendations(Connection sql, int UID, int before) {
ArrayList mids = new ArrayList(20);
PreparedStatement stmt = null;
ResultSet rs = null;
try {
if (before > 0) {
stmt = sql.prepareStatement("SELECT message_id FROM favorites WHERE user_id=? AND message_id ORDER BY message_id DESC LIMIT 20");
stmt.setInt(1, UID);
stmt.setInt(2, before);
} else {
stmt = sql.prepareStatement("SELECT message_id FROM favorites WHERE user_id=? ORDER BY message_id DESC LIMIT 20");
stmt.setInt(1, UID);
}
rs = stmt.executeQuery();
rs.beforeFirst();
while (rs.next()) {
mids.add(rs.getInt(1));
}
} catch (SQLException e) {
System.err.println(e);
} finally {
Utils.finishSQL(rs, stmt);
}
return mids;
}
public static ArrayList getUserPhotos(Connection sql, int UID, int privacy, int before) {
ArrayList mids = new ArrayList(20);
PreparedStatement stmt = null;
ResultSet rs = null;
try {
if (before > 0) {
stmt = sql.prepareStatement("SELECT message_id FROM messages WHERE user_id=? AND message_id AND privacy>=" + privacy + " AND attach IS NOT NULL ORDER BY message_id DESC LIMIT 20");
stmt.setInt(1, UID);
stmt.setInt(2, before);
} else {
stmt = sql.prepareStatement("SELECT message_id FROM messages WHERE user_id=? AND privacy>=" + privacy + " AND attach IS NOT NULL ORDER BY message_id DESC LIMIT 20");
stmt.setInt(1, UID);
}
rs = stmt.executeQuery();
rs.beforeFirst();
while (rs.next()) {
mids.add(rs.getInt(1));
}
} catch (SQLException e) {
System.err.println(e);
} finally {
Utils.finishSQL(rs, stmt);
}
return mids;
}
public static ArrayList getUserSearch(Connection sql, Connection sqlSearch, int UID, String search, int privacy, int before) {
ArrayList mids0 = new ArrayList(20);
PreparedStatement stmt = null;
ResultSet rs = null;
try {
if (before > 0) {
stmt = sqlSearch.prepareStatement("SELECT id AS message_id FROM messages WHERE user_id=? AND MATCH(?) AND id ORDER BY id DESC LIMIT 20");
stmt.setInt(1, UID);
stmt.setString(2, search);
stmt.setInt(3, before);
} else {
stmt = sqlSearch.prepareStatement("SELECT id AS message_id FROM messages WHERE user_id=? AND MATCH(?) ORDER BY id DESC LIMIT 20");
stmt.setInt(1, UID);
stmt.setString(2, search);
}
rs = stmt.executeQuery();
rs.beforeFirst();
while (rs.next()) {
mids0.add(rs.getInt(1));
}
} catch (SQLException e) {
System.err.println(e);
} finally {
Utils.finishSQL(rs, stmt);
}
ArrayList mids = new ArrayList(20);
if (mids0.size() > 0) {
try {
stmt = sql.prepareStatement("SELECT message_id FROM messages WHERE message_id IN (" + Utils.convertArrayInt2String(mids0) + ") AND privacy>=" + privacy + " ORDER BY message_id DESC");
rs = stmt.executeQuery();
rs.beforeFirst();
while (rs.next()) {
mids.add(rs.getInt(1));
}
} catch (SQLException e) {
System.err.println(e);
} finally {
Utils.finishSQL(rs, stmt);
}
}
return mids;
}
public static ArrayList getMessages(Connection sql, ArrayList mids) {
ArrayList msgs = new ArrayList(20);
PreparedStatement stmt = null;
ResultSet rs = null;
try {
stmt = sql.prepareStatement("SELECT STRAIGHT_JOIN messages.message_id,messages.user_id,users.nick,messages_txt.tags,messages.readonly,messages.privacy,messages_txt.txt,TIMESTAMPDIFF(MINUTE,messages.ts,NOW()),DATE_FORMAT(messages.ts,'%Y-%m-%d %H:%i:%s'),messages.replies,messages_txt.repliesby,messages.attach,messages.lat,messages.lon FROM (messages INNER JOIN messages_txt ON messages.message_id=messages_txt.message_id) INNER JOIN users ON messages.user_id=users.id WHERE messages.message_id IN (" + Utils.convertArrayInt2String(mids) + ") ORDER BY messages.message_id DESC");
rs = stmt.executeQuery();
rs.beforeFirst();
while (rs.next()) {
com.juick.Message msg = new com.juick.Message();
msg.User = new com.juick.User();
msg.MID = rs.getInt(1);
msg.User.UID = rs.getInt(2);
msg.User.UName = rs.getString(3);
if (rs.getString(4) != null) {
msg.parseTags(rs.getString(4));
}
msg.ReadOnly = rs.getInt(5) == 1;
msg.Privacy = rs.getInt(6);
msg.FriendsOnly = msg.Privacy < 0;
msg.Text = rs.getString(7);
msg.TimeAgo = rs.getInt(8);
msg.TimestampString = rs.getString(9);
msg.Replies = rs.getInt(10);
msg.RepliesBy = rs.getString(11);
msg.AttachmentType = rs.getString(12);
if (rs.getDouble(13) != 0) {
msg.Place = new com.juick.Place();
msg.Place.lat = rs.getDouble(13);
msg.Place.lon = rs.getDouble(14);
}
msgs.add(msg);
}
} catch (SQLException e) {
System.err.println(e);
} finally {
Utils.finishSQL(rs, stmt);
}
return msgs;
}
public static ArrayList getReplies(Connection sql, int mid) {
ArrayList replies = new ArrayList();
PreparedStatement stmt = null;
ResultSet rs = null;
try {
stmt = sql.prepareStatement("SELECT replies.reply_id,replies.replyto,replies.user_id,users.nick,replies.txt,TIMESTAMPDIFF(MINUTE,replies.ts,NOW()),DATE_FORMAT(replies.ts,'%Y-%m-%d %H:%i:%s'),replies.attach FROM replies INNER JOIN users ON replies.user_id=users.id WHERE replies.message_id=? ORDER BY replies.reply_id ASC");
stmt.setInt(1, mid);
rs = stmt.executeQuery();
rs.beforeFirst();
while (rs.next()) {
com.juick.Message msg = new com.juick.Message();
msg.MID = mid;
msg.RID = rs.getInt(1);
msg.ReplyTo = rs.getInt(2);
msg.User = new com.juick.User();
msg.User.UID = rs.getInt(3);
msg.User.UName = rs.getString(4);
msg.Text = rs.getString(5);
msg.TimeAgo = rs.getInt(6);
msg.TimestampString = rs.getString(7);
msg.AttachmentType = rs.getString(8);
replies.add(msg);
}
} catch (SQLException e) {
System.err.println(e);
} finally {
Utils.finishSQL(rs, stmt);
}
return replies;
}
}