mirror of
https://github.com/viq/NewsBlur.git
synced 2025-09-18 21:43:31 +00:00
Adding feedback archiving for instant loads. Feedback is now on the dashboard.
This commit is contained in:
parent
54a10301b9
commit
504d7d94da
5 changed files with 87 additions and 14 deletions
|
@ -23,7 +23,7 @@ from apps.analyzer.models import get_classifiers_for_user
|
||||||
from apps.reader.models import UserSubscription, UserSubscriptionFolders, MUserStory, Feature
|
from apps.reader.models import UserSubscription, UserSubscriptionFolders, MUserStory, Feature
|
||||||
from apps.reader.forms import SignupForm, LoginForm, FeatureForm
|
from apps.reader.forms import SignupForm, LoginForm, FeatureForm
|
||||||
from apps.rss_feeds.models import MFeedIcon
|
from apps.rss_feeds.models import MFeedIcon
|
||||||
from apps.statistics.models import MStatistics
|
from apps.statistics.models import MStatistics, MFeedback
|
||||||
try:
|
try:
|
||||||
from apps.rss_feeds.models import Feed, MFeedPage, DuplicateFeed, MStory, MStarredStory, FeedLoadtime
|
from apps.rss_feeds.models import Feed, MFeedPage, DuplicateFeed, MStory, MStarredStory, FeedLoadtime
|
||||||
except:
|
except:
|
||||||
|
@ -72,6 +72,7 @@ def index(request):
|
||||||
# recommended_feed_feedback = RecommendedFeedUserFeedback.objects.filter(recommendation=recommended_feed)
|
# recommended_feed_feedback = RecommendedFeedUserFeedback.objects.filter(recommendation=recommended_feed)
|
||||||
|
|
||||||
statistics = MStatistics.all()
|
statistics = MStatistics.all()
|
||||||
|
feedbacks = MFeedback.all()
|
||||||
howitworks_page = 0 # random.randint(0, 5)
|
howitworks_page = 0 # random.randint(0, 5)
|
||||||
return render_to_response('reader/feeds.xhtml', {
|
return render_to_response('reader/feeds.xhtml', {
|
||||||
'user_profile': user.profile,
|
'user_profile': user.profile,
|
||||||
|
@ -87,6 +88,7 @@ def index(request):
|
||||||
'account_images': range(1, 4),
|
'account_images': range(1, 4),
|
||||||
'recommended_feeds': recommended_feeds,
|
'recommended_feeds': recommended_feeds,
|
||||||
'statistics': statistics,
|
'statistics': statistics,
|
||||||
|
'feedbacks': feedbacks,
|
||||||
# 'recommended_feed_feedback': recommended_feed_feedback,
|
# 'recommended_feed_feedback': recommended_feed_feedback,
|
||||||
}, context_instance=RequestContext(request))
|
}, context_instance=RequestContext(request))
|
||||||
|
|
||||||
|
|
10
apps/statistics/management/commands/collect_feedback.py
Normal file
10
apps/statistics/management/commands/collect_feedback.py
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
from optparse import make_option
|
||||||
|
from django.core.management.base import BaseCommand
|
||||||
|
from apps.statistics.models import MFeedback
|
||||||
|
|
||||||
|
class Command(BaseCommand):
|
||||||
|
option_list = BaseCommand.option_list + (
|
||||||
|
)
|
||||||
|
|
||||||
|
def handle(self, *args, **options):
|
||||||
|
MFeedback.collect_feedback()
|
|
@ -1,5 +1,6 @@
|
||||||
import datetime
|
import datetime
|
||||||
import mongoengine as mongo
|
import mongoengine as mongo
|
||||||
|
import urllib2
|
||||||
from django.db.models import Avg, Count
|
from django.db.models import Avg, Count
|
||||||
from apps.rss_feeds.models import MFeedFetchHistory, MPageFetchHistory, FeedLoadtime
|
from apps.rss_feeds.models import MFeedFetchHistory, MPageFetchHistory, FeedLoadtime
|
||||||
from apps.profile.models import Profile
|
from apps.profile.models import Profile
|
||||||
|
@ -109,4 +110,36 @@ class MStatistics(mongo.Document):
|
||||||
)
|
)
|
||||||
for key, value in values:
|
for key, value in values:
|
||||||
cls.objects(key=key).update_one(upsert=True, key=key, value=value)
|
cls.objects(key=key).update_one(upsert=True, key=key, value=value)
|
||||||
|
|
||||||
|
class MFeedback(mongo.Document):
|
||||||
|
date = mongo.StringField()
|
||||||
|
summary = mongo.StringField()
|
||||||
|
subject = mongo.StringField()
|
||||||
|
url = mongo.StringField()
|
||||||
|
style = mongo.StringField()
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
'collection': 'feedback',
|
||||||
|
'allow_inheritance': False,
|
||||||
|
'indexes': ['style'],
|
||||||
|
}
|
||||||
|
|
||||||
|
def __unicode__(self):
|
||||||
|
return "%s: (%s) %s" % (self.style, self.date, self.subject)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def collect_feedback(cls):
|
||||||
|
data = urllib2.urlopen('https://getsatisfaction.com/newsblur/topics.widget').read()
|
||||||
|
data = json.decode(data[1:-1])
|
||||||
|
if len(data):
|
||||||
|
cls.objects.delete()
|
||||||
|
for feedback in data:
|
||||||
|
if 'about' in feedback['date']:
|
||||||
|
feedback['date'] = feedback['date'].replace('about', '')
|
||||||
|
[MFeedback.objects.create(**feedback) for feedback in data]
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def all(cls):
|
||||||
|
feedbacks = cls.objects.all()[:5]
|
||||||
|
|
||||||
|
return feedbacks
|
|
@ -3689,6 +3689,31 @@ background: transparent;
|
||||||
height: 16px;
|
height: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.NB-module-features .NB-module-feature .NB-module-feature-tag {
|
||||||
|
font-size: 8px;
|
||||||
|
padding: 0 4px;
|
||||||
|
background-color: #DC8A13;
|
||||||
|
color: white;
|
||||||
|
font-weight: bold;
|
||||||
|
text-transform: uppercase;
|
||||||
|
margin-right: 4px;
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: text-bottom;
|
||||||
|
}
|
||||||
|
.NB-module-features .NB-module-feature .NB-module-feature-tag.NB-tag-problem {
|
||||||
|
background-color: #DC5C25;
|
||||||
|
}
|
||||||
|
.NB-module-features .NB-module-feature .NB-module-feature-tag.NB-tag-praise {
|
||||||
|
background-color: #F4B156;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
.NB-module-features .NB-module-feature .NB-module-feature-tag.NB-tag-idea {
|
||||||
|
background-color: #9DDC5F;
|
||||||
|
}
|
||||||
|
.NB-module-features .NB-module-feature .NB-module-feature-tag.NB-tag-question {
|
||||||
|
background-color: #6DAEDC;
|
||||||
|
}
|
||||||
|
|
||||||
#add-feature-form {
|
#add-feature-form {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,18 +62,21 @@ $(document).ready(function() {
|
||||||
</form>
|
</form>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{# <h3 class="NB-module-content-header"> #}
|
<h3 class="NB-module-content-header">
|
||||||
{# Community Feedback #}
|
Community Feedback
|
||||||
{# </h3> #}
|
</h3>
|
||||||
{# #}
|
|
||||||
{# <table class="" cellpadding="0" cellspacing="0"> #}
|
<table class="" cellpadding="0" cellspacing="0">
|
||||||
{# {% for feature in features %} #}
|
{% for feedback in feedbacks %}
|
||||||
{# <tr class="NB-module-feature {% if forloop.last %}last{% endif %} {% if feature.date > user.profile.last_seen_on %}NB-module-feature-new{% endif %}"> #}
|
<tr class="NB-module-feature {% if forloop.last %}last{% endif %}">
|
||||||
{# <td class="NB-module-feature-date">{{ feature.date|date:"M d, Y" }}</td> #}
|
<td class="NB-module-feature-date">{{ feedback.date }}</td>
|
||||||
{# <td class="NB-module-feature-description">{{ feature.description|typogrify }}</td> #}
|
<td class="NB-module-feature-description">
|
||||||
{# </tr> #}
|
<span class="NB-module-feature-tag NB-tag-{{ feedback.style }}">{{ feedback.style }}</span>
|
||||||
{# {% endfor %} #}
|
<a href="{{ feedback.url }}">{{ feedback.subject|typogrify }}</a>
|
||||||
{# </table> #}
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue