Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions docs/add-ons/file.md
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,21 @@ You can hard code the file entries tag to show specific files. You may also spec

If you want to display only the files that are in certain folder within an Upload Directory, specify the folder ID using this parameter.

### `mime_type=`

mime_type="image/jpeg|image/png"

Filter returned files by MIME type. You may specify one or more MIME types; separate multiple values with the pipe character.

Or use "not" to exclude types:

mime_type="not video/mp4|video/quicktime"

Common examples:

- Images only: `mime_type="image/jpeg|image/png|image/gif"`
- PDFs only: `mime_type="application/pdf"`

### `limit=`

limit="30"
Expand Down
21 changes: 20 additions & 1 deletion docs/development/extension-hooks/cp/login.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ How it's called:

$this->extensions->call('cp_member_logout');
if ($this->extensions->end_script === TRUE) return;

## `cp_member_reset_password()`

| Parameter | Type |
Expand All @@ -67,3 +67,22 @@ How it's called:

$this->extensions->call('cp_member_process_reset_password');
if ($this->extensions->end_script === TRUE) return;

## `cp_member_send_reset_token_start($address)`

| Parameter | Type | Description
| --------- | -------- | ---------------------------------------------------------------
| $address | `String` | Email address posted from the control panel reset password form
| Returns | `String` | Email address after extension processes it

Additional processing of email address sent via control panel reset password form.

How it's called:

if (ee()->extensions->active_hook('member_auth_send_reset_token_start')) {
$address = ee()->extensions->call('member_auth_send_reset_token_start', $address);
if (ee()->extensions->end_script === true) {
return;
}
}

42 changes: 42 additions & 0 deletions docs/development/extension-hooks/global/email.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,50 @@ lang: php

# Email Library Extension Hooks

## `email_from_address($from, $name)`

| Parameter | Type | Description
| --------- | -------- | --------------------------------------
| $from | `String` | Email `from` address
| $name | `String` | Email `name` for `from` address
| Returns | `Array` | Associative array

Overwrite an email `from` address.

How it's called:

if (ee()->extensions->active_hook('email_from_address')) {
$processed_address = ee()->extensions->call('email_from_address', $from, $name);
$from = $processed_address['from'] ?? $from;
$name = $processed_address['name'] ?? $name;

if (ee()->extensions->end_script === true) {
return;
}
}

## `email_to_address($to)`

| Parameter | Type | Description
| --------- | -------- | --------------------------------------
| $to | `String` | Email `from` address
| Returns | `String` | Manipulated Email `to` address

Overwrite an email `to` address.

How it's called:

if (ee()->extensions->active_hook('email_to_address')) {
$to = ee()->extensions->call('email_to_address', $to);

if (ee()->extensions->end_script === true) {
return;
}
}

## `email_send(&$data)`


