mirror of
https://github.com/samuelclay/NewsBlur.git
synced 2025-09-18 21:50:56 +00:00
Merge branch 'master' of github.com:samuelclay/NewsBlur
This commit is contained in:
commit
e05460abb5
8 changed files with 92 additions and 20 deletions
|
@ -4,6 +4,7 @@ from django.db import IntegrityError
|
|||
from django.contrib.auth.models import User
|
||||
from django.db.models.signals import post_save
|
||||
from django.core.mail import mail_admins
|
||||
from django.contrib.auth import authenticate
|
||||
from apps.reader.models import UserSubscription
|
||||
from apps.rss_feeds.models import Feed
|
||||
from apps.feed_import.models import queue_new_feeds
|
||||
|
@ -61,4 +62,13 @@ def paypal_signup(sender, **kwargs):
|
|||
ipn_obj = sender
|
||||
user = User.objects.get(username=ipn_obj.custom)
|
||||
user.profile.activate_premium()
|
||||
subscription_signup.connect(paypal_signup)
|
||||
subscription_signup.connect(paypal_signup)
|
||||
|
||||
def change_password(user, old_password, new_password):
|
||||
user_db = authenticate(username=user.username, password=old_password)
|
||||
if user_db is None:
|
||||
return -1
|
||||
else:
|
||||
user_db.set_password(new_password)
|
||||
user_db.save()
|
||||
return 1
|
|
@ -9,29 +9,37 @@ from django.core.mail import mail_admins
|
|||
from utils import json_functions as json
|
||||
from paypal.standard.forms import PayPalPaymentsForm
|
||||
from utils.user_functions import ajax_login_required
|
||||
from apps.profile.models import Profile
|
||||
from apps.profile.models import Profile, change_password
|
||||
from apps.reader.models import UserSubscription
|
||||
|
||||
SINGLE_FIELD_PREFS = ('timezone',)
|
||||
SPECIAL_PREFERENCES = ('old_password', 'new_password',)
|
||||
|
||||
@ajax_login_required
|
||||
@require_POST
|
||||
@json.json_view
|
||||
def set_preference(request):
|
||||
code = 1
|
||||
message = ''
|
||||
new_preferences = request.POST
|
||||
|
||||
preferences = json.decode(request.user.profile.preferences)
|
||||
for preference_name, preference_value in new_preferences.items():
|
||||
if preference_name in SINGLE_FIELD_PREFS:
|
||||
setattr(request.user.profile, preference_name, preference_value)
|
||||
elif preference_name in SPECIAL_PREFERENCES:
|
||||
if preference_name == 'old_password':
|
||||
code = change_password(request.user, new_preferences['old_password'],
|
||||
new_preferences['new_password'])
|
||||
if code == -1:
|
||||
message = "Your old password is incorrect."
|
||||
else:
|
||||
preferences[preference_name] = preference_value
|
||||
|
||||
request.user.profile.preferences = json.encode(preferences)
|
||||
request.user.profile.save()
|
||||
|
||||
response = dict(code=code)
|
||||
response = dict(code=code, message=message)
|
||||
return response
|
||||
|
||||
@ajax_login_required
|
||||
|
|
|
@ -200,7 +200,7 @@ class MUserStory(mongo.Document):
|
|||
|
||||
meta = {
|
||||
'collection': 'userstories',
|
||||
'indexes': ['feed_id', ('user_id', 'feed_id')],
|
||||
'indexes': [('user_id', 'feed_id'), ('feed_id', 'read_date')],
|
||||
'allow_inheritance': False,
|
||||
}
|
||||
|
||||
|
|
|
@ -178,7 +178,7 @@ class Feed(models.Model):
|
|||
self.save()
|
||||
|
||||
def count_subscribers(self, verbose=False):
|
||||
SUBSCRIBER_EXPIRE = datetime.datetime.now() - datetime.timedelta(days=30)
|
||||
SUBSCRIBER_EXPIRE = datetime.datetime.now() - datetime.timedelta(days=settings.SUBSCRIBER_EXPIRE)
|
||||
from apps.reader.models import UserSubscription
|
||||
|
||||
subs = UserSubscription.objects.filter(feed=self)
|
||||
|
@ -599,19 +599,19 @@ class Feed(models.Model):
|
|||
# 2 subscribers:
|
||||
# 1 update per day = 4.5 hours
|
||||
# 10 updates = 55 minutes
|
||||
updates_per_day_delay = 6 * 60 / max(.25, ((max(0, self.num_subscribers)**.25)
|
||||
* (updates_per_day**.75)))
|
||||
updates_per_day_delay = 6 * 60 / max(.25, ((max(0, self.num_subscribers)**.20)
|
||||
* (updates_per_day**.70)))
|
||||
if self.premium_subscribers > 0:
|
||||
updates_per_day_delay = updates_per_day_delay / 5
|
||||
updates_per_day_delay = updates_per_day_delay / 4
|
||||
# Lots of subscribers = lots of updates
|
||||
# 144 hours for 0 subscribers.
|
||||
# 24 hours for 1 subscriber.
|
||||
# 7 hours for 2 subscribers.
|
||||
# 3 hours for 3 subscribers.
|
||||
# 25 min for 10 subscribers.
|
||||
subscriber_bonus = 24 * 60 / max(.167, max(0, self.num_subscribers)**1.65)
|
||||
subscriber_bonus = 24 * 60 / max(.167, max(0, self.num_subscribers)**1.35)
|
||||
if self.premium_subscribers > 0:
|
||||
subscriber_bonus = subscriber_bonus / 5
|
||||
subscriber_bonus = subscriber_bonus / 4
|
||||
|
||||
slow_punishment = 0
|
||||
if self.num_subscribers <= 1:
|
||||
|
|
|
@ -3524,6 +3524,12 @@ background: transparent;
|
|||
float: left;
|
||||
cursor: pointer;
|
||||
}
|
||||
.NB-modal-preferences .NB-preference .NB-preference-error {
|
||||
color: #83210A;
|
||||
font-size: 11px;
|
||||
margin-top: 4px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.NB-modal-preferences .NB-preference-view {
|
||||
padding-bottom: 4px;
|
||||
|
@ -3541,3 +3547,24 @@ background: transparent;
|
|||
.NB-modal-preferences .NB-preference-window label img {
|
||||
vertical-align: middle;
|
||||
margin: 0 6px 0 2px;
|
||||
}
|
||||
.NB-modal-preferences .NB-preference-password .NB-preference-option {
|
||||
float: left;
|
||||
margin: 0 12px 0 0;
|
||||
}
|
||||
.NB-modal-preferences .NB-preference-password label {
|
||||
text-transform: uppercase;
|
||||
font-size: 10px;
|
||||
color: #505050;
|
||||
margin: 0;
|
||||
}
|
||||
.NB-modal-preferences .NB-preference-password input {
|
||||
width: 140px;
|
||||
font-size: 14px;
|
||||
padding: 2px;
|
||||
margin: 0px 4px 2px;
|
||||
border: 1px solid #606060;
|
||||
-moz-box-shadow:2px 2px 0 #D0D0D0;
|
||||
-webkit-box-shadow:2px 2px 0 #D0D0D0;
|
||||
box-shadow:2px 2px 0 #D0D0D0;
|
||||
}
|
|
@ -190,6 +190,22 @@ NEWSBLUR.ReaderPreferences.prototype = {
|
|||
'Site sidebar'
|
||||
])
|
||||
]),
|
||||
$.make('div', { className: 'NB-preference NB-preference-password' }, [
|
||||
$.make('div', { className: 'NB-preference-options' }, [
|
||||
$.make('div', { className: 'NB-preference-option' }, [
|
||||
$.make('label', { 'for': 'NB-preference-password-old' }, 'Old password'),
|
||||
$.make('input', { id: 'NB-preference-password-old', type: 'password', name: 'old_password', value: '' })
|
||||
]),
|
||||
$.make('div', { className: 'NB-preference-option' }, [
|
||||
$.make('label', { 'for': 'NB-preference-password-new' }, 'New password'),
|
||||
$.make('input', { id: 'NB-preference-password-new', type: 'password', name: 'new_password', value: '' })
|
||||
])
|
||||
]),
|
||||
$.make('div', { className: 'NB-preference-label'}, [
|
||||
'Change Password',
|
||||
$.make('div', { className: 'NB-preference-error'})
|
||||
])
|
||||
]),
|
||||
$.make('div', { className: 'NB-modal-submit' }, [
|
||||
$.make('input', { type: 'submit', disabled: 'true', className: 'NB-modal-submit-green NB-disabled', value: 'Change what you like above...' }),
|
||||
' or ',
|
||||
|
@ -273,7 +289,7 @@ NEWSBLUR.ReaderPreferences.prototype = {
|
|||
serialize_preferences: function() {
|
||||
var preferences = {};
|
||||
|
||||
$('input[type=radio]:checked, select', this.$modal).each(function() {
|
||||
$('input[type=radio]:checked, select, input[type=password]', this.$modal).each(function() {
|
||||
preferences[$(this).attr('name')] = $(this).val();
|
||||
});
|
||||
|
||||
|
@ -281,10 +297,17 @@ NEWSBLUR.ReaderPreferences.prototype = {
|
|||
},
|
||||
|
||||
save_preferences: function() {
|
||||
var self = this;
|
||||
var form = this.serialize_preferences();
|
||||
$('.NB-preference-error', this.$modal).text('');
|
||||
$('input[type=submit]', this.$modal).val('Saving...').attr('disabled', true).addClass('NB-disabled');
|
||||
|
||||
this.model.save_preferences(form, function() {
|
||||
this.model.save_preferences(form, function(data) {
|
||||
NEWSBLUR.log(['data', data]);
|
||||
if (data.code == -1) {
|
||||
$('.NB-preference-password .NB-preference-error', this.$modal).text(data.message);
|
||||
self.disable_save();
|
||||
}
|
||||
NEWSBLUR.reader.switch_feed_view_unread_view();
|
||||
$.modal.close();
|
||||
});
|
||||
|
@ -305,9 +328,17 @@ NEWSBLUR.ReaderPreferences.prototype = {
|
|||
},
|
||||
|
||||
handle_change: function() {
|
||||
$('input[type=radio],select', this.$modal).bind('change', _.bind(function() {
|
||||
$('input[type=submit]', this.$modal).removeAttr('disabled').removeClass('NB-disabled').val('Save Preferences');
|
||||
}, this));
|
||||
|
||||
$('input[type=radio],select,input[type=password]', this.$modal).bind('change', _.bind(this.enable_save, this));
|
||||
$('input[type=password]', this.$modal).bind('keydown', _.bind(this.enable_save, this));
|
||||
},
|
||||
|
||||
enable_save: function() {
|
||||
$('input[type=submit]', this.$modal).removeAttr('disabled').removeClass('NB-disabled').val('Save Preferences');
|
||||
},
|
||||
|
||||
disable_save: function() {
|
||||
$('input[type=submit]', this.$modal).addAttr('disabled').addClass('NB-disabled').val('Change what you like above...');
|
||||
}
|
||||
|
||||
};
|
|
@ -190,6 +190,7 @@ SOUTH_TESTS_MIGRATE = False
|
|||
SESSION_ENGINE = "django.contrib.sessions.backends.cached_db"
|
||||
TEST_RUNNER = "utils.testrunner.TestRunner"
|
||||
DAYS_OF_UNREAD = 14
|
||||
SUBSCRIBER_EXPIRE = 12
|
||||
|
||||
# ===========
|
||||
# = Logging =
|
||||
|
|
|
@ -357,11 +357,6 @@ class Dispatcher:
|
|||
logging.debug(u' ---> [%-30s] Computing scores for all feed subscribers: %s subscribers' % (
|
||||
unicode(feed)[:30], user_subs.count()))
|
||||
|
||||
# Delete old read stories
|
||||
old_readstories = MUserStory.objects(feed_id=feed.pk,
|
||||
read_date__lt=UNREAD_CUTOFF)
|
||||
old_readstories.delete()
|
||||
|
||||
stories_db = MStory.objects(story_feed_id=feed.pk,
|
||||
story_date__gte=UNREAD_CUTOFF)
|
||||
for sub in user_subs:
|
||||
|
|
Loading…
Add table
Reference in a new issue