Skip to content

Commit f8ffe13

Browse files
authored
Merge pull request #1141 from ExpressionEngine/7.dev
7.5.22 change log
2 parents 877d7a7 + 264bf58 commit f8ffe13

8 files changed

Lines changed: 152 additions & 21 deletions

File tree

docs/add-ons/consent.md

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,17 @@ Specify the HTML `id=` attribute.
7272

7373
Specify a path to redirect the user to after submission. If not specified, they will be returned to the current page. Unused for Ajax-submitted forms.
7474

75+
#### `submit_to=`
76+
77+
submit_to='site_index'
78+
79+
Specify where the form should post. If not specified, the form posts to the current URL.
80+
81+
| value | result |
82+
| ----------- | ---------------------------------------------------------------------- |
83+
| site_index | Post to your site index URL (for example, `/index.php`) |
84+
| action_id | Post directly to the Consent action URL (for example, `/index.php?ACT=123`) |
85+
7586
#### `user_created=`
7687

7788
user_created='only'
@@ -228,6 +239,7 @@ If this tag would not output any consent requests due to your filters, the conte
228239
{exp:consent:form
229240
consent='ee:cookies_functionality|ee:cookies_performance|ee:cookies_targeting'
230241
form_id='cookieConsentForm'
242+
submit_to='action_id'
231243
}
232244
<p>This website uses a variety of cookies, which you consent to if you continue to use this site. You can read our <a href="{path='privacy'}">Privacy Policy</a> for details about how these cookies are used, and to grant or withdraw your consent for certain types of cookies.</p>
233245

@@ -500,4 +512,4 @@ Cookie provider (`ee` or add-on short name)
500512

501513
#### `{cookie_lifetime}`
502514

503-
Cookie lifetime in seconds. `0` represents session cookies (killed after browsing session ends).
515+
Cookie lifetime in seconds. `0` represents session cookies (killed after browsing session ends).

docs/control-panel/create.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -192,10 +192,12 @@ Saves the entry and returns the [Entry Manager](control-panel/entry-manager.md)
192192

193193
### Preview
194194

195-
A live preview of the entry is available if the `channel_prefs_preview_url` is set **or** the [Pages Module](add-ons/pages.md) is installed and a Page URI and template have been set.
195+
A live preview of the entry is available if the relevant channel's [Preview URL](control-panel/channels.md#settings-tab) is set **or** the [Pages Module](add-ons/pages.md) or [Structure](add-ons/structure/overview.md) is installed and configured with a URI and template.
196196

197197
If neither is set, the preview button will have an exclamation mark (!) and will link to channel preferences page where Preview URL can be set.
198198

199-
The preview will open a split screen that allows a live preview of edits. The template used to display the preview is based on the Page fields if set and the channel preview URL otherwise.
199+
The preview will open a split screen that allows a live preview of edits. The template used to display the preview is based on configured Pages/Structure fields if set and the channel preview URL otherwise.
200200