| Parameter | Type | Description |
| --------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| &\$data | `Array` | Array of data about email to be sent (see above) passed [by reference](https://php.net/manual/en/language.references.pass.php) so data may be altered without needing to return the altered data |
Expand Down
18 changes: 18 additions & 0 deletions docs/development/extension-hooks/module/member-auth.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,24 @@ How it's called:
$edata = ee()->extensions->call('member_member_logout');
if (ee()->extensions->end_script === TRUE) return;

## `member_auth_send_reset_token_start($address)`

| Parameter | Type | Description
| --------- | -------- | ---------------------------------------------
| $address | `String` | Email address posted from reset password form
| Returns | `String` | Email address after extension processes it

Additional processing of email address sent via reset password form. Happens after basic security checks, but before email address check occurs.

How it's called:

if (ee()->extensions->active_hook('member_auth_send_reset_token_start')) {
$address = ee()->extensions->call('member_auth_send_reset_token_start', $address);
if (ee()->extensions->end_script === true) {
return;
}
}

## `member_process_reset_password()`

| Parameter | Type | Description |
Expand Down
36 changes: 36 additions & 0 deletions docs/installation/changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,42 @@
-->
# ExpressionEngine v7 Change Log

# Version 7.5.15
(Release: August 20th, 2025)
<div class="max-w-7xl mx-autotext-center">
<div class="space-y-8 sm:space-y-12">
<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">

<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>
<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/11818941?v=4" /><div class="space-y-2"><div class="text-xs font-medium lg:text-sm"><p class="mb-1">Matt Johnson</p><p class="text-indigo-600"><a href="https://github.com/ExpressionEngine/ExpressionEngine/commits?author=matthewjohns0n" target="_BLANK">@matthewjohns0n</a></p></div></div></div></li>
<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>
<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/23382425?v=4" /><div class="space-y-2"><div class="text-xs font-medium lg:text-sm"><p class="mb-1">Yulya Lebed</p><p class="text-indigo-600"><a href="https://github.com/ExpressionEngine/ExpressionEngine/commits?author=Yulyaswan" target="_BLANK">@Yulyaswan</a></p></div></div></div></li>
<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/752126?v=4" /><div class="space-y-2"><div class="text-xs font-medium lg:text-sm"><p class="mb-1">Yuri Salimovskiy</p><p class="text-indigo-600"><a href="https://github.com/ExpressionEngine/ExpressionEngine/commits?author=intoeetive" target="_BLANK">@intoeetive</a></p></div></div></div></li>
<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>
</ul>
</div>
</div>


**Bug Fixes** 🐛

- Fixed [#4923](https://github.com/ExpressionEngine/ExpressionEngine/issues/4923) where RTE ckeditor unordered list style issue [#4944](https://github.com/ExpressionEngine/ExpressionEngine/pull/4944)
- Resolved an issue where base_path and theme_path could be incorrectly set when installed with system folder above web root [#4940](https://github.com/ExpressionEngine/ExpressionEngine/pull/4940)
- Resolved [#4933](https://github.com/ExpressionEngine/ExpressionEngine/issues/4933) changed row getter to account for model object as well [#4939](https://github.com/ExpressionEngine/ExpressionEngine/pull/4939)
- Fixed [#4891](https://github.com/ExpressionEngine/ExpressionEngine/issues/4891): Removed the "\*" displayed on individual input boxes of a required Grid field [#4912](https://github.com/ExpressionEngine/ExpressionEngine/pull/4912)

**Enhancements** ✨

- Add mime_type parameter to {exp:file:entries} tag [#4942](https://github.com/ExpressionEngine/ExpressionEngine/pull/4942)
- Add Strict-Transport-Security header to HTTP Header addon [#4934](https://github.com/ExpressionEngine/ExpressionEngine/pull/4934)
- Bypass on-the-fly manipulations if the image is not editable (e.g. SVG); [#4868](https://github.com/ExpressionEngine/ExpressionEngine/issues/4868) [#4909](https://github.com/ExpressionEngine/ExpressionEngine/pull/4909)
- Make no_results work in rss parser add-on [#4869](https://github.com/ExpressionEngine/ExpressionEngine/pull/4869)

**Developers** 💻

- 4 new hooks for email and forgotten passwords [#4833](https://github.com/ExpressionEngine/ExpressionEngine/pull/4833)
- Additional developer improvements [#4805](https://github.com/ExpressionEngine/ExpressionEngine/pull/4805)

## Version 7.5.14
(Release: August 6th, 2025)
<div class="max-w-7xl mx-autotext-center">
Expand Down
12 changes: 6 additions & 6 deletions scripts/utility.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ const bsToFs = (p) => p.replace(/\\/g, '/')
// Gets the folder depth of the specified path
const dirDepth = (myDir) => myDir.split(Path.sep).length

const returnEmbedContents = (match, p1, p2, p3, offset, string) => {
const returnEmbedContents = (match, p1, p2, p3, offset, string) => {
console.log("Found Embed: " + p1);
try {
embedContents = Fs.readFileSync('./docs/'+p1, { encoding: 'utf8' });
Expand All @@ -40,18 +40,18 @@ const renderTemplate = (template, vars, currentPageInfo) => {;
template = template.replace(new RegExp('{{\\s*' + key + '\\s*}}', 'gi'), value)
}


template = template.replace(new RegExp('(?<!code>){{embed\:([^"\']*?)}}', 'gi'),returnEmbedContents);

return template
}

// Gets the relative path to the source dir from a docs page
// Gets the relative path to the source dir from a docs page, returning a web-safe path
const getRelativeRootFromPage = (pagePath) => {
let depth = dirDepth(pagePath) - dirDepth(Path.resolve(CONFIG.sourceDir))
let relPath = ('..' + Path.sep).repeat(depth - 1)

return relPath
if (depth <= 1) return './';
let relPath = '../'.repeat(depth - 1);
return relPath.replace(/\/+$/, '') + '/';
}

// Returns a function that will slugify a heading and also handle future duplicate slugs when called again
Expand Down
1 change: 0 additions & 1 deletion theme/doc-page-template.html
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,6 @@
</script>
</head>
<body>

<div class="header">
<div class="header-content">
<a href="https://docs.expressionengine.com/latest" class="header-logo"><img src="{{root_dir}}_assets/images/ee-logo-white.svg" alt=""></a>
Expand Down