Hai friends,In my last blog, i have explained you objects involved in chatter , data model of chatter and how to query from that objects.In this post i will explain you how to get them on to Vfpage and chatting from Vfpage.
I am giving code samples,please follow them,by comments you can understand the code.
Controller:-
public class chatterController {
public String UserStatus { get; set; }
public String profileImageUrl { get; set;
public String post { get; set; }
public String AddAFeedPost { get; set; }
List<NewsFeed> myfeed = New List<NewsFeed>();
List<user> lstuser;
public chatterController ()
{
lstuser = [select FullPhotoUrl from User where Id =: UserInfo.getUserId()]; // User profile photo
profileImageUrl=lstuser[0].FullPhotoUrl;
}
public List<EntitySubscription> GetFollowing() // Everyone we're following
{
List<EntitySubscription> followingES = [
select id, parentid, subscriberid, parent.name
from EntitySubscription
where subscriberid = :UserInfo.getUserId() // user id.
];
return followingES;
}
public List<EntitySubscription> GetFollowers() // All users who are following us
{
List<EntitySubscription> followers = [
select id, subscriberid, subscriber.name
from EntitySubscription
where parentid = :UserInfo.getUserId() // user id.
];
return followers;
}
public void DoUserStatus()
{
User user = [select id, CurrentStatus from User where id = :UserInfo.getUserId()];
user.CurrentStatus = UserStatus;
update user;
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.INFO, 'Status Updated'));
UserStatus ='';
}
public void AddPost() // post from vfpage.
{
FeedItem fpost = new FeedItem();
fpost.ParentId = UserInfo.getUserId();
fpost.Body = AddAFeedPost;
insert fpost;
ApexPages.addMessage(new ApexPages.Message(
ApexPages.Severity.INFO, 'Successfully Posted to Wall'));
AddAFeedPost = '';
}
public List<NewsFeed> NewsFeed() { / Retrieving all feeds form Newsfeed
List<NewsFeed> myfeed = [SELECT Id, Type,
CreatedById, CreatedBy.FirstName, CreatedBy.LastName,CreatedDate,
ParentId, Parent.Name,
Body, Title, LinkUrl, ContentData, ContentFileName,
(SELECT Id, FieldName, OldValue, NewValue
FROM FeedTrackedChanges ORDER BY Id DESC),
(SELECT Id, CommentBody, CreatedDate,
CreatedBy.FirstName, CreatedBy.LastName
FROM FeedComments ORDER BY CreatedDate LIMIT 10),
(SELECT CreatedBy.FirstName, CreatedBy.LastName
FROM FeedLikes)
FROM NewsFeed
ORDER BY CreatedDate DESC, Id DESC
LIMIT 20];
return myfeed;
}
}
Visualforce page code:-
<apex:page controller="chatterController3" tabStyle="contact" showheader="false">
<Script>
function addComment(recId)
{
alert(recId);
window.showModalDialog('/apex/commentpage?id='+recId ,"dialogWidth:300px; dialogHeight:200px; center:yes");
window.parent.location.reload();
alert(' Comment Added Successfully');
}
function addLink(recId)
{
alert(recId);
}
</script>
<apex:form >
<apex:pageMessages />
<apex:sectionHeader title="Post to Friends Wall" subtitle="Chatter On Vfpage"/>
<!-- To Post to the wall -->
<apex:pageBlock tabStyle="FEEDItem">
<apex:pageBlockSection title="Post To User Wall">
<table width="150px">
<tr>
<td>
<apex:image id="profileImage" url="{!profileImageUrl}" />
</td>
<td> <apex:outputLabel > Post To Wall:</apex:outputLabel></td><td>
<apex:inputText value="{!AddAFeedPost}" id="status" maxlength="200" size="50" style="padding-bottom: 6px;" />
</td>
<td> <apex:commandButton value="Add A Post" action="{!AddPost}" /> </td>
</tr>
</table>
</apex:pageBlockSection>
<!-- END-->
<!--User Status Update-->
<apex:pageBlockSection title=" User Status Update" >
<apex:inputText value="{!UserStatus}" id="status" maxlength="600" size="40" style="padding-bottom: 6px;" />
<apex:commandButton value="Update Status" action="{!DoUserStatus}" />
</apex:pageBlockSection>
<!-- ENd Of User Status Update-->
<!-- List of records,objects,users that the user folowing-->
<apex:pageBlockSection title="User Following" >
<apex:pageBlocktable value="{!Following}" var="f">
<B> <apex:column value="{!f.parent.name}" headerValue="User Following list" /></B>
</apex:pageBlocktable>
</apex:pageBlockSection>
<!-- End of Followers List-->
<!--Follwers List-->
<apex:pageblockSection title="User Followers">
<apex:pageblockTable value="{!Followers}" var="f">
<apex:column value="{!f.subscriber.name}" headerValue="Followers List"/>
</apex:pageblocktable>
</apex:pageblockSection>
<!-- End Of Followers List-->
<!-- Recent Feeds On User Wall-->
<apex:pageblockSection title="Recent Feeds">
<apex:pageBlockTable value="{!NewsFeed}" var="f" style="width:1000px">
<apex:column width="200" >
<apex:facet name="header">Post By</apex:facet>
<B><apex:outputText value="{!f.Parent.Name}" /></B>
</apex:column>
<apex:column width="200" >
<apex:facet name="header">Message Body</apex:facet>
<B><apex:outputText value="{!f.Body}" style="font:Oblique"/></B>
</apex:column>
<apex:column width="200" >
<apex:facet name="header">Created Date</apex:facet>
<B><apex:outputText value=" {0,date,M/d/yyyy h:mm a}">
<apex:param value="{!f.CreatedDate}" />
</apex:outputText></B>
</apex:column>
<apex:column headerValue="Comments">
<apex:repeat value="{!f.FeedComments}" var="c">
<apex:outputText value="{!c.CreatedBy.FirstName}" id="cfname" style="color:Blue"/> @Said
<apex:outputText value="{!c.CommentBody}" id="comment-repeat"/>
</apex:repeat>
</apex:column>
<apex:column headerValue="Action" width="200">
<apex:outputlabel value="Comment" onclick="addComment('{!f.id}');" style="color:blue" />
<apex:outputlabel value="Link" onclick="addLink('{!f.id}');" style="color:Green" />
</apex:column>
</apex:pageBlockTable>
</apex:pageblockSection>
</apex:pageBlock>
</apex:form>
</apex:page>
Another Vfpage to Pop up and to add Comment when ever you click on comment:-
<apex:page controller="addComment" showHeader="False">
<script>
function refresh(){
self.close();
}
</script>
<apex:form >
<apex:sectionHeader title="Comment" subtitle="Comment To FeedItem"/>
<apex:pageBlock tabStyle="Contact">
<apex:pageBlockButtons location="Bottom">
<apex:commandButton value="Add" Action="{!save}" onclick="refresh()"/>
</apex:pageBlockButtons>
<apex:pageBlockSection title="Add COmment">
<apex:pageBlockSectionItem >
<apex:outputText ><B>Enter Comment:</B></apex:outputText>
<apex:inputTextarea value="{!cmttext}" cols="50" rows="5"/>
</apex:pageBlockSectionItem>
</apex:pageBlockSection>
</apex:pageBlock>
</apex:form>
</apex:page>
Comment Controller:-
public class addComment {
public String cmttext { get; set; }
Public Id cmdid;
public PageReference save() {
FeedComment fcomment = new FeedComment();
cmdid = ApexPages.currentPage().getParameters().get('id');
fcomment.FeedItemId= cmdid;
System.Debug('IDDDDDDDDDDDDDDDDDDDDD'+cmdid);
System.debug('Comment@@@@@@'+cmttext);
fcomment.CommentBody =cmttext;
insert fcomment;
return Null;
}
}
Execute above code.Its perfectly working and you can start chatting from vfpage.
I think this may helps for any one.