diff --git a/apps/amo/urlresolvers.py b/apps/amo/urlresolvers.py index 29ea4b3986f..5ee05f04a4b 100644 --- a/apps/amo/urlresolvers.py +++ b/apps/amo/urlresolvers.py @@ -10,6 +10,7 @@ from django.utils.translation.trans_real import parse_accept_lang_header import jinja2 +import waffle import amo @@ -134,7 +135,8 @@ def fix(self, path): url_parts.append(locale) # Temporarily force home page to //developers/. - if settings.MARKETPLACE and not path.partition('/')[0]: + if (not waffle.switch_is_active('unleash-consumer') and + settings.MARKETPLACE and not path.partition('/')[0]): url_parts.append('developers') elif path.partition('/')[0] not in settings.SUPPORTED_NONAPPS: diff --git a/media/css/devreg/manage.less b/media/css/devreg/manage.less index ca98d667de2..13cad653d44 100644 --- a/media/css/devreg/manage.less +++ b/media/css/devreg/manage.less @@ -168,7 +168,8 @@ } #slug_edit a { - font-size: 10px; + font-size: 11px; + font-weight: bold; } form .char-count, diff --git a/migrations/361-unleash-consumer.sql b/migrations/361-unleash-consumer.sql new file mode 100644 index 00000000000..f90ba034552 --- /dev/null +++ b/migrations/361-unleash-consumer.sql @@ -0,0 +1,5 @@ +INSERT INTO waffle_switch_mkt (name, active, note) + VALUES ('unleash-consumer', 0, + 'This activates the consumer flow. No login. Home is really home, ' + 'not the Developer Hub. Stuff is pretty. This is for what you ' + 'have been waiting.'); diff --git a/mkt/account/tests/test_views.py b/mkt/account/tests/test_views.py index 1a58d7037c6..f4b4f80671b 100644 --- a/mkt/account/tests/test_views.py +++ b/mkt/account/tests/test_views.py @@ -297,8 +297,6 @@ class TestProfileLinks(amo.tests.TestCase): def setUp(self): self.user = self.get_user() - # Authentication is required for now. - assert self.client.login(username=self.user.email, password='password') def get_user(self): return UserProfile.objects.get(username='31337') @@ -306,6 +304,9 @@ def get_user(self): def get_url(self): return reverse('users.profile', args=[self.user.username]) + def log_in(self): + assert self.client.login(username=self.user.email, password='password') + def test_id_or_username(self): args = [self.user.id, self.user.username] for arg in args: @@ -321,6 +322,7 @@ def get_profile_links(self, id=None, username=None): def test_viewing_my_profile(self): # Me as (non-admin) viewing my own profile. + self.log_in() links = self.get_profile_links(self.user.id) eq_(links.length, 1) eq_(links.eq(0).attr('href'), reverse('account.settings')) @@ -332,11 +334,18 @@ def test_viewing_my_profile_as_other_user(self): links = self.get_profile_links(self.user.id) eq_(links.length, 0, 'No edit buttons should be shown.') + def test_viewing_my_profile_as_anonymous(self): + # Ensure no edit buttons are shown. + links = self.get_profile_links(self.user.id) + eq_(links.length, 0, 'No edit buttons should be shown.') + def test_viewing_other_profile(self): + self.log_in() # Me as (non-admin) viewing someone else's my own profile. eq_(self.get_profile_links(id=999).length, 0) def test_viewing_my_profile_as_admin(self): + self.log_in() # Me as (with admin) viewing my own profile. GroupUser.objects.create( group=Group.objects.create(rules='Users:Edit'), user=self.user) @@ -346,6 +355,7 @@ def test_viewing_my_profile_as_admin(self): eq_(links.eq(0).attr('href'), reverse('account.settings')) def test_viewing_other_profile_as_admin(self): + self.log_in() # Me as (with admin) viewing someone else's profile. GroupUser.objects.create( group=Group.objects.create(rules='Users:Edit'), user=self.user) diff --git a/mkt/account/urls.py b/mkt/account/urls.py index 50e5d70711d..c69a1e8b1ed 100644 --- a/mkt/account/urls.py +++ b/mkt/account/urls.py @@ -29,12 +29,10 @@ name='account.purchases.receipt'), )) -users_patterns = decorate(login_required, patterns('', +users_patterns = patterns('', # Keeping the same URL pattern since admin pages already know about this. url(r'^(?:(?P\d+)/)?edit$', views.admin_edit, name='users.admin_edit'), - - # TODO: Don't require authentication for this. url(r'''(?P[^/<>"']+)$''', views.profile, name='users.profile'), -)) +) diff --git a/mkt/account/views.py b/mkt/account/views.py index 48490693bcb..67183cf3c7d 100644 --- a/mkt/account/views.py +++ b/mkt/account/views.py @@ -11,8 +11,8 @@ from access import acl from addons.views import BaseFilter import amo -from amo.decorators import (login_required, no_login_required, - permission_required, post_required, write) +from amo.decorators import (login_required, permission_required, post_required, + write) from amo.utils import paginate from market.models import PreApprovalUser import paypal @@ -174,6 +174,7 @@ def account_settings(request): @write +@login_required @permission_required('Users', 'Edit') def admin_edit(request, user_id): amouser = get_object_or_404(UserProfile, pk=user_id) @@ -209,7 +210,6 @@ def delete_photo(request): return http.HttpResponse() -@no_login_required def profile(request, username): if username.isdigit(): user = get_object_or_404(UserProfile, id=username) diff --git a/mkt/developers/helpers.py b/mkt/developers/helpers.py index bb6ad3b2411..f85ecabe95a 100644 --- a/mkt/developers/helpers.py +++ b/mkt/developers/helpers.py @@ -8,13 +8,15 @@ from jingo import register from jingo.helpers import datetime from tower import ugettext as _, ungettext as ngettext +import waffle import amo from amo.urlresolvers import reverse -from amo.helpers import breadcrumbs, impala_breadcrumbs, loc +from amo.helpers import breadcrumbs from access import acl from addons.helpers import new_context +from mkt.site.helpers import mkt_breadcrumbs register.function(acl.check_addon_ownership) @@ -41,7 +43,7 @@ def hub_page_title(context, title=None, addon=None): @jinja2.contextfunction def mkt_page_title(context, title, force_webapps=False): title = smart_unicode(title) - base_title = loc('Mozilla Marketplace') + base_title = _('Mozilla Marketplace') return u'%s | %s' % (title, base_title) @@ -56,8 +58,7 @@ def docs_page_title(context, title=None): @register.function @jinja2.contextfunction -def hub_breadcrumbs(context, addon=None, items=None, add_default=False, - landing_galore=False): +def hub_breadcrumbs(context, addon=None, items=None, add_default=False): """ Wrapper function for ``breadcrumbs``. Prepends 'Developer Hub' breadcrumbs. @@ -72,18 +73,18 @@ def hub_breadcrumbs(context, addon=None, items=None, add_default=False, **impala** Whether to use the impala_breadcrumbs helper. Default is False. """ - if landing_galore: + if waffle.switch_is_active('unleash-consumer'): crumbs = [(reverse('mkt.developers.index'), _('Developer Hub'))] else: crumbs = [(reverse('mkt.developers.apps'), _('My Submissions'))] - if landing_galore: + if waffle.switch_is_active('unleash-consumer'): title = _('My Submissions') link = reverse('mkt.developers.apps') else: title = link = None if addon: - if landing_galore: + if waffle.switch_is_active('unleash-consumer'): if not addon and not items: # We are at the end of the crumb trail. crumbs.append((None, title)) @@ -101,7 +102,8 @@ def hub_breadcrumbs(context, addon=None, items=None, add_default=False, if len(crumbs) == 1: crumbs = [] - return impala_breadcrumbs(context, crumbs, add_default) + return mkt_breadcrumbs(context, items=crumbs, + add_default=waffle.switch_is_active('unleash-consumer')) @register.function diff --git a/mkt/developers/templates/developers/apps/edit/basic.html b/mkt/developers/templates/developers/apps/edit/basic.html index 2c8fe095fb8..dcc334d800c 100644 --- a/mkt/developers/templates/developers/apps/edit/basic.html +++ b/mkt/developers/templates/developers/apps/edit/basic.html @@ -42,7 +42,11 @@

