fix: [BACKPORT] backports buttonURL fixes in the survey editor (#7482)

This commit is contained in:
Anshuman Pandey
2026-03-13 19:23:25 +05:30
committed by GitHub
parent 0df5e26381
commit 8eda76f08b
2 changed files with 47 additions and 3 deletions

View File

@@ -190,7 +190,7 @@ export const PUT = withV1ApiWrapper({
};
}
const featureCheckResult = await checkFeaturePermissions(surveyUpdate, organization);
const featureCheckResult = await checkFeaturePermissions(surveyUpdate, organization, result.survey);
if (featureCheckResult) {
return {
response: featureCheckResult,

View File

@@ -1,12 +1,15 @@
import { TOrganization } from "@formbricks/types/organizations";
import { TSurveyCreateInputWithEnvironmentId } from "@formbricks/types/surveys/types";
import { TSurvey, TSurveyCreateInputWithEnvironmentId } from "@formbricks/types/surveys/types";
import { responses } from "@/app/lib/api/response";
import { getElementsFromBlocks } from "@/lib/survey/utils";
import { getIsSpamProtectionEnabled } from "@/modules/ee/license-check/lib/utils";
import { getSurveyFollowUpsPermission } from "@/modules/survey/follow-ups/lib/utils";
import { getExternalUrlsPermission } from "@/modules/survey/lib/permission";
export const checkFeaturePermissions = async (
surveyData: TSurveyCreateInputWithEnvironmentId,
organization: TOrganization
organization: TOrganization,
oldSurvey?: TSurvey
): Promise<Response | null> => {
if (surveyData.recaptcha?.enabled) {
const isSpamProtectionEnabled = await getIsSpamProtectionEnabled(organization.id);
@@ -22,5 +25,46 @@ export const checkFeaturePermissions = async (
}
}
const isExternalUrlsAllowed = await getExternalUrlsPermission(organization.id);
if (!isExternalUrlsAllowed) {
// Check ending cards for new/changed button links
if (surveyData.endings) {
for (const newEnding of surveyData.endings) {
const oldEnding = oldSurvey?.endings.find((e) => e.id === newEnding.id);
if (newEnding.type === "endScreen" && newEnding.buttonLink) {
if (!oldEnding || oldEnding.type !== "endScreen" || oldEnding.buttonLink !== newEnding.buttonLink) {
return responses.forbiddenResponse(
"External URLs are not enabled for this organization. Upgrade to use external button links."
);
}
}
}
}
// Check CTA elements for new/changed external button URLs
if (surveyData.blocks) {
const newElements = getElementsFromBlocks(surveyData.blocks);
const oldElements = oldSurvey?.blocks ? getElementsFromBlocks(oldSurvey.blocks) : [];
for (const newElement of newElements) {
const oldElement = oldElements.find((e) => e.id === newElement.id);
if (newElement.type === "cta" && newElement.buttonExternal) {
if (
!oldElement ||
oldElement.type !== "cta" ||
!oldElement.buttonExternal ||
oldElement.buttonUrl !== newElement.buttonUrl
) {
return responses.forbiddenResponse(
"External URLs are not enabled for this organization. Upgrade to use external CTA buttons."
);
}
}
}
}
}
return null;
};