/*
* Box Social™
* http://boxsocial.net/
* Copyright © 2007, David Lachlan Smith
*
* $Id:$
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3 as
* published by the Free Software Foundation.
*
* 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 .
*/
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Text;
using System.Web;
using BoxSocial.Internals;
using BoxSocial.IO;
namespace BoxSocial.Internals
{
public static class StatusFeed
{
public static List GetItems(Core core, User owner)
{
return GetItems(core, owner, 1);
}
public static List GetItems(Core core, User owner, int page)
{
List feedItems = new List();
SelectQuery query = StatusMessage.GetSelectQueryStub(typeof(StatusMessage));
query.AddSort(SortOrder.Descending, "status_time_ut");
query.AddCondition("user_id", owner.Id);
query.LimitCount = 50;
query.LimitStart = (page - 1) * 50;
DataTable feedTable = core.Db.Query(query);
foreach (DataRow dr in feedTable.Rows)
{
feedItems.Add(new StatusMessage(core, owner, dr));
}
return feedItems;
}
public static List GetFriendItems(Core core, User owner)
{
return GetFriendItems(core, owner, 50, 1);
}
public static List GetFriendItems(Core core, User owner, int limit)
{
return GetFriendItems(core, owner, limit, 1);
}
public static List GetFriendItems(Core core, User owner, int limit, int page)
{
List friendIds = owner.GetFriendIds();
List feedItems = new List();
if (friendIds.Count > 0)
{
SelectQuery query = StatusMessage.GetSelectQueryStub(typeof(StatusMessage));
query.AddSort(SortOrder.Descending, "status_time_ut");
query.AddCondition("user_id", ConditionEquality.In, friendIds);
query.LimitCount = limit;
query.LimitStart = (page - 1) * limit;
// if limit is less than 10, we will only get one for each member
if (limit < 10)
{
//query.AddGrouping("user_id");
// WHERE current
}
DataTable feedTable = core.Db.Query(query);
core.LoadUserProfiles(friendIds);
foreach (DataRow dr in feedTable.Rows)
{
feedItems.Add(new StatusMessage(core, core.PrimitiveCache[(long)dr["user_id"]], dr));
}
}
return feedItems;
}
public static StatusMessage GetLatest(Core core, User owner)
{
SelectQuery query = StatusMessage.GetSelectQueryStub(typeof(StatusMessage));
query.AddSort(SortOrder.Descending, "status_time_ut");
query.AddCondition("user_id", owner.Id);
query.LimitCount = 1;
DataTable feedTable = core.Db.Query(query);
if (feedTable.Rows.Count == 1)
{
return new StatusMessage(core, owner, feedTable.Rows[0]);
}
else
{
return null;
}
}
public static StatusMessage SaveMessage(Core core, string message)
{
ApplicationEntry ae = new ApplicationEntry(core, core.Session.LoggedInMember, "Profile");
ae.PublishToFeed(core.Session.LoggedInMember, message, "");
return StatusMessage.Create(core, core.Session.LoggedInMember, message);
}
/*
* TODO: show status feed history
*/
public static void Show(Core core, TPage page, User owner)
{
core.Template.SetTemplate("Profile", "viewstatusfeed");
List items = StatusFeed.GetItems(core, owner, page.page);
foreach (StatusMessage item in items)
{
VariableCollection statusMessageVariableCollection = core.Template.CreateChild("status_messages");
statusMessageVariableCollection.Parse("STATUS_MESSAGE", item.Message);
statusMessageVariableCollection.Parse("STATUS_UPDATED", core.Tz.DateTimeToString(item.GetTime(core.Tz)));
}
core.Display.ParsePagination(core.Uri.BuildStatusUri(owner), page.page, (int)Math.Ceiling(owner.Info.StatusMessages / 10.0));
List breadCrumbParts = new List();
breadCrumbParts.Add(new string[] { "profile", "Profile" });
breadCrumbParts.Add(new string[] { "status", "Status Feed" });
owner.ParseBreadCrumbs(breadCrumbParts);
}
}
}