def addons_section(request, addon_id, addon, section, editable=False, webapp=False): basic = AppFormBasic if webapp else addon_forms.AddonFormBasic models = {'basic': basic, 'media': AppFormMedia, 'details': AppFormDetails, 'support': AppFormSupport, 'technical': AppFormTechnical, 'admin': forms.AdminSettingsForm} is_dev = acl.check_addon_ownership(request, addon, dev=True) if section not in models: raise http.Http404() # Only show the list of features if app isn't packaged. show_features = waffle.switch_is_active('buchets') and not addon.is_packaged appfeatures = appfeatures_form = None if show_features: appfeatures = addon.current_version.features appfeatures_form = AppFeaturesForm(instance=appfeatures) tags = image_assets = previews = restricted_tags = [] cat_form = None # Permissions checks. # Only app owners can edit any of the details of their apps. # Users with 'Apps:Configure' can edit the admin settings. if (section != 'admin' and not is_dev) or (section == 'admin' and not acl.action_allowed(request, 'Apps', 'Configure') and not acl.action_allowed(request, 'Apps', 'ViewConfiguration')): raise PermissionDenied if section == 'basic': tags = addon.tags.not_blacklisted().values_list('tag_text', flat=True) cat_form = CategoryForm(request.POST or None, product=addon, request=request) restricted_tags = addon.tags.filter(restricted=True) elif section == 'media': image_assets = ImageAssetFormSet( request.POST or None, prefix='images', app=addon) previews = PreviewFormSet( request.POST or None, prefix='files', queryset=addon.get_previews()) # Get the slug before the form alters it to the form data. valid_slug = addon.app_slug if editable: if request.method == 'POST': if show_features: appfeatures_form = AppFeaturesForm(request.POST, instance=appfeatures) if (section == 'admin' and not acl.action_allowed(request, 'Apps', 'Configure')): raise PermissionDenied form = models[section](request.POST, request.FILES, instance=addon, request=request) all_forms = [form, previews, image_assets] if show_features: all_forms.append(appfeatures_form) if all(not f or f.is_valid() for f in all_forms): addon = form.save(addon) if show_features: appfeatures_form.save() if 'manifest_url' in form.changed_data: addon.update( app_domain=addon.domain_from_url(addon.manifest_url)) update_manifests([addon.pk]) if previews: for preview in previews.forms: preview.save(addon) if image_assets: image_assets.save() editable = False if section == 'media': amo.log(amo.LOG.CHANGE_ICON, addon) else: amo.log(amo.LOG.EDIT_PROPERTIES, addon) valid_slug = addon.app_slug if cat_form: if cat_form.is_valid(): cat_form.save() addon.save() else: editable = True else: form = models[section](instance=addon, request=request) else: form = False data = {'addon': addon, 'webapp': webapp, 'version': addon.current_version or addon.latest_version, 'form': form, 'editable': editable, 'tags': tags, 'restricted_tags': restricted_tags, 'image_sizes': APP_IMAGE_SIZES, 'cat_form': cat_form, 'preview_form': previews, 'image_asset_form': image_assets, 'valid_slug': valid_slug, } if show_features: data.update({ 'appfeatures': appfeatures, 'feature_list': [unicode(f) for f in appfeatures.to_list()], 'appfeatures_form': appfeatures_form }) return jingo.render(request, 'developers/apps/edit/%s.html' % section, data)
def addons_section(request, addon_id, addon, section, editable=False, webapp=False): basic = AppFormBasic if webapp else addon_forms.AddonFormBasic models = {'basic': basic, 'media': AppFormMedia, 'details': AppFormDetails, 'support': AppFormSupport, 'technical': AppFormTechnical, 'admin': forms.AdminSettingsForm} if section not in models: raise http.Http404() tags = image_assets = previews = restricted_tags = [] cat_form = None if section == 'basic': tags = addon.tags.not_blacklisted().values_list('tag_text', flat=True) cat_form = CategoryForm(request.POST or None, product=addon, request=request) restricted_tags = addon.tags.filter(restricted=True) elif section == 'media': image_assets = ImageAssetFormSet( request.POST or None, prefix='images', app=addon) previews = PreviewFormSet( request.POST or None, prefix='files', queryset=addon.get_previews()) elif (section == 'admin' and not acl.action_allowed(request, 'Apps', 'Configure') and not acl.action_allowed(request, 'Apps', 'ViewConfiguration')): raise PermissionDenied # Get the slug before the form alters it to the form data. valid_slug = addon.app_slug if editable: if request.method == 'POST': if (section == 'admin' and not acl.action_allowed(request, 'Apps', 'Configure')): raise PermissionDenied form = models[section](request.POST, request.FILES, instance=addon, request=request) if (form.is_valid() and (not previews or previews.is_valid()) and (not image_assets or image_assets.is_valid())): addon = form.save(addon) if 'manifest_url' in form.changed_data: addon.update( app_domain=addon.domain_from_url(addon.manifest_url)) update_manifests([addon.pk]) if previews: for preview in previews.forms: preview.save(addon) if image_assets: image_assets.save() editable = False if section == 'media': amo.log(amo.LOG.CHANGE_ICON, addon) else: amo.log(amo.LOG.EDIT_PROPERTIES, addon) valid_slug = addon.app_slug if cat_form: if cat_form.is_valid(): cat_form.save() addon.save() else: editable = True else: form = models[section](instance=addon, request=request) else: form = False data = {'addon': addon, 'webapp': webapp, 'form': form, 'editable': editable, 'tags': tags, 'restricted_tags': restricted_tags, 'image_sizes': APP_IMAGE_SIZES, 'cat_form': cat_form, 'preview_form': previews, 'image_asset_form': image_assets, 'valid_slug': valid_slug, } return jingo.render(request, 'developers/apps/edit/%s.html' % section, data)
def addons_section(request, addon_id, addon, section, editable=False, webapp=False): basic = AppFormBasic if webapp else addon_forms.AddonFormBasic models = { 'basic': basic, 'media': AppFormMedia, 'details': AppFormDetails, 'support': AppFormSupport, 'technical': AppFormTechnical, 'admin': forms.AdminSettingsForm } is_dev = acl.check_addon_ownership(request, addon, dev=True) if section not in models: raise http.Http404() tags = image_assets = previews = restricted_tags = [] cat_form = None # Permissions checks. # Only app owners can edit any of the details of their apps. # Users with 'Apps:Configure' can edit the admin settings. if (section != 'admin' and not is_dev) or ( section == 'admin' and not acl.action_allowed(request, 'Apps', 'Configure') and not acl.action_allowed(request, 'Apps', 'ViewConfiguration')): raise PermissionDenied if section == 'basic': tags = addon.tags.not_blacklisted().values_list('tag_text', flat=True) cat_form = CategoryForm(request.POST or None, product=addon, request=request) restricted_tags = addon.tags.filter(restricted=True) elif section == 'media': image_assets = ImageAssetFormSet(request.POST or None, prefix='images', app=addon) previews = PreviewFormSet(request.POST or None, prefix='files', queryset=addon.get_previews()) # Get the slug before the form alters it to the form data. valid_slug = addon.app_slug if editable: if request.method == 'POST': if (section == 'admin' and not acl.action_allowed(request, 'Apps', 'Configure')): raise PermissionDenied form = models[section](request.POST, request.FILES, instance=addon, request=request) if (form.is_valid() and (not previews or previews.is_valid()) and (not image_assets or image_assets.is_valid())): addon = form.save(addon) if 'manifest_url' in form.changed_data: addon.update( app_domain=addon.domain_from_url(addon.manifest_url)) update_manifests([addon.pk]) if previews: for preview in previews.forms: preview.save(addon) if image_assets: image_assets.save() editable = False if section == 'media': amo.log(amo.LOG.CHANGE_ICON, addon) else: amo.log(amo.LOG.EDIT_PROPERTIES, addon) valid_slug = addon.app_slug if cat_form: if cat_form.is_valid(): cat_form.save() addon.save() else: editable = True else: form = models[section](instance=addon, request=request) else: form = False data = { 'addon': addon, 'webapp': webapp, 'form': form, 'editable': editable, 'tags': tags, 'restricted_tags': restricted_tags, 'image_sizes': APP_IMAGE_SIZES, 'cat_form': cat_form, 'preview_form': previews, 'image_asset_form': image_assets, 'valid_slug': valid_slug, } return jingo.render(request, 'developers/apps/edit/%s.html' % section, data)