public ResponseAction PostFacebook(FacebookPostPart facebookpart) { ResponseAction rsp = new ResponseAction(); List <FacebookAccountPart> FacebookAccountSettings = Facebook_GetAccessToken(facebookpart); string accessToken = ""; string pageId = ""; foreach (FacebookAccountPart Faccount in FacebookAccountSettings) { try { string idalbum = ""; string linktosend = ""; string PostInArea = "feed"; if (string.IsNullOrEmpty(Faccount.IdPage)) { accessToken = Faccount.UserToken; pageId = ""; } else { accessToken = Faccount.PageToken; pageId = ""; } var objFacebookClient = new FacebookClient(accessToken); #region [Get List of Album and if no album create one] if (facebookpart.ContentItem.ContentType == "CommunicationAdvertising") { string TitoloAlbum = "Nessun Album"; Int32 idcampagna = (Int32)(((dynamic)facebookpart.ContentItem).CommunicationAdvertisingPart.CampaignId); if (idcampagna > 0) { ContentItem campagna = _orchardServices.ContentManager.Get(idcampagna); TitoloAlbum = campagna.As <TitlePart>().Title; } else { TitoloAlbum = "Flash"; } dynamic albums = objFacebookClient.Get("me/albums"); foreach (dynamic albumInfo in albums.data) { if (TitoloAlbum == albumInfo.name) { idalbum = albumInfo.id; break; } } if (string.IsNullOrEmpty(idalbum)) { #region [crea album] var albumParameters = new Dictionary <string, object>(); albumParameters["name"] = TitoloAlbum; dynamic myalbum = objFacebookClient.Post("/me/albums", albumParameters); idalbum = myalbum.id; #endregion } } #endregion var parameters = new Dictionary <string, object>(); if (facebookpart.FacebookType == FacebookType.Post) { #region [Post Style] if (facebookpart.ContentItem.ContentType == "CommunicationAdvertising") { ICommunicationService _communicationService; bool tryed = _orchardServices.WorkContext.TryResolve <ICommunicationService>(out _communicationService); if (tryed) { linktosend = _communicationService.GetCampaignLink("Facebook", facebookpart); } else { linktosend = ""; } } else { linktosend = facebookpart.FacebookLink; } if (!string.IsNullOrEmpty(linktosend)) { parameters["message"] = facebookpart.FacebookMessageToPost + " " + linktosend; } else { parameters["message"] = facebookpart.FacebookMessageToPost; } if (facebookpart.HasImage) { if (!string.IsNullOrEmpty(facebookpart.FacebookIdPicture)) { var ContentImage = _orchardServices.ContentManager.Get(Convert.ToInt32(facebookpart.FacebookIdPicture), VersionOptions.Published); string Media_MimeType = ContentImage.As <MediaPart>().MimeType; string Media_FileName = ContentImage.As <MediaPart>().FileName; //string contentTypeMediaUrl = urlHelper.MakeAbsolute(ContentImage.As<MediaPart>().MediaUrl); var mediaPath = HostingEnvironment.IsHosted ? HostingEnvironment.MapPath("~/Media/") ?? "" : Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Media"); string folderpath = ContentImage.As <MediaPart>().FolderPath; if (!string.IsNullOrEmpty(folderpath)) { folderpath += "\\"; } string physicalPath = mediaPath + _shellSettings.Name + "\\" + folderpath + ContentImage.As <MediaPart>().FileName; byte[] photo = System.IO.File.ReadAllBytes(physicalPath); parameters["source"] = new FacebookMediaObject { ContentType = Media_MimeType, //"image/jpeg", FileName = Path.GetFileName(Media_FileName) }.SetValue(photo); parameters["access_token"] = accessToken; // if (!string.IsNullOrEmpty(Faccount.IdPage)) // pageId = Faccount.IdPage; PostInArea = idalbum + "/photos"; } } #endregion } else { #region [Share Link style] if (!string.IsNullOrEmpty(facebookpart.FacebookMessage)) { parameters["message"] = facebookpart.FacebookMessage; } if (!string.IsNullOrEmpty(facebookpart.FacebookCaption)) { parameters["caption"] = facebookpart.FacebookCaption; } if (!string.IsNullOrEmpty(facebookpart.FacebookDescription)) { parameters["description"] = facebookpart.FacebookDescription; } if (!string.IsNullOrEmpty(facebookpart.FacebookName)) { parameters["name"] = facebookpart.FacebookName; } if (facebookpart.ContentItem.ContentType == "CommunicationAdvertising") { ICommunicationService _communicationService; bool tryed = _orchardServices.WorkContext.TryResolve <ICommunicationService>(out _communicationService); if (tryed) { linktosend = _communicationService.GetCampaignLink("Facebook", facebookpart); } else { linktosend = ""; } } else { linktosend = facebookpart.FacebookLink; } if (!string.IsNullOrEmpty(linktosend)) { parameters["link"] = linktosend; if (!string.IsNullOrEmpty(facebookpart.FacebookPicture)) { parameters["picture"] = facebookpart.FacebookPicture; } } else { if (!string.IsNullOrEmpty(facebookpart.FacebookIdPicture)) { var ContentImage = _orchardServices.ContentManager.Get(Convert.ToInt32(facebookpart.FacebookIdPicture), VersionOptions.Published); string Media_MimeType = ContentImage.As <MediaPart>().MimeType; string Media_FileName = ContentImage.As <MediaPart>().FileName; //string contentTypeMediaUrl = urlHelper.MakeAbsolute(ContentImage.As<MediaPart>().MediaUrl); var mediaPath = HostingEnvironment.IsHosted ? HostingEnvironment.MapPath("~/Media/") ?? "" : Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Media"); string folderpath = ContentImage.As <MediaPart>().FolderPath; if (!string.IsNullOrEmpty(folderpath)) { folderpath += "\\"; } string physicalPath = mediaPath + _shellSettings.Name + "\\" + folderpath + ContentImage.As <MediaPart>().FileName; byte[] photo = System.IO.File.ReadAllBytes(physicalPath); parameters["source"] = new FacebookMediaObject { ContentType = Media_MimeType, //"image/jpeg", FileName = Path.GetFileName(Media_FileName) }.SetValue(photo); parameters["access_token"] = accessToken; // if (!string.IsNullOrEmpty(Faccount.IdPage)) // pageId = Faccount.IdPage; PostInArea = idalbum + "/photos"; } } #endregion } if (pageId != "") { pageId += "/"; } var objresponsePost = objFacebookClient.Post(pageId + PostInArea, parameters); rsp.Message = "Facebook Posted"; } catch (Exception ex) { rsp.Success = false; rsp.Message = "Facebook Posting Error Message: " + ex.Message; } _notifier.Add(NotifyType.Information, T(rsp.Message)); } return(rsp); }
public List <FacebookAccountPart> Facebook_GetAccessToken(FacebookPostPart facebookpart) { List <FacebookAccountPart> allparts = _orchardServices.ContentManager.Query().ForType(new string[] { "SocialFacebookAccount" }).ForPart <FacebookAccountPart>().List().Where(x => x.Valid == true).ToList(); return(allparts.Where(x => facebookpart.AccountList.Contains(x.Id)).ToList()); }