l.append({ 'url': absolute(reverse('astakos.im.views.index')),
'name': request.user.email})
l.append({ 'url': absolute(reverse('astakos.im.views.edit_profile')),
- 'name': "View your profile" })
- if request.user.password:
- l.append({ 'url': absolute(reverse('password_change')),
- 'name': "Change your password" })
- if INVITATIONS_ENABLED:
- l.append({ 'url': absolute(reverse('astakos.im.views.invite')),
- 'name': "Invite some friends" })
- l.append({ 'url': absolute(reverse('astakos.im.views.send_feedback')),
- 'name': "Send feedback" })
- l.append({ 'url': absolute(reverse('astakos.im.views.logout')),
- 'name': "Sign out"})
-
+ 'name': "My account" })
+ if with_extra_links:
+ if request.user.password:
+ l.append({ 'url': absolute(reverse('password_change')),
+ 'name': "Change password" })
+ if INVITATIONS_ENABLED:
+ l.append({ 'url': absolute(reverse('astakos.im.views.invite')),
+ 'name': "Invitations" })
+ l.append({ 'url': absolute(reverse('astakos.im.views.send_feedback')),
+ 'name': "Feedback" })
+ if with_signout:
+ l.append({ 'url': absolute(reverse('astakos.im.views.logout')),
+ 'name': "Sign out"})
-
++
callback = request.GET.get('callback', None)
data = json.dumps(tuple(l))
mimetype = 'application/json'
from urlparse import urljoin
from random import randint
- from astakos.im.settings import DEFAULT_CONTACT_EMAIL, DEFAULT_FROM_EMAIL, SITENAME, BASEURL
+ from astakos.im.settings import DEFAULT_CONTACT_EMAIL, DEFAULT_FROM_EMAIL, SITENAME, BASEURL, DEFAULT_ADMIN_EMAIL
-from astakos.im.models import Invitation
+from astakos.im.models import Invitation, AstakosUser
logger = logging.getLogger(__name__)
code=code,
realname=realname)
invitation.save()
- subject = _('Invitation to %s' % SITENAME)
- url = '%s?code=%d' % (urljoin(BASEURL, reverse('astakos.im.views.signup')), code)
- message = render_to_string('im/invitation.txt', {
- 'invitation': invitation,
- 'url': url,
- 'baseurl': BASEURL,
- 'service': SITENAME,
- 'support': DEFAULT_CONTACT_EMAIL})
- sender = DEFAULT_FROM_EMAIL
- send_mail(subject, message, sender, [invitation.username])
- logger.info('Sent invitation %s', invitation)
+ send_invitation(invitation, email_template_name)
inviter.invitations = max(0, inviter.invitations - 1)
inviter.save()
+
+def set_user_credibility(email, has_credits):
+ try:
+ user = AstakosUser.objects.get(email=email)
+ user.has_credits = has_credits
+ user.save()
+ except AstakosUser.DoesNotExist, e:
- logger.exception(e)
++ logger.exception(e)
from django.core.management.base import BaseCommand, CommandError
from django.db import transaction
- from astakos.im.functions import activate
+ from astakos.im.functions import send_verification
from ._common import get_user
--
class Command(BaseCommand):
args = "<user ID or email> [user ID or email] ..."
RECAPTCHA_PUBLIC_KEY = getattr(settings, 'ASTAKOS_RECAPTCHA_PUBLIC_KEY', '')
RECAPTCHA_PRIVATE_KEY = getattr(settings, 'ASTAKOS_RECAPTCHA_PRIVATE_KEY', '')
RECAPTCHA_OPTIONS = getattr(settings, 'ASTAKOS_RECAPTCHA_OPTIONS', {'theme': 'white'})
+ RECAPTCHA_USE_SSL = getattr(settings, 'ASTAKOS_RECAPTCHA_USE_SSL', True)
+# set AstakosUser fields to propagate in the billing system
+BILLING_FIELDS = getattr(settings, 'ASTAKOS_BILLING_FIELDS', ['is_active'])
+
+# Queue for billing.
+QUEUE_CONNECTION = getattr(settings, 'ASTAKOS_QUEUE_CONNECTION', None) # Example: 'rabbitmq://guest:guest@localhost:5672/astakos.*'
+
# Set where the user should be redirected after logout
LOGOUT_NEXT = getattr(settings, 'ASTAKOS_LOGOUT_NEXT', '')
color: #ffffff;
}
.messages li.warning {
-- background-color: #ffc40d;
++ background-color: #AF6906;
color: #000000;
}
++.messages .warning {
++ color: #ffffff !important;
++}
++.messages .warning a {
++ color: inherit;
++ font-weight: bold;
++}
.service-desc {
margin-top: 4em;
}
margin-bottom: 10px;
display: block !important;
}
++#recaptcha_widget_div th, #recaptcha_widget_div td {
++ line-height: 1;
++}
.checkbox-widget.checked {
background-color: #f00;
background-image: url("../images/checkbox.png");
&.success { background-color: @green; color: @white }
&.error { background-color: @red; color: @white }
-- &.warning { background-color: @yellow; color: @black }
++ &.warning { background-color: #AF6906; color: @black }
++ }
++
++ .warning {
++ color: @white !important;
++ a {
++ color: inherit;
++ font-weight: bold;
++ }
}
}
&:hover {
background-color: @linkColor;
}
+
+ a {
+ color: @white !important;
+ text-decoration: none !important;
+ border: none !important;
+ }
+}
+
+a.button {
+ color: @white !important;
+ text-decoration: none !important;
+ border: none !important;
+}
+
+// specific styles for A buttons
+a.button {
+ text-align: center !important;
+ color: #fff !important;
+ border: none !important;
+ display: block !important;
+
+ &:hover {
+ color: #fff !important;
+ }
+}
+
+// specific styles for A buttons
+a.button {
+ text-align: center !important;
+ color: #fff !important;
+ border: none !important;
+ display: block !important;
+
+ &:hover {
+ color: #fff !important;
+ }
}
+ // specific styles for A buttons
+ a.button {
+ text-align: center !important;
+ color: #fff !important;
+ border: none !important;
+ display: block !important;
+
+ &:hover {
+ color: #fff !important;
+ }
+ }
+
.transit(@type:color, @time:.15s, @easing:linear) {
-webkit-transition: @type @time @easing;
CUSTOM_USER_MODEL = 'astakos.im.AstakosUser'
++SESSION_COOKIE_SECURE = True
++