From 0593552f2d90d2c33558fc627b6d0b45a196b037 Mon Sep 17 00:00:00 2001 From: Yulya Lebed Date: Tue, 29 Jul 2025 09:09:20 +0200 Subject: [PATCH 01/11] changes script to return correct 404 page if it deeper the 1 level --- scripts/utility.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/scripts/utility.js b/scripts/utility.js index 6e80e76d1..d31ff532b 100644 --- a/scripts/utility.js +++ b/scripts/utility.js @@ -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' }); @@ -40,18 +40,18 @@ const renderTemplate = (template, vars, currentPageInfo) => {; template = template.replace(new RegExp('{{\\s*' + key + '\\s*}}', 'gi'), value) } - + template = template.replace(new RegExp('(?){{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 From 8ba0a69e9e004e3192a8bacede244182d83e96b4 Mon Sep 17 00:00:00 2001 From: robinsowell Date: Mon, 4 Aug 2025 14:37:12 -0400 Subject: [PATCH 02/11] Adding email address hooks docs Documenting new hooks related to email address overrides. https://github.com/ExpressionEngine/ExpressionEngine/pull/4805 --- docs/development/extension-hooks/cp/login.md | 23 ++++++++++- .../extension-hooks/global/email.md | 39 +++++++++++++++++++ .../extension-hooks/module/member-auth.md | 21 ++++++++++ 3 files changed, 82 insertions(+), 1 deletion(-) diff --git a/docs/development/extension-hooks/cp/login.md b/docs/development/extension-hooks/cp/login.md index a5a275ebb..0932c2a5a 100755 --- a/docs/development/extension-hooks/cp/login.md +++ b/docs/development/extension-hooks/cp/login.md @@ -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 | @@ -67,3 +67,24 @@ 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; + } + } +``` + diff --git a/docs/development/extension-hooks/global/email.md b/docs/development/extension-hooks/global/email.md index 6efd70ff6..69cf7a48b 100755 --- a/docs/development/extension-hooks/global/email.md +++ b/docs/development/extension-hooks/global/email.md @@ -13,8 +13,47 @@ 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 | `String` | Manipulated Email `from` address + +Overwrite an email `from` address. + +How it's called: + +``` + if (ee()->extensions->active_hook('email_from_address')) { + $from = ee()->extensions->call('email_from_address', $from, $name); + } +``` + +## `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); + } +``` + + ## `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 | diff --git a/docs/development/extension-hooks/module/member-auth.md b/docs/development/extension-hooks/module/member-auth.md index 08fca9d76..e672a6704 100755 --- a/docs/development/extension-hooks/module/member-auth.md +++ b/docs/development/extension-hooks/module/member-auth.md @@ -69,6 +69,27 @@ 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 | From 48f6e007a8f946142b92b5dedafbbc00a5f616ad Mon Sep 17 00:00:00 2001 From: robinsowell Date: Wed, 6 Aug 2025 09:32:49 -0400 Subject: [PATCH 03/11] Cleaning up display issues --- docs/development/extension-hooks/cp/login.md | 4 +--- docs/development/extension-hooks/global/email.md | 7 ------- docs/development/extension-hooks/module/member-auth.md | 3 --- 3 files changed, 1 insertion(+), 13 deletions(-) diff --git a/docs/development/extension-hooks/cp/login.md b/docs/development/extension-hooks/cp/login.md index 0932c2a5a..ee63b213f 100755 --- a/docs/development/extension-hooks/cp/login.md +++ b/docs/development/extension-hooks/cp/login.md @@ -79,12 +79,10 @@ Additional processing of email address sent via control panel reset password for 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; } } -``` - + diff --git a/docs/development/extension-hooks/global/email.md b/docs/development/extension-hooks/global/email.md index 69cf7a48b..616002b84 100755 --- a/docs/development/extension-hooks/global/email.md +++ b/docs/development/extension-hooks/global/email.md @@ -25,11 +25,9 @@ Overwrite an email `from` address. How it's called: -``` if (ee()->extensions->active_hook('email_from_address')) { $from = ee()->extensions->call('email_from_address', $from, $name); } -``` ## `email_to_address($to)` @@ -42,18 +40,13 @@ 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); } -``` - ## `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 | diff --git a/docs/development/extension-hooks/module/member-auth.md b/docs/development/extension-hooks/module/member-auth.md index e672a6704..ae42895e9 100755 --- a/docs/development/extension-hooks/module/member-auth.md +++ b/docs/development/extension-hooks/module/member-auth.md @@ -80,15 +80,12 @@ Additional processing of email address sent via reset password form. Happens af 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()` From a382ae0e76f9828774a61d792e52cac177be2891 Mon Sep 17 00:00:00 2001 From: Yulya Lebed Date: Thu, 7 Aug 2025 17:36:27 +0200 Subject: [PATCH 04/11] check what root_dir is returning --- theme/doc-page-template.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/theme/doc-page-template.html b/theme/doc-page-template.html index be4032ae7..108dd62db 100755 --- a/theme/doc-page-template.html +++ b/theme/doc-page-template.html @@ -54,7 +54,6 @@ -
@@ -92,6 +91,7 @@
+

root_dir - {{root_dir}}