{{ form.slug.errors }} {% else %} {{ settings.SITE_URL }}/…/{{ addon.app_slug if webapp else addon.slug }} - {{ loc('(Not Available Yet)') }} + {% if waffle.switch('unleash-consumer') %} + {{ _('View Listing') }} + {% else %} + {{ loc('(Not Available Yet)') }} + {% endif %} {% endif %} diff --git a/mkt/developers/templates/developers/base_impala.html b/mkt/developers/templates/developers/base_impala.html index da4367cad43..31b5eedfd49 100644 --- a/mkt/developers/templates/developers/base_impala.html +++ b/mkt/developers/templates/developers/base_impala.html @@ -20,3 +20,13 @@ {% endblock %} + +{% block aux_nav %} + {% if waffle.switch('unleash-consumer') %} +
  • + {{ _('Back to Apps') }} +
  • + {% else %} + {{ super() }} + {% endif %} +{% endblock %} diff --git a/mkt/developers/templates/developers/includes/addons_edit_nav.html b/mkt/developers/templates/developers/includes/addons_edit_nav.html index 3cb3127b963..e630bed2f27 100644 --- a/mkt/developers/templates/developers/includes/addons_edit_nav.html +++ b/mkt/developers/templates/developers/includes/addons_edit_nav.html @@ -21,6 +21,11 @@ (addon.get_dev_url('in_app_config'), _('Manage In-App Payments')) ) %} {% endif %} +{% if waffle.switch('unleash-consumer') %} + {% do urls.append( + (addon.get_url_path(), _('View Listing')) + ) %} +{% endif %}