Merge branch 'master' into aquarium
authorSofia Papagiannaki <papagian@gmail.com>
Fri, 16 Mar 2012 11:40:33 +0000 (13:40 +0200)
committerSofia Papagiannaki <papagian@gmail.com>
Fri, 16 Mar 2012 11:40:33 +0000 (13:40 +0200)
Conflicts:
snf-astakos-app/Changelog
snf-astakos-app/README
snf-astakos-app/astakos/im/api.py
snf-astakos-app/astakos/im/backends.py
snf-astakos-app/astakos/im/context_processors.py
snf-astakos-app/astakos/im/functions.py
snf-astakos-app/astakos/im/management/commands/sendactivation.py
snf-astakos-app/astakos/im/models.py
snf-astakos-app/astakos/im/settings.py
snf-astakos-app/astakos/im/static/im/cloudbar/cloudbar.css
snf-astakos-app/astakos/im/static/im/cloudbar/cloudbar.less
snf-astakos-app/astakos/im/static/im/css/styles.css
snf-astakos-app/astakos/im/static/im/css/styles.less
snf-astakos-app/astakos/im/templates/im/login.html
snf-astakos-app/astakos/im/views.py

1  2 
snf-astakos-app/astakos/im/api.py
snf-astakos-app/astakos/im/functions.py
snf-astakos-app/astakos/im/management/commands/sendactivation.py
snf-astakos-app/astakos/im/settings.py
snf-astakos-app/astakos/im/static/im/css/styles.css
snf-astakos-app/astakos/im/static/im/css/styles.less
snf-astakos-app/astakos/im/static/im/less/xtra.less
snf-astakos-app/astakos/im/synnefo_settings.py

@@@ -137,18 -136,20 +137,20 @@@ def get_menu(request, with_extra_links=
          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'
@@@ -40,8 -41,8 +41,8 @@@ from urllib import quot
  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__)
  
@@@ -85,24 -148,6 +148,14 @@@ def invite(inviter, username, realname
                              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] ..."
@@@ -57,13 -57,8 +57,14 @@@ CLOUD_SERVICES = getattr(settings, 'AST
  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', '')
  
@@@ -1078,9 -1125,9 +1125,16 @@@ div.form-stacked 
    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;
  }
@@@ -1351,6 -1470,6 +1477,9 @@@ table tr.consumed td.consumed 
    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");
@@@ -524,7 -550,7 +550,15 @@@ div.form-stacked 
  
          &.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;
@@@ -82,3 -82,3 +82,5 @@@ USE_X_FORWARDED_HOST = Fals
  
  CUSTOM_USER_MODEL = 'astakos.im.AstakosUser'
  
++SESSION_COOKIE_SECURE = True
++