201201
When the preview is triggered, it is being displayed side-by-side with edit screen. The size of preview container can be adjusted with mouse dragging its border. The preview is dynamically being updated as you change the fields.
202+
203+
Live Preview does require the [HTTP Authorization Header be enabled](troubleshooting/error-messages.md#http-authorization-header-missing).

docs/installation/changelog.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,40 @@
88
-->
99
# ExpressionEngine v7 Change Log
1010

11+
## Version 7.5.22
12+
(Release: April 21st, 2026)
13+
<div class="max-w-7xl mx-autotext-center">
14+
<div class="space-y-8 sm:space-y-12">
15+
<ul role="list" class="mx-auto grid grid-cols-2 gap-x-4 gap-y-1 sm:grid-cols-4 md:gap-x-6 lg:max-w-5xl lg:gap-x-8 lg:gap-y-1 xl:grid-cols-5">
16+
17+
<li><div class="space-y-4 text-center"><img class="mx-auto h-20 w-20 rounded-full lg:w-24 lg:h-24" src="https://avatars.githubusercontent.com/u/17580512?v=4" /><div class="space-y-2"><div class="text-xs font-medium lg:text-sm"><p class="mb-1">Andrew s</p><p class="text-indigo-600"><a href="https://github.com/ExpressionEngine/ExpressionEngine/commits?author=blunket" target="_BLANK">@blunket</a></p></div></div></div></li>
18+
<li><div class="space-y-4 text-center"><img class="mx-auto h-20 w-20 rounded-full lg:w-24 lg:h-24" src="https://avatars.githubusercontent.com/u/563996?v=4" /><div class="space-y-2"><div class="text-xs font-medium lg:text-sm"><p class="mb-1">Bryan Nielsen</p><p class="text-indigo-600"><a href="https://github.com/ExpressionEngine/ExpressionEngine/commits?author=bryannielsen" target="_BLANK">@bryannielsen</a></p></div></div></div></li>
19+
<li><div class="space-y-4 text-center"><img class="mx-auto h-20 w-20 rounded-full lg:w-24 lg:h-24" src="https://avatars.githubusercontent.com/u/1008036?v=4" /><div class="space-y-2"><div class="text-xs font-medium lg:text-sm"><p class="mb-1">Eric Lamb</p><p class="text-indigo-600"><a href="https://github.com/ExpressionEngine/ExpressionEngine/commits?author=eric-lamb62" target="_BLANK">@eric-lamb62</a></p></div></div></div></li>
20+
<li><div class="space-y-4 text-center"><img class="mx-auto h-20 w-20 rounded-full lg:w-24 lg:h-24" src="https://avatars.githubusercontent.com/u/422821?v=4" /><div class="space-y-2"><div class="text-xs font-medium lg:text-sm"><p class="mb-1">Tom Jaeger</p><p class="text-indigo-600"><a href="https://github.com/ExpressionEngine/ExpressionEngine/commits?author=TomJaeger" target="_BLANK">@TomJaeger</a></p></div></div></div></li>
21+
<li><div class="space-y-4 text-center"><img class="mx-auto h-20 w-20 rounded-full lg:w-24 lg:h-24" src="https://avatars.githubusercontent.com/u/1181219?v=4" /><div class="space-y-2"><div class="text-xs font-medium lg:text-sm"><p class="mb-1">robinsowell</p><p class="text-indigo-600"><a href="https://github.com/ExpressionEngine/ExpressionEngine/commits?author=robinsowell" target="_BLANK">@robinsowell</a></p></div></div></div></li>
22+
</ul>
23+
</div>
24+
</div>
25+
26+
**Enhancements** 🚀
27+
28+
- Added `submit_to` support in `exp:consent:form` for `site_index` and `action_id` targets, improving consent form posting flexibility [#5193](https://github.com/ExpressionEngine/ExpressionEngine/pull/5193)
29+
- Added `email_as_username` support to member registration forms so username can be derived from email when configured [#5133](https://github.com/ExpressionEngine/ExpressionEngine/pull/5133)
30+
- Added Live Preview compatibility token header (`EE-Live-Preview-Token`) for environments that strip Authorization headers [#5223](https://github.com/ExpressionEngine/ExpressionEngine/pull/5223)
31+
32+
**Bug Fixes** 💃🐛
33+
34+
- Resolved an issue where Live Preview could fail silently when the Authorization header was unavailable by improving token/header handling and error behavior [#5184](https://github.com/ExpressionEngine/ExpressionEngine/pull/5184) [#5223](https://github.com/ExpressionEngine/ExpressionEngine/pull/5223)
35+
- Resolved file picker drag-and-drop uploads returning incorrect CSRF/404-style failures for oversized requests; upload limit errors are now surfaced correctly [#5215](https://github.com/ExpressionEngine/ExpressionEngine/pull/5215)
36+
- Resolved Pro Search filtered result issues by disabling entry SQL caching during filter processing and restoring it afterward [#4985](https://github.com/ExpressionEngine/ExpressionEngine/pull/4985)
37+
- Resolved CKEditor/Pro Search word concatenation caused by HTML stripping in keyword parsing [#5200](https://github.com/ExpressionEngine/ExpressionEngine/pull/5200)
38+
- Added missing translation strings for two Debug jump menu items [#5212](https://github.com/ExpressionEngine/ExpressionEngine/pull/5212)
39+
40+
**Developers** 💻
41+
42+
- Fixed PHP deprecation warnings by declaring PDO `MYSQL_ATTR_*` database driver properties used by config-driven options [#5217](https://github.com/ExpressionEngine/ExpressionEngine/pull/5217)
43+
- Added/updated automated coverage around Live Preview token handling, member email-as-username fallback behavior, consent form submit targets, and Pro Search filtering behavior [#5223](https://github.com/ExpressionEngine/ExpressionEngine/pull/5223) [#5133](https://github.com/ExpressionEngine/ExpressionEngine/pull/5133) [#5193](https://github.com/ExpressionEngine/ExpressionEngine/pull/5193) [#4985](https://github.com/ExpressionEngine/ExpressionEngine/pull/4985)
44+
1145
## Version 7.5.21
1246
(Release: March 2nd, 2026)
1347
<div class="max-w-7xl mx-autotext-center">

docs/installation/requirements.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,12 @@ If you are hosted on an Apache server, the `AcceptPathInfo` option needs to be e
117117
- Ask your web host or server admin to enable the option
118118
- Set your site's URLs to use [query strings](general/url-structure.md#query-strings)
119119

120+
If on an Apache server and [Live Preview](control-panel/create.md#preview) shows an error message 'HTTP Authorization Header Missing', you will need to add this line of code to your [.htaccess file](installation/best-practices.md#1-create-an-htaccess-file)
121+
122+
```php
123+
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
124+
```
125+
120126
### URL Segment Support
121127

122128
If the [Server Compatibility Wizard](#server-compatibility-wizard) lists URL Segment Support as _Unsupported_, you will need to set your site's URLs to use [query strings](general/url-structure.md#query-strings).

docs/member/registration.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,12 @@ Adds the datepicker to your date fields. Defaults to "yes".
3131

3232
NOTE: **Note:** If you are manually constructing a date field, in order to apply the date picker you must include `rel="date-picker"`.
3333

34+
35+
### `email_as_username="yes"`
36+
email_as_username="yes"
37+
38+
When set to `yes`, if the username is not specified in the submitted form, the value of the submitted email will be automatically used as the username as well. The username field is not required, but is optional, when this parameter is used.
39+
3440
### `error_handling="inline"`
3541
error_handling="inline"
3642

docs/msm/overview.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,10 @@ Open domain2's new index.php file and make the following changes:
106106
$assign_to_config['cp_url'] = 'https://domain2.com/admin.php';
107107
$assign_to_config['site_url'] = 'https://domain2.com';
108108

109+
## Switching Sites in the Control Panel
110+
111+
When switching between sites in the dropdown, whether or not you need to login between sites depends on several factors. The sites must be using the same control panel session type. If using cookies, the cookies need to have the same settings and the control panel url must have the same domain. The site URLs can have different domains, the `admin.php` files may have different domains for the control panel, but the control panel URL in the site settings must be on the same domain. A site will only show in the dropdown if the user has permission to access the control panel for that site.
112+
109113
## Multi Site Login
110114

111115
If you have multiple sites, you may prefer that when a user logs into one site, they are logged into all sites.

docs/troubleshooting/error-messages.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,17 @@ This error---and similar warnings such as **"Warning: imagettftext(): Could not
4545

4646
If that is not an option, **Use TrueType Font for Captcha?** should be set to _No_ under `Settings --> CAPTCHA` or CAPTCHAs should be disabled altogether.
4747

48+
## HTTP Authorization Header Missing
49+
50+
ExpressionEngine returns the following error message when attempting to use [Live Preview](control-panel/create.md#preview): **"HTTP Authorization Header Missing"**
51+
52+
### Troubleshooting
53+
54+
The Authorization header is stripped by some Apache servers, causing an error rendering the Live Preview. This behavior may be overridden in your [.htaccess file](installation/best-practices.md#1-create-an-htaccess-file) by adding the following line:
55+
56+
```php
57+
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
58+
```
4859
## Warning: Cannot modify header information
4960

5061
ExpressionEngine returns the following warning: **"Cannot modify header information."**

scripts/export_core_contributors.sh

Lines changed: 74 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -11,38 +11,96 @@
1111
##
1212
## This Script also is expecting the jq library to be installed. https://stedolan.github.io/jq/
1313

14-
set -eu
14+
set -euo pipefail
15+
16+
if [[ $# -ne 2 ]]; then
17+
echo "Usage: $0 <base> <head>" >&2
18+
exit 1
19+
fi
20+
21+
for dependency in curl jq mktemp; do
22+
if ! command -v "$dependency" >/dev/null 2>&1; then
23+
echo "Error: Missing required dependency: $dependency" >&2
24+
exit 1
25+
fi
26+
done
27+
1528
BASE=$1
1629
HEAD=$2
17-
here="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
18-
curl -s -u "$GHUSER:$GHTOKEN" https://api.github.com/repos/expressionengine/expressionengine/compare/$1...$2 | jq .commits > core_contributors.json
19-
length="$(cat core_contributors.json | jq '. | length')"
30+
URL="https://api.github.com/repos/expressionengine/expressionengine/compare/${BASE}...${HEAD}"
31+
32+
RESPONSE_JSON="$(mktemp)"
33+
COMMITS_JSON="$(mktemp)"
34+
CORE_CONTRIBUTORS_HTML="$(mktemp)"
35+
cleanup() {
36+
rm -f "$RESPONSE_JSON" "$COMMITS_JSON" "$CORE_CONTRIBUTORS_HTML"
37+
}
38+
trap cleanup EXIT
39+
40+
USE_BASIC_AUTH=false
41+
USE_BEARER_AUTH=false
42+
if [[ -n "${GHUSER:-}" && -n "${GHTOKEN:-}" ]]; then
43+
USE_BASIC_AUTH=true
44+
elif [[ -n "${GHTOKEN:-}" ]]; then
45+
USE_BEARER_AUTH=true
46+
else
47+
echo "Warning: GHUSER/GHTOKEN not set; using unauthenticated GitHub API requests (rate limited)." >&2
48+
fi
49+
50+
if [[ "$USE_BASIC_AUTH" == true ]]; then
51+
curl --fail --silent --show-error -u "${GHUSER}:${GHTOKEN}" "$URL" > "$RESPONSE_JSON"
52+
elif [[ "$USE_BEARER_AUTH" == true ]]; then
53+
curl --fail --silent --show-error -H "Authorization: Bearer ${GHTOKEN}" "$URL" > "$RESPONSE_JSON"
54+
else
55+
curl --fail --silent --show-error "$URL" > "$RESPONSE_JSON"
56+
fi
57+
58+
if ! jq -e '.commits and (.commits | type == "array")' "$RESPONSE_JSON" >/dev/null; then
59+
API_MESSAGE="$(jq -r '.message // "Unexpected API response: .commits not found"' "$RESPONSE_JSON")"
60+
echo "Error: $API_MESSAGE" >&2
61+
exit 1
62+
fi
63+
64+
jq '.commits' "$RESPONSE_JSON" > "$COMMITS_JSON"
2065

2166
#Now lets sort of JSON object alphabetically
22-
tmp=$(mktemp)
23-
jq ". |=sort_by(.commit | .author | .name)" core_contributors.json > "$tmp" && mv "$tmp" core_contributors.json
67+
tmp="$(mktemp)"
68+
jq ". |=sort_by(.commit | .author | .name // \"\")" "$COMMITS_JSON" > "$tmp" && mv "$tmp" "$COMMITS_JSON"
2469

70+
length="$(jq -r 'length' "$COMMITS_JSON")"
71+
if ! [[ "$length" =~ ^[0-9]+$ ]]; then
72+
echo "Error: Unable to determine commit length from GitHub response." >&2
73+
exit 1
74+
fi
2575

2676
x=0
2777
CONTRIBUTORS=""
2878
echo "Starting Loop"
2979
declare -a contributorList=()
30-
while [ $x -lt $length ]
31-
do
32-
AUTHOR=$(cat core_contributors.json | jq ".[$x] | .author | .login" | tr -d '"')
80+
while (( x < length )); do
81+
AUTHOR="$(jq -r ".[$x] | .author | .login // \"\"" "$COMMITS_JSON")"
82+
if [[ -z "$AUTHOR" ]]; then
83+
((x=x+1))
84+
continue
85+
fi
86+
3387
if [[ ! " ${contributorList[*]-} " =~ " ${AUTHOR} " ]]; then
34-
contributorList[${#contributorList[@]}]=$AUTHOR
35-
IMAGE=$(cat core_contributors.json | jq ".[$x] | .author | .avatar_url" | tr -d '"')
36-
NAME=$(cat core_contributors.json | jq ".[$x] | .commit | .author | .name" | tr -d '"')
88+
contributorList[${#contributorList[@]}]="$AUTHOR"
89+
IMAGE="$(jq -r ".[$x] | .author | .avatar_url // \"\"" "$COMMITS_JSON")"
90+
NAME="$(jq -r ".[$x] | .commit | .author | .name // \"\"" "$COMMITS_JSON")"
91+
if [[ -z "$NAME" ]]; then
92+
NAME="$AUTHOR"
93+
fi
3794

38-
echo $NAME' - '$AUTHOR | tr -d '"'
39-
CONTRIBUTORS+=$'\n<li><div class="space-y-4 text-center"><img class="mx-auto h-20 w-20 rounded-full lg:w-24 lg:h-24" src="'$IMAGE'" /><div class="space-y-2"><div class="text-xs font-medium lg:text-sm"><p class="mb-1">'$NAME'</p><p class="text-indigo-600"><a href="https://github.com/ExpressionEngine/ExpressionEngine/commits?author='$AUTHOR'" target="_BLANK">@'$AUTHOR'</a></p></div></div></div></li>'
95+
echo "$NAME - $AUTHOR"
96+
CONTRIBUTORS+=$'\n<li><div class="space-y-4 text-center"><img class="mx-auto h-20 w-20 rounded-full lg:w-24 lg:h-24" src="'"$IMAGE"'" /><div class="space-y-2"><div class="text-xs font-medium lg:text-sm"><p class="mb-1">'"$NAME"'</p><p class="text-indigo-600"><a href="https://github.com/ExpressionEngine/ExpressionEngine/commits?author='"$AUTHOR"'" target="_BLANK">@'"$AUTHOR"'</a></p></div></div></div></li>'
4097
fi
98+
4199
((x=x+1))
42100
done
43101

44102
echo "=== Copy html below and insert into changelog ==="
45-
cat > "core_contributors.html" <<- EOF
103+
cat > "$CORE_CONTRIBUTORS_HTML" <<- EOF
46104
<div class="max-w-7xl mx-autotext-center">
47105
<div class="space-y-8 sm:space-y-12">
48106
<ul role="list" class="mx-auto grid grid-cols-2 gap-x-4 gap-y-1 sm:grid-cols-4 md:gap-x-6 lg:max-w-5xl lg:gap-x-8 lg:gap-y-1 xl:grid-cols-5">
@@ -52,6 +110,4 @@ cat > "core_contributors.html" <<- EOF
52110
</div>
53111
54112
EOF
55-
cat core_contributors.html
56-
rm core_contributors.json
57-
rm core_contributors.html
113+
cat "$CORE_CONTRIBUTORS_HTML"

0 commit comments

Comments
 (0)