<%
/*
<!--

    Copyright (C) 2003-2010 eXo Platform SAS.

    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 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/>.

-->
*/
%>
<%
  import org.exoplatform.portal.webui.util.Util;
  import org.exoplatform.webui.form.UIFormTextAreaInput;
  import org.exoplatform.social.webui.composer.PopupContainer;
  import org.exoplatform.social.plugin.doc.UIDocViewer;
  import org.exoplatform.social.core.service.LinkProvider;
  import org.exoplatform.social.core.space.model.Space;
  import org.exoplatform.social.webui.Utils;
  import org.apache.commons.lang.StringUtils;
  
  import org.exoplatform.wcm.ext.component.activity.ContentPresentation;
  import org.exoplatform.services.jcr.util.Text;
  import org.exoplatform.services.jcr.core.ManageableRepository;
  import org.exoplatform.container.ExoContainer;
  import org.exoplatform.container.ExoContainerContext;
  import org.exoplatform.container.xml.PortalContainerInfo;
  import org.exoplatform.services.cms.jcrext.activity.ActivityCommonService;
  
  def pcontext = Util.getPortalRequestContext();
  def jsManager = pcontext.getJavascriptManager();
 
  def labelActivityHasBeenDeleted = _ctx.appRes("UIActivity.label.Activity_Has_Been_Deleted");
  def activity = uicomponent.getActivity();
  def activityDeletable = uicomponent.isActivityDeletable();
  def activityCommentAndLikable = uicomponent.isActivityCommentAndLikable();
  def streamOwner = activity.getStreamOwner();
  def currentNode = uicomponent.getDocNode();
%>

