+
-
-
Twitter Activity
-
- Recent activity on twitter, where people are talking about Umbraco.
-
-
-
- Recent tweets
-
-
-
- @Column(Model)
-
-
-
+
+

+
+
-
+
}
-@helper Column(ITweet[] tweets)
+@if (Model.Any() == false)
{
- foreach (var tweet in tweets.Take(6))
- {
-
-
-
-

-
-
-
-
- }
+
Could not load recent tweets.
}
\ No newline at end of file
diff --git a/OurUmbraco/Community/Controllers/TwitterSearchController.cs b/OurUmbraco/Community/Controllers/TwitterSearchController.cs
index e3aab551..59d21c80 100644
--- a/OurUmbraco/Community/Controllers/TwitterSearchController.cs
+++ b/OurUmbraco/Community/Controllers/TwitterSearchController.cs
@@ -1,9 +1,6 @@
using System;
-using System.Collections.Generic;
using System.Configuration;
using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
using System.Web.Mvc;
using Tweetinvi;
using Tweetinvi.Models;
@@ -11,14 +8,18 @@ using Tweetinvi.Parameters;
using Umbraco.Core;
using Umbraco.Core.Cache;
using Umbraco.Core.Logging;
+using Umbraco.Web;
using Umbraco.Web.Mvc;
namespace OurUmbraco.Community.Controllers
{
public class TwitterSearchController : SurfaceController
{
- public ActionResult TwitterSearchResult(string searchWord = "umbraco")
+ public ActionResult TwitterSearchResult(int numberOfResults = 6)
{
+ if (numberOfResults > 30)
+ numberOfResults = 6;
+
ITweet[] filteredTweets = { };
try
{
@@ -31,18 +32,25 @@ namespace OurUmbraco.Community.Controllers
ConfigurationManager.AppSettings["twitterUserAccessSecret"]);
Tweetinvi.User.GetAuthenticatedUser();
- var searchParameter = new SearchTweetsParameters(searchWord) { SearchType = SearchResultType.Recent };
+ var searchParameter = new SearchTweetsParameters("umbraco") { SearchType = SearchResultType.Recent };
return Search.SearchTweets(searchParameter).ToArray();
}, TimeSpan.FromMinutes(2));
- var usernameFilter = "Technologx,Technologx4Real,SOAzure,AdamSmith1,AdamSmitht1,UriSamuels,coding_jobfeeds,TechSparkUk,ItProjectBoard,liveedutv,AdeboyejoAde,VivacitySocial,CHHCInc,DevOpsBlogs,ItCrowdSource,EquiKey".ToLowerInvariant().Split(',');
- var wordFilter = "exegesis,#Job Alert:,#pigefodboldbsf".ToLowerInvariant().Split(',');
+ var settingsNode = Umbraco.TypedContentAtRoot().FirstOrDefault();
+ if (settingsNode != null)
+ {
+ var usernameFilter = settingsNode.GetPropertyValue
("twitterFilterAccounts")
+ .ToLowerInvariant().Split(',').Where(x => x != string.Empty);
+ var wordFilter = settingsNode.GetPropertyValue("twitterFilterWords")
+ .ToLowerInvariant().Split(',').Where(x => x != string.Empty);
- filteredTweets = tweets.Where(
- x => x.Urls.Any(u => u.ExpandedURL.Contains("umbraco-proxy.com")) == false
- && x.CreatedBy.UserIdentifier.ScreenName.ToLowerInvariant().ContainsAny(usernameFilter) == false
- && x.Text.ToLowerInvariant().ContainsAny(wordFilter) == false).ToArray();
+ filteredTweets = tweets.Where(x =>
+ x.CreatedBy.UserIdentifier.ScreenName.ToLowerInvariant().ContainsAny(usernameFilter) == false
+ && x.Text.ToLowerInvariant().ContainsAny(wordFilter) == false)
+ .Take(numberOfResults)
+ .ToArray();
+ }
}
catch (Exception ex)
{
diff --git a/OurUmbraco/Forum/Controllers/LatestActivityController.cs b/OurUmbraco/Forum/Controllers/LatestActivityController.cs
new file mode 100644
index 00000000..f355cf4b
--- /dev/null
+++ b/OurUmbraco/Forum/Controllers/LatestActivityController.cs
@@ -0,0 +1,31 @@
+using System.Linq;
+using System.Web.Mvc;
+using OurUmbraco.Forum.Services;
+using Umbraco.Web.Mvc;
+
+namespace OurUmbraco.Forum.Controllers
+{
+ public class LatestActivityController : SurfaceController
+ {
+ public ActionResult LatestActivity(int numberOfTopics = 6)
+ {
+ if (numberOfTopics > 30)
+ numberOfTopics = 6;
+
+ var ts = new TopicService(ApplicationContext.DatabaseContext);
+ var topics = ts.GetLatestTopics(numberOfTopics).ToArray();
+ foreach (var topic in topics)
+ {
+ var category = Umbraco.TypedContent(topic.ParentId);
+ if(category != null)
+ topic.CategoryName = category.Name;
+
+ var member = Members.GetById(topic.LatestReplyAuthor) ?? Members.GetById(topic.MemberId);
+ if (member != null)
+ topic.LastReplyAuthorAvatar = Our.Utils.GetMemberAvatar(member, 100);
+ }
+
+ return PartialView("~/Views/Partials/Home/LatestForumActivity.cshtml", topics);
+ }
+ }
+}
diff --git a/OurUmbraco/Forum/Models/ReadOnlyTopic.cs b/OurUmbraco/Forum/Models/ReadOnlyTopic.cs
index b7f8ac1c..127e8028 100644
--- a/OurUmbraco/Forum/Models/ReadOnlyTopic.cs
+++ b/OurUmbraco/Forum/Models/ReadOnlyTopic.cs
@@ -16,5 +16,11 @@ namespace OurUmbraco.Forum.Models
[ResultColumn("LastReplyAuthorName")]
public string LastReplyAuthorName { get; set; }
+
+ [ResultColumn("LastReplyAuthorAvatar")]
+ public string LastReplyAuthorAvatar { get; set; }
+
+ [ResultColumn("CategoryName")]
+ public string CategoryName { get; set; }
}
}
\ No newline at end of file
diff --git a/OurUmbraco/Our/MigrationsHandler.cs b/OurUmbraco/Our/MigrationsHandler.cs
index 840542d3..7a7044cb 100644
--- a/OurUmbraco/Our/MigrationsHandler.cs
+++ b/OurUmbraco/Our/MigrationsHandler.cs
@@ -37,6 +37,7 @@ namespace OurUmbraco.Our
AddMarkAsSolutionReminderSent();
UseNewLoginForm();
UseNewForgotPasswordForm();
+ AddTwitterFilters();
}
private void EnsureMigrationsMarkerPathExists()
@@ -637,5 +638,49 @@ namespace OurUmbraco.Our
LogHelper.Error(string.Format("Migration: '{0}' failed", migrationName), ex);
}
}
+
+
+ private void AddTwitterFilters()
+ {
+ var migrationName = MethodBase.GetCurrentMethod().Name;
+
+ try
+ {
+ var path = HostingEnvironment.MapPath(MigrationMarkersPath + migrationName + ".txt");
+ if (File.Exists(path))
+ return;
+
+ var contentTypeService = ApplicationContext.Current.Services.ContentTypeService;
+ var communityContentType = contentTypeService.GetContentType("Community");
+ var propertyTypeAlias = "twitterFilterAccounts";
+ var textboxMultiple = new DataTypeDefinition("Umbraco.TextboxMultiple");
+
+ var tabName = "Settings";
+ if (communityContentType.PropertyGroups.Contains(tabName) == false)
+ communityContentType.AddPropertyGroup(tabName);
+
+ if (communityContentType.PropertyTypeExists(propertyTypeAlias) == false)
+ {
+ var textboxAccountsFilter = new PropertyType(textboxMultiple, propertyTypeAlias) { Name = "CSV of Twitter accounts to filter" };
+ communityContentType.AddPropertyType(textboxAccountsFilter, tabName);
+ }
+
+ propertyTypeAlias = "twitterFilterWords";
+ if (communityContentType.PropertyTypeExists(propertyTypeAlias) == false)
+ {
+ var textboxWordFilter = new PropertyType(textboxMultiple, propertyTypeAlias) { Name = "CSV of words filter tweets out" };
+ communityContentType.AddPropertyType(textboxWordFilter, tabName);
+ }
+
+ contentTypeService.Save(communityContentType);
+
+ string[] lines = { "" };
+ File.WriteAllLines(path, lines);
+ }
+ catch (Exception ex)
+ {
+ LogHelper.Error(string.Format("Migration: '{0}' failed", migrationName), ex);
+ }
+ }
}
}
diff --git a/OurUmbraco/OurUmbraco.csproj b/OurUmbraco/OurUmbraco.csproj
index 6936bd47..74865bc5 100644
--- a/OurUmbraco/OurUmbraco.csproj
+++ b/OurUmbraco/OurUmbraco.csproj
@@ -374,6 +374,7 @@
+