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': addon_forms.AddonFormTechnical, 'admin': forms.AdminSettingsForm} if section not in models: raise http.Http404() tags = image_assets = previews = restricted_tags = [] cat_form = device_type_form = region_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) device_type_form = DeviceTypeForm(request.POST or None, addon=addon) 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 == 'details' and settings.REGION_STORES: region_form = RegionForm(request.POST or None, product=addon) elif (section == 'admin' and not acl.action_allowed(request, 'Apps', 'Configure') and not acl.action_allowed(request, 'Apps', 'ViewConfiguration')): return http.HttpResponseForbidden() # 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')): return http.HttpResponseForbidden() form = models[section](request.POST, request.FILES, instance=addon, request=request) if (form.is_valid() and (not previews or previews.is_valid()) and (not region_form or region_form.is_valid()) and (not image_assets or image_assets.is_valid())): if region_form: region_form.save() 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 if device_type_form: if device_type_form.is_valid(): device_type_form.save(addon) 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, 'device_type_form': device_type_form, 'region_form': region_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": addon_forms.AddonFormTechnical, "admin": forms.AdminSettingsForm, } if section not in models: raise http.Http404() tags = previews = restricted_tags = [] cat_form = device_type_form = region_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) device_type_form = DeviceTypeForm(request.POST or None, addon=addon) elif section == "media": previews = PreviewFormSet(request.POST or None, prefix="files", queryset=addon.get_previews()) elif section == "details" and settings.REGION_STORES: region_form = RegionForm(request.POST or None, product=addon) elif ( section == "admin" and not acl.action_allowed(request, "Apps", "Configure") and not acl.action_allowed(request, "Apps", "ViewConfiguration") ): return http.HttpResponseForbidden() # 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"): return http.HttpResponseForbidden() form = models[section](request.POST, request.FILES, instance=addon, request=request) if ( form.is_valid() and (not previews or previews.is_valid()) and (not region_form or region_form.is_valid()) ): if region_form: region_form.save() 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) 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 if device_type_form: if device_type_form.is_valid(): device_type_form.save(addon) 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, "cat_form": cat_form, "preview_form": previews, "valid_slug": valid_slug, "device_type_form": device_type_form, "region_form": region_form, } return jingo.render(request, "developers/apps/edit/%s.html" % section, data)