<% if (activity && currentNode != null) { //process if not null 

  def labelComment = _ctx.appRes("UIActivity.label.Comment");
  def labelLike = _ctx.appRes("UIActivity.label.Like");
  def labelUnlike = _ctx.appRes("UIActivity.label.Unlike");
  def labelSource = _ctx.appRes("UIActivity.label.Source");
  def inputWriteAComment = _ctx.appRes("UIActivity.input.Add_your_comment");
  def labelShowAllComments = _ctx.appRes("UIActivity.label.Show_All_Comments");
  def labelHideAllComments = _ctx.appRes("UIActivity.label.Hide_All_Comments");
  def labelShowPreviousComments = _ctx.appRes("UIActivity.label.Show_Previous_Comments");
  
  def labelOnePersonLikeThis=_ctx.appRes("UIActivity.label.One_Person_Like_This");
  def labelTwoPersonLikeThis=_ctx.appRes("UIActivity.label.Two_Person_Like_This");
  def labelOneAndOthersLikeThis=_ctx.appRes("UIActivity.label.One_And_Others_Like_This");
  def labelYouLikeThis=_ctx.appRes("UIActivity.label.You_Like_This");
  def labelYouAndOnePersonLikeThis=_ctx.appRes("UIActivity.label.You_And_One_Person_Like_This");
  def labelYouAndOthersLikeThis=_ctx.appRes("UIActivity.label.You_And_Others_Like_This");
  
  def labelToDeleteThisActivity=_ctx.appRes("UIActivity.msg.Are_You_Sure_To_Delete_This_Activity");
  def labelToDeleteThisComment=_ctx.appRes("UIActivity.msg.Are_You_Sure_To_Delete_This_Comment");

  def likeActivityAction = uicomponent.event("LikeActivity", "true");
  def unlikeActivityAction = uicomponent.event("LikeActivity", "false");

  def commentList = uicomponent.getComments();
  def allComments = uicomponent.getAllComments();
  if (allComments) {
    labelShowAllComments = labelShowAllComments.replace("{0}", allComments.size() + "");
    labelHideAllComments = labelHideAllComments.replace("{0}", allComments.size() + "");

  }
  
  def totalComments = allComments.size();
  def commentsHidden = allComments.size()-commentList.size();
  def displayedIdentityLikes = uicomponent.getDisplayedIdentityLikes();
  def identityLikesNum = 0;
  def totalLikesNum = uicomponent.getIdentityLikes().length;
  def labelLikes = null;
  def loadLikesAction = uicomponent.event("LoadLikes");
  if (displayedIdentityLikes != null) {
    identityLikesNum = displayedIdentityLikes.length;
  }
  
  def commentListStatus = uicomponent.getCommentListStatus();
  def commentFormDisplayed = uicomponent.isCommentFormDisplayed();
  def likesDisplayed = uicomponent.isAllLoaded();
  //params for init UIActivity javascript object

    def params = """ {
      activityId: '${activity.id}',
    inputWriteAComment: '$inputWriteAComment',
    commentMinCharactersAllowed: '${uicomponent.getCommentMinCharactersAllowed()}',
    commentMaxCharactersAllowed: '${uicomponent.getCommentMaxCharactersAllowed()}',
    commentFormDisplayed: '$commentFormDisplayed',
    allCommentSize: '${allComments.size()}',
    commentFormFocused: '${uicomponent.isCommentFormFocused()}'
    } """
  
  jsManager.require("SHARED/uiForm")
           .require("SHARED/jquery", "jq")
           .require("SHARED/bts_tooltip").addScripts("jq('*[rel=\"tooltip\"]').tooltip();")
           .require("SHARED/social-ui-activity", "activity").addScripts("activity.onLoad($params);");
  
  //make sures commentFormFocused is set to false to prevent any refresh to focus, only focus after post a comment
  uicomponent.setCommentFormFocused(false);
  def ownerName, ownerUri = "#", ownerAvatar, activityPostedTime, activityPostedTimeInSpace;
  def listPeopleLikeBlockClass = "", listPeopleBGClass = "";

  if (!likesDisplayed) {
    listPeopleLikeBlockClass = "displayNone";
  }

  if (uicomponent.isLiked()) {
    if (totalLikesNum > 2) {
      labelLikes = labelYouAndOthersLikeThis.replace("{0}", totalLikesNum - 1 + "");
    } else if (totalLikesNum == 2) {
      def likeId = (displayedIdentityLikes[0] == Utils.getViewerIdentity().getId()) ? displayedIdentityLikes[1] : displayedIdentityLikes[0];
      def id = Utils.getIdentityManager().getIdentity(likeId);
      labelLikes = labelYouAndOnePersonLikeThis.replace("{0}", id.profile.fullName);
    } else {
      labelLikes = labelYouLikeThis;
    }
  } else {
    if (totalLikesNum > 2) {
      def id = Utils.getIdentityManager().getIdentity(displayedIdentityLikes[0]);
      labelLikes = labelOneAndOthersLikeThis.replace("{0}", id.profile.fullName).replace("{1}", totalLikesNum - 1 + "");
    } else if (totalLikesNum == 1) {
      def id = Utils.getIdentityManager().getIdentity(displayedIdentityLikes[0]);
      labelLikes = labelOnePersonLikeThis.replace("{0}", id.profile.fullName);
    } else if (totalLikesNum == 2) {
      def id1 = Utils.getIdentityManager().getIdentity(displayedIdentityLikes[0]);
      def id2 = Utils.getIdentityManager().getIdentity(displayedIdentityLikes[1]);
      labelLikes = labelTwoPersonLikeThis.replace("{0}", id1.profile.fullName).replace("{1}", id2.profile.fullName);
    }
  }

  if (!labelLikes) {
   //hides diplayPeopleBG
   listPeopleBGClass = "displayNone";
  }

  activityContentTitle = activity.title;
  activityPostedTime = uicomponent.getPostedTimeString(_ctx, activity.postedTime);

  def ownerIdentity = uicomponent.ownerIdentity;
  if (uicomponent.isUserActivity()) {
    ownerUri = LinkProvider.getUserProfileUri(ownerIdentity.getRemoteId());
    ownerAvatar = ownerIdentity.profile.avatarUrl;
    ownerName = ownerIdentity.profile.fullName;
    if (!ownerAvatar) ownerAvatar= LinkProvider.PROFILE_DEFAULT_AVATAR_URL;
  } else {
    Space space = Utils.getSpaceService().getSpaceByName(ownerIdentity.remoteId);
    ownerUri = space.url;
    ownerAvatar = space.avatarUrl;
    ownerName = space.displayName;
    if (!ownerAvatar) ownerAvatar = LinkProvider.SPACE_DEFAULT_AVATAR_URL;
  }

  def dMessage = uicomponent.message;
  def dName = uicomponent.docName;
  def fileSize = "";
  def version = 0;
  def title = null;
  def summary = uicomponent.getSummary();
  
  def mimeType = "";
  def binarySrc;
  def uicontentpresentation = uicomponent.addChild(ContentPresentation.class, null, null);
  String repository;
  def preferenceWS;
  def fileComponent;
  if (currentNode) {
    fileSize = uicomponent.getSize();
    version = uicomponent.getVersion();
    title = uicomponent.getTitle();
    binarySrc = uicomponent.getWebdavURL();
    mimeType = uicomponent.getMimeType();
    summary =  uicomponent.getSummary();
    uicontentpresentation.setNode(currentNode);
    repository = ((ManageableRepository)currentNode.getSession().getRepository()).getConfiguration().getName();
    preferenceWS  = currentNode.getSession().getWorkspace().getName();
    fileComponent = uicontentpresentation.getUIComponent(mimeType);
  }
  
  def downloadFileLabel = _ctx.appRes("UIComposerDocumentExtension.label.Download");
  def viewFileLabel = _ctx.appRes("UIComposerDocumentExtension.label.View_File");
  def versionLabel = _ctx.appRes("UIComposerDocumentExtension.label.Version");
  
  ExoContainer container = ExoContainerContext.getCurrentContainer();
  PortalContainerInfo containerInfo = (PortalContainerInfo) container.getComponentInstanceOfType(PortalContainerInfo.class);
  String portalName = containerInfo.getContainerName();
  
  String restContextName = org.exoplatform.ecm.webui.utils.Utils.getRestContextName(portalName);
%>

<div class="activityStream fileActivity uiContentActivity uiDocActivity" id="activityContainer${activity.id}">
  <% uiform.begin() %>
	<div class="activityTimeLine pull-left">
		<div class="activityAvatar avatarCircle">
			<a title="$ownerName" href="$ownerUri">
			  <img alt="$ownerName" src="$ownerAvatar"/>
			</a>
		</div>
		<div class="activityType"><span><i class="uiIconSocFileSharing uiIconSocWhite"></i></span></div>					
	</div><!--end activityTimeLine-->	
    <div class="boxContainer" id="boxContainer">
		<div id="ContextBox${activity.id}"class="uiBox contentBox">
			<div id="ActivityContextBox${activity.id}"> 
				<div class="heading">
					<span class="arrowLeft"></span>
					  <% if (activityDeletable) {%>
						  <a href="javascript:void(0)" data-confirm="$labelToDeleteThisActivity" data-delete="<%=uicomponent.event("DeleteActivity", uicomponent.getId(), "");%>" class="uiIconClose uiIconLightGray controllDelete" id="DeleteActivityButton${activity.id}"></a>
						<%}%>
					<div class="author">
						<a title="$ownerName" href="$ownerUri">$ownerName</a>                
					</div>
					<div class="dataInfor">
						<span class="dateTime"><i class="uiIconClock uiIconLightGray"></i>&nbsp;$activityPostedTime</span>
					<% if (uicomponent.isUserActivity() && uicomponent.isSpaceStreamOwner() && !uicomponent.isUISpaceActivitiesDisplay()) {%>
							<%
							Space spaceSource = Utils.getSpaceService().getSpaceByPrettyName(streamOwner);
              def spaceSourceURI, spaceName;
              if (spaceSource != null) {
                spaceSourceURI = LinkProvider.getSpaceUri(spaceSource.url);
                spaceName = spaceSource.displayName;
              } else {
                spaceSourceURI = LinkProvider.getActivityUriForSpace(streamOwner, streamOwner);
                spaceName = Utils.getSpaceIdentity(streamOwner, false).profile.fullName;
              }
							activityPostedTimeInSpace = uicomponent.getPostedTimeInSpaceString(_ctx, activity.postedTime);
						 %>
						  <a class="spaceName" rel="tooltip" data-placement="bottom" title="$spaceName" href="$spaceSourceURI"><i class="uiIconSocLightGray uiIconSocGroup"></i>&nbsp;$spaceName</a>
						<%} %>						
					</div>
				</div><!--end heading-->
				<div class="description">$dMessage</div><!--end description-->
				<div class="uiBox roundedBottom introBox fileShare">                 
			    <% 
             if(mimeType.startsWith("image")) {
          %>
          <div class="clearfix isPreviewable">
            <a class="pull-left" href="javascript:void(0)" onclick="<%=uicomponent.event("ViewDocument")%>" rel="tooltip" data-placement="bottom" title="$dName">      
              <img src="<%=uicomponent.docThumbnail%>" />
            </a>
          <%
            } else if (org.exoplatform.services.cms.impl.Utils.isSupportThumbnailView(mimeType)) {
          %>
          <div class="clearfix isPreviewable">
            <div id="MediaContent${activity.id}" class="pull-left mediaContent docTypeContent">
	             <%
	               def encodedPath = URLEncoder.encode(currentNode.getPath(), "utf-8");
	               encodedPath = encodedPath.replaceAll ("%2F", "/");
	               String docThumbnail = "/" + portalName + "/" + restContextName + "/thumbnailImage/big/" + repository + "/" + preferenceWS + encodedPath;               
	             %>
	             <a href="javascript:void(0)" onclick="<%= uicomponent.event("ViewDocument")%>" rel="tooltip" data-placement="bottom" title="$title"><img src="$docThumbnail" class="pdfImageBorder"/></a>
	          </div>
	        <%
	          } else if(fileComponent != null) { 
	        %>
	        <div class="clearfix isPreviewable">
            <div id="MediaContent${activity.id}" class="pull-left PlayerContianer">
              <% uicontentpresentation.renderUIComponent(fileComponent);%>
            </div>
          <%
            } else {
              String classIcon = uicomponent.getCssClassIconFile(((title == null) ? dName : title), mimeType);
          %>
            <div class="clearfix isPreviewable">
              <div id="MediaContent${activity.id}" class="fileTypeContent">
                <a href="javascript:void(0)" onclick="<%=uicomponent.event("ViewDocument")%>" rel="tooltip" data-placement="bottom" title="<%=_ctx.appRes("UIActivityComposer.label.UIDocActivityComposer")%>">
                	<i class="$classIcon"></i>
               	</a>
              </div>
          <%
            }
          %>  
              <div class="text">
                <a class="linkTitle" href="javascript:void(0)" onclick="<%= uicomponent.event("ViewDocument")%>">
                    <% if (title == null) { %>
                    $dName
                    <% } else { %>
                    $title
                    <% } %>
                </a>
                <p class="linkDescription">$summary</p>
                <span class="versionFile">
                    <% if (version != 0) { %>
                    $versionLabel $version - 
                    <% } %>
                    $fileSize
                </span>
              </div>
          </div><!--end clearfix -->       
               
			    </div><!--end introBox,linkShare-->     
				  <div class="actionBar clearfix docActivityIcon">	
						<% def toggleDisplayCommentAction = uicomponent.event('ToggleDisplayCommentForm', null, false);
						 def commentLink = "";
						%>
						<% if (activityCommentAndLikable) { %>											
						<ul class="pull-right statusAction">	
						<li>
							<a class="$commentLink"  id="CommentLink${activity.id}" href="javascript:void(0);">
							 <i class="uiIconComment uiIconLightGray"></i>&nbsp;$totalComments
							</a>
						</li>
						<% if (uicomponent.isLiked()) { %>
						<li>
							<a onclick="$unlikeActivityAction" id="UnLikeLink${activity.id}" href="javascript:void(0);">
							   <i class="uiIconThumbUp uiIconBlue"></i>&nbsp;$totalLikesNum
							</a>
						</li>
						<% } else { %>
						<li>
							<a onclick="$likeActivityAction" id="LikeLink${activity.id}" href="javascript:void(0);">
							   <i class="uiIconThumbUp uiIconLightGray "></i>&nbsp;$totalLikesNum
							</a>
						</li>
						<% }%>
						</ul>
						<% }%>
					 <ul class="pull-left statusAction">
						<li><a href="<%= uicomponent.event("ViewDocument")%>"><i class="uiIconWatch uiIconLightGray"></i>&nbsp;$viewFileLabel</a></li> 
						<li><a href="<%= uicomponent.event("DownloadDocument")%>"><i class="uiIconDownload uiIconLightGray"></i>&nbsp;$downloadFileLabel</a></li>
					 </ul>
				</div><!--end actionBar-->		
				<% if (identityLikesNum > 0 || uicomponent.isLiked()) {%>               
        <div class="listLikedBox $listPeopleBGClass">       
              <div class="listPeopleContent">
              <% if (!labelLikes) labelLikes = ""; %>
                        <p>$labelLikes</p>

                <% if (identityLikesNum > 0) {%>
                <div class="listLiked">
                <%
                displayedIdentityLikes.each({
                  def id = Utils.getIdentityManager().getIdentity(it);
                  personLikeFullName = id.profile.fullName;
                  personLikeProfileUri = LinkProvider.getUserProfileUri(id.getRemoteId());
                  personLikeAvatarImageSource = id.profile.avatarUrl;
                  if (!personLikeAvatarImageSource) personLikeAvatarImageSource = LinkProvider.PROFILE_DEFAULT_AVATAR_URL;
                  %>
                    <a class="avatarXSmall" title="$personLikeFullName" href="$personLikeProfileUri">
                      <img src="$personLikeAvatarImageSource" alt="$personLikeFullName" />
                    </a>
                 <% })%>
                    <button onclick="$loadLikesAction" class="btn">...</button>
                </div>
                <% }%>
             </div>             
        </div><!--end list like people--> 
				<%}%>
				<div id="CommentBlockBound${activity.id}" class="commentBox">    
				  <% if (uicomponent.commentListToggleable()) {
				  def showAllCommentsAction = uicomponent.event("SetCommentListStatus", "all");
				  def hideAllCommentsAction = uicomponent.event("SetCommentListStatus", "none");
				  def loadPreviousCommentsAction = uicomponent.event("SetCommentListStatus", "all");
				  %>
				  <div class="commentListInfo clearfix">
            <div class="pull-right numberComment">$commentsHidden/$totalComments</div>
            <% if (commentListStatus.getStatus().equals("latest") || commentListStatus.getStatus().equals("none")) { %>
              <a onclick="$showAllCommentsAction" href="javascript:void(0);">$labelShowAllComments</a>
            <% } else if (commentListStatus.getStatus().equals("all")) { %>
                  <% if (commentsHidden > 0) { %>
                    <a onclick="$loadPreviousCommentsAction" href="javascript:void(0);">$labelShowPreviousComments</a>
                  <% } else { %>
                    <a onclick="$hideAllCommentsAction" href="javascript:void(0);">$labelHideAllComments</a>
                  <% } %>
          <% } %>
          </div>
				 <% } %>
				<div class="commentList">
				  <%
				  def commenterFullName, commenterProfileUri, commentMessage, commentPostedTime, commenterAvatarImgSrc;
				  def first = true, commentContentClass;
				  def commentCounter = 0;
				  commentList.each({
					commentCounter++;
					if (first & !uicomponent.commentListToggleable()) {
					  commentContentClass = "commentContent";
					  first = false;
					} else {
					  commentContentClass = "";
					}
					def id = Utils.getIdentityManager().getIdentity(it.userId);
					commenterFullName = id.profile.fullName;
					commenterProfileUri = LinkProvider.getUserProfileUri(id.getRemoteId());
					commentMessage = it.title;
					commentPostedTime = uicomponent.getPostedTimeString(_ctx, it.postedTime);
					commenterAvatarImgSrc = id.profile.avatarUrl;
					if (!commenterAvatarImgSrc) commenterAvatarImgSrc = LinkProvider.PROFILE_DEFAULT_AVATAR_URL;
				  %>
				 <div id="commentContainer${it.id}">
				  <% if (commentCounter == commentList.size()) {%>
					<div id="CommentBlock${activity.id}${commentCounter}" class="commentItem commentItemLast">
				  <% } else { %>
					<div id="CommentBlock${activity.id}${commentCounter}" class="commentItem">
				  <% } %>
						<div class="commmentLeft">
						  <a class="avatarXSmall" href="$commenterProfileUri" rel="tooltip" data-placement="bottom" title="$commenterFullName" >
							<img alt="$commenterFullName" src="$commenterAvatarImgSrc" />
						  </a>
						</div><!--end commentLeft--> 
						<div class="commentRight">
							<div class="author">
								<a href="$commenterProfileUri">$commenterFullName</a>
								<span class="dateTime">
									 $commentPostedTime
								 </span>
							</div>
							<p class="contentComment">
								$commentMessage
							</p>          
						</div><!--end commentRight-->
					<%
					  if (uicomponent.isCommentDeletable(it.userId)) {
					    String idDeleteComment = "DeleteCommentButton${it.id}";
					%>
					<a href="javascript:void(0)" id="$idDeleteComment" data-confirm="$labelToDeleteThisComment" data-delete="<%= uicomponent.event("DeleteComment", uicomponent.id, it.id); %>"  class="uiIconClose uiIconLightGray controllDelete"></a>	
					<% } %>
					</div><!--end commentItem-->
				</div>
				  <% }) %>
					</div> <!--end commentlist-->
					 <div class="commentList inputContainer" id="InputContainer${activity.id}">
					<%
					  def currentCommenterIdentity = uicomponent.getCommenterIdentity();
					  def currentCommenterUri = LinkProvider.getUserProfileUri(currentCommenterIdentity.getRemoteId());
					  def currentCommenterAvatar = currentCommenterIdentity.profile.avatarUrl;
					  def currentCommenterName = currentCommenterIdentity.profile.fullName;
					  if (!currentCommenterAvatar) currentCommenterAvatar= LinkProvider.PROFILE_DEFAULT_AVATAR_URL;
					%>
					<% if (commentList.size() == 0) { %>
					  <div class="commentItem noCommentFormBox" id="CommentFormBlock${activity.id}">
					<% } else { %>
					  <div class="commentItem commentFormBox" id="CommentFormBlock${activity.id}">
					<% } %>
						<div class="commmentLeft">
							<a class="avatarXSmall" rel="tooltip" data-placement="bottom" title="$currentCommenterName" href="$currentCommenterUri">
								<img src="$currentCommenterAvatar" alt="$currentCommenterName"/>
							</a>
						</div><!--end commentLeft-->
						<div class="commentRight">
							<div class="commentInputBox ">
								 <button class="btn pull-right btn-primary" onclick="<%= uicomponent.event("PostComment") %>" rel="tooltip" data-placement="bottom" title="$labelComment" id="CommentButton${activity.id}">$labelComment</button>
								<div class="commentInput"><% uicomponent.renderChild(UIFormTextAreaInput.class); %></div>
							</div>
						</div><!--end commentRight-->    	
					 </div><!--end commentItem-->					
					</div><!--end commentlist-->	  
				</div><!--end commentBox-->
			</div><!--end #ActivityContextBox${activity.id}-->
		</div> <!--end ContextBox${activity.id}-->	
  </div> <!-- #boxContainer-->	  
  <% uiform.end() %>
</div>
<% } else { %> <!-- activity deleted -->
<div class="activityStream deleted">$labelActivityHasBeenDeleted</div>
<% }%>

