fix: Change the visibility of validation properties for easier inheritance - #868

Merged
kenjis merged 1 commit into
codeigniter4:developfrom
sammyskills:fix-validation-class-visibiliity
Oct 1, 2023
Merged

fix: Change the visibility of validation properties for easier inheritance#868
kenjis merged 1 commit into
codeigniter4:developfrom
sammyskills:fix-validation-class-visibiliity

Conversation

@sammyskills

@sammyskillssammyskills commented Sep 30, 2023

Copy link
Copy Markdown
Contributor

Description
Currently, the Validation class declares the properties $config and $tables as private which makes them impossible to use within child classes. This PR fixes that.

Checklist:

  • Securely signed commits
  • [] Component(s) with PHPDoc blocks, only if necessary or adds value
  • [] Unit testing, with >80% coverage
  • [] User guide updated
  • Conforms to style guide

@datamweb

Copy link
Copy Markdown
Collaborator

Hey @sammyskills,

I can understand why you want to inherit from Validation?
As you know, you can use customization/validation_rules.
Can you provide an example for better understanding?

@datamwebdatamweb added the enhancement New feature or request label Sep 30, 2023
@sammyskills

Copy link
Copy Markdown
ContributorAuthor

Hi @datamweb,

Yes, before the refactor of the validation rules from PR #861, one could easily customize the rules. But since the rules have now been placed in a class of its own, devs might want to use(reuse) some of the methods in the validation class, to create custom rules (as another way to create or use rules).

Take for instance, I have an application that uses login via phone number and password. I can create a validation class in my app/Validations directory, named ValidationRules. Within this class, I can create a method: getLoginByPhoneNumberRules(), which also utilizes the getPasswordRules() method from the parent class, like so:

// app/Validation/ValidationRules.phpuseCodeIgniter\Shield\Validation\ValidationRulesasShieldValidationRules;
class ValidationRules extends ShieldValidationRules
{
publicfunctiongetLoginByPhoneNumberRules(): array
{
return [
'phone' => 'required|numeric',
'password' => $this->getPasswordRules()
]
}
}

With the above, the getValidationRules() method of my custom LoginController _(which of course extends shield's LoginControler can return my own custom rule: getLoginByPhoneNumberRules().

I hope you get what I mean.

@datamwebdatamweb left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the explanation,
when I reviewed the #861 I was aware that there would be no limit to customization.
Now I wanted to make sure that there was no limit.

Well, I understand with your explanation, you know that you can create and use your own methods and rules in file app/Config/Validation.php. However, this PR helps the integrity of the code to a great extent.
I think this PR is acceptable.

@sammyskills

Copy link
Copy Markdown
ContributorAuthor

you know that you can create and use your own methods and rules in file app/Config/Validation.php

Yes, I know, and that is what I've been using for a while now. But the PR #861 provides yet another way to set validation rules, for devs who prefer not to use config files.

@kenjis
kenjis merged commit a5483f9 into codeigniter4:developOct 1, 2023
@kenjis

Copy link
Copy Markdown
Member

I'm fine this change if someone wants to extend the class.

@sammyskills
sammyskills deleted the fix-validation-class-visibiliity branch October 1, 2023 06:13
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@sammyskills@datamweb@kenjis
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

fix: Change the visibility of validation properties for easier inheritance - #868

Merged
kenjis merged 1 commit into
codeigniter4:developfrom
sammyskills:fix-validation-class-visibiliity
Oct 1, 2023
Merged

fix: Change the visibility of validation properties for easier inheritance#868
kenjis merged 1 commit into
codeigniter4:developfrom
sammyskills:fix-validation-class-visibiliity

Conversation

@sammyskills

@sammyskillssammyskills commented Sep 30, 2023

Copy link
Copy Markdown
Contributor

Description
Currently, the Validation class declares the properties $config and $tables as private which makes them impossible to use within child classes. This PR fixes that.

Checklist:

  • Securely signed commits
  • [] Component(s) with PHPDoc blocks, only if necessary or adds value
  • [] Unit testing, with >80% coverage
  • [] User guide updated
  • Conforms to style guide

@datamweb

Copy link
Copy Markdown
Collaborator

Hey @sammyskills,

I can understand why you want to inherit from Validation?
As you know, you can use customization/validation_rules.
Can you provide an example for better understanding?

@datamwebdatamweb added the enhancement New feature or request label Sep 30, 2023
@sammyskills

Copy link
Copy Markdown
ContributorAuthor

Hi @datamweb,

Yes, before the refactor of the validation rules from PR #861, one could easily customize the rules. But since the rules have now been placed in a class of its own, devs might want to use(reuse) some of the methods in the validation class, to create custom rules (as another way to create or use rules).

Take for instance, I have an application that uses login via phone number and password. I can create a validation class in my app/Validations directory, named ValidationRules. Within this class, I can create a method: getLoginByPhoneNumberRules(), which also utilizes the getPasswordRules() method from the parent class, like so:

// app/Validation/ValidationRules.phpuseCodeIgniter\Shield\Validation\ValidationRulesasShieldValidationRules;
class ValidationRules extends ShieldValidationRules
{
publicfunctiongetLoginByPhoneNumberRules(): array
{
return [
'phone' => 'required|numeric',
'password' => $this->getPasswordRules()
]
}
}

With the above, the getValidationRules() method of my custom LoginController _(which of course extends shield's LoginControler can return my own custom rule: getLoginByPhoneNumberRules().

I hope you get what I mean.

@datamwebdatamweb left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the explanation,
when I reviewed the #861 I was aware that there would be no limit to customization.
Now I wanted to make sure that there was no limit.

Well, I understand with your explanation, you know that you can create and use your own methods and rules in file app/Config/Validation.php. However, this PR helps the integrity of the code to a great extent.
I think this PR is acceptable.

@sammyskills

Copy link
Copy Markdown
ContributorAuthor

you know that you can create and use your own methods and rules in file app/Config/Validation.php

Yes, I know, and that is what I've been using for a while now. But the PR #861 provides yet another way to set validation rules, for devs who prefer not to use config files.

@kenjis
kenjis merged commit a5483f9 into codeigniter4:developOct 1, 2023
@kenjis

Copy link
Copy Markdown
Member

I'm fine this change if someone wants to extend the class.

@sammyskills
sammyskills deleted the fix-validation-class-visibiliity branch October 1, 2023 06:13
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@sammyskills@datamweb@kenjis
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix: Change the visibility of validation properties for easier inheritance - #868

Merged
kenjis merged 1 commit into
codeigniter4:developfrom
sammyskills:fix-validation-class-visibiliity
Oct 1, 2023
Merged

fix: Change the visibility of validation properties for easier inheritance#868
kenjis merged 1 commit into
codeigniter4:developfrom
sammyskills:fix-validation-class-visibiliity

Conversation

@sammyskills

@sammyskillssammyskills commented Sep 30, 2023

Copy link
Copy Markdown
Contributor

Description
Currently, the Validation class declares the properties $config and $tables as private which makes them impossible to use within child classes. This PR fixes that.

Checklist:

  • Securely signed commits
  • [] Component(s) with PHPDoc blocks, only if necessary or adds value
  • [] Unit testing, with >80% coverage
  • [] User guide updated
  • Conforms to style guide

@datamweb

Copy link
Copy Markdown
Collaborator

Hey @sammyskills,

I can understand why you want to inherit from Validation?
As you know, you can use customization/validation_rules.
Can you provide an example for better understanding?

@datamwebdatamweb added the enhancement New feature or request label Sep 30, 2023
@sammyskills

Copy link
Copy Markdown
ContributorAuthor

Hi @datamweb,

Yes, before the refactor of the validation rules from PR #861, one could easily customize the rules. But since the rules have now been placed in a class of its own, devs might want to use(reuse) some of the methods in the validation class, to create custom rules (as another way to create or use rules).

Take for instance, I have an application that uses login via phone number and password. I can create a validation class in my app/Validations directory, named ValidationRules. Within this class, I can create a method: getLoginByPhoneNumberRules(), which also utilizes the getPasswordRules() method from the parent class, like so:

// app/Validation/ValidationRules.phpuseCodeIgniter\Shield\Validation\ValidationRulesasShieldValidationRules;
class ValidationRules extends ShieldValidationRules
{
publicfunctiongetLoginByPhoneNumberRules(): array
{
return [
'phone' => 'required|numeric',
'password' => $this->getPasswordRules()
]
}
}

With the above, the getValidationRules() method of my custom LoginController _(which of course extends shield's LoginControler can return my own custom rule: getLoginByPhoneNumberRules().

I hope you get what I mean.

@datamwebdatamweb left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the explanation,
when I reviewed the #861 I was aware that there would be no limit to customization.
Now I wanted to make sure that there was no limit.

Well, I understand with your explanation, you know that you can create and use your own methods and rules in file app/Config/Validation.php. However, this PR helps the integrity of the code to a great extent.
I think this PR is acceptable.

@sammyskills

Copy link
Copy Markdown
ContributorAuthor

you know that you can create and use your own methods and rules in file app/Config/Validation.php

Yes, I know, and that is what I've been using for a while now. But the PR #861 provides yet another way to set validation rules, for devs who prefer not to use config files.

@kenjis
kenjis merged commit a5483f9 into codeigniter4:developOct 1, 2023
@kenjis

Copy link
Copy Markdown
Member

I'm fine this change if someone wants to extend the class.

@sammyskills
sammyskills deleted the fix-validation-class-visibiliity branch October 1, 2023 06:13
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@sammyskills@datamweb@kenjis
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix: Change the visibility of validation properties for easier inheritance - #868

Merged
kenjis merged 1 commit into
codeigniter4:developfrom
sammyskills:fix-validation-class-visibiliity
Oct 1, 2023
Merged

fix: Change the visibility of validation properties for easier inheritance#868
kenjis merged 1 commit into
codeigniter4:developfrom
sammyskills:fix-validation-class-visibiliity

Conversation

@sammyskills

@sammyskillssammyskills commented Sep 30, 2023

Copy link
Copy Markdown
Contributor

Description
Currently, the Validation class declares the properties $config and $tables as private which makes them impossible to use within child classes. This PR fixes that.

Checklist:

  • Securely signed commits
  • [] Component(s) with PHPDoc blocks, only if necessary or adds value
  • [] Unit testing, with >80% coverage
  • [] User guide updated
  • Conforms to style guide

@datamweb

Copy link
Copy Markdown
Collaborator

Hey @sammyskills,

I can understand why you want to inherit from Validation?
As you know, you can use customization/validation_rules.
Can you provide an example for better understanding?

@datamwebdatamweb added the enhancement New feature or request label Sep 30, 2023
@sammyskills

Copy link
Copy Markdown
ContributorAuthor

Hi @datamweb,

Yes, before the refactor of the validation rules from PR #861, one could easily customize the rules. But since the rules have now been placed in a class of its own, devs might want to use(reuse) some of the methods in the validation class, to create custom rules (as another way to create or use rules).

Take for instance, I have an application that uses login via phone number and password. I can create a validation class in my app/Validations directory, named ValidationRules. Within this class, I can create a method: getLoginByPhoneNumberRules(), which also utilizes the getPasswordRules() method from the parent class, like so:

// app/Validation/ValidationRules.phpuseCodeIgniter\Shield\Validation\ValidationRulesasShieldValidationRules;
class ValidationRules extends ShieldValidationRules
{
publicfunctiongetLoginByPhoneNumberRules(): array
{
return [
'phone' => 'required|numeric',
'password' => $this->getPasswordRules()
]
}
}

With the above, the getValidationRules() method of my custom LoginController _(which of course extends shield's LoginControler can return my own custom rule: getLoginByPhoneNumberRules().

I hope you get what I mean.

@datamwebdatamweb left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the explanation,
when I reviewed the #861 I was aware that there would be no limit to customization.
Now I wanted to make sure that there was no limit.

Well, I understand with your explanation, you know that you can create and use your own methods and rules in file app/Config/Validation.php. However, this PR helps the integrity of the code to a great extent.
I think this PR is acceptable.

@sammyskills

Copy link
Copy Markdown
ContributorAuthor

you know that you can create and use your own methods and rules in file app/Config/Validation.php

Yes, I know, and that is what I've been using for a while now. But the PR #861 provides yet another way to set validation rules, for devs who prefer not to use config files.

@kenjis
kenjis merged commit a5483f9 into codeigniter4:developOct 1, 2023
@kenjis

Copy link
Copy Markdown
Member

I'm fine this change if someone wants to extend the class.

@sammyskills
sammyskills deleted the fix-validation-class-visibiliity branch October 1, 2023 06:13
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@sammyskills@datamweb@kenjis
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

fix: Change the visibility of validation properties for easier inheritance - #868

Merged
kenjis merged 1 commit into
codeigniter4:developfrom
sammyskills:fix-validation-class-visibiliity
Oct 1, 2023
Merged

fix: Change the visibility of validation properties for easier inheritance#868
kenjis merged 1 commit into
codeigniter4:developfrom
sammyskills:fix-validation-class-visibiliity

Conversation

@sammyskills

@sammyskillssammyskills commented Sep 30, 2023

Copy link
Copy Markdown
Contributor

Description
Currently, the Validation class declares the properties $config and $tables as private which makes them impossible to use within child classes. This PR fixes that.

Checklist:

  • Securely signed commits
  • [] Component(s) with PHPDoc blocks, only if necessary or adds value
  • [] Unit testing, with >80% coverage
  • [] User guide updated
  • Conforms to style guide

@datamweb

Copy link
Copy Markdown
Collaborator

Hey @sammyskills,

I can understand why you want to inherit from Validation?
As you know, you can use customization/validation_rules.
Can you provide an example for better understanding?

@datamwebdatamweb added the enhancement New feature or request label Sep 30, 2023
@sammyskills

Copy link
Copy Markdown
ContributorAuthor

Hi @datamweb,

Yes, before the refactor of the validation rules from PR #861, one could easily customize the rules. But since the rules have now been placed in a class of its own, devs might want to use(reuse) some of the methods in the validation class, to create custom rules (as another way to create or use rules).

Take for instance, I have an application that uses login via phone number and password. I can create a validation class in my app/Validations directory, named ValidationRules. Within this class, I can create a method: getLoginByPhoneNumberRules(), which also utilizes the getPasswordRules() method from the parent class, like so:

// app/Validation/ValidationRules.phpuseCodeIgniter\Shield\Validation\ValidationRulesasShieldValidationRules;
class ValidationRules extends ShieldValidationRules
{
publicfunctiongetLoginByPhoneNumberRules(): array
{
return [
'phone' => 'required|numeric',
'password' => $this->getPasswordRules()
]
}
}

With the above, the getValidationRules() method of my custom LoginController _(which of course extends shield's LoginControler can return my own custom rule: getLoginByPhoneNumberRules().

I hope you get what I mean.

@datamwebdatamweb left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the explanation,
when I reviewed the #861 I was aware that there would be no limit to customization.
Now I wanted to make sure that there was no limit.

Well, I understand with your explanation, you know that you can create and use your own methods and rules in file app/Config/Validation.php. However, this PR helps the integrity of the code to a great extent.
I think this PR is acceptable.

@sammyskills

Copy link
Copy Markdown
ContributorAuthor

you know that you can create and use your own methods and rules in file app/Config/Validation.php

Yes, I know, and that is what I've been using for a while now. But the PR #861 provides yet another way to set validation rules, for devs who prefer not to use config files.

@kenjis
kenjis merged commit a5483f9 into codeigniter4:developOct 1, 2023
@kenjis

Copy link
Copy Markdown
Member

I'm fine this change if someone wants to extend the class.

@sammyskills
sammyskills deleted the fix-validation-class-visibiliity branch October 1, 2023 06:13
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@sammyskills@datamweb@kenjis
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix: Change the visibility of validation properties for easier inheritance - #868

Merged
kenjis merged 1 commit into
codeigniter4:developfrom
sammyskills:fix-validation-class-visibiliity
Oct 1, 2023
Merged

fix: Change the visibility of validation properties for easier inheritance#868
kenjis merged 1 commit into
codeigniter4:developfrom
sammyskills:fix-validation-class-visibiliity

Conversation

@sammyskills

@sammyskillssammyskills commented Sep 30, 2023

Copy link
Copy Markdown
Contributor

Description
Currently, the Validation class declares the properties $config and $tables as private which makes them impossible to use within child classes. This PR fixes that.

Checklist:

  • Securely signed commits
  • [] Component(s) with PHPDoc blocks, only if necessary or adds value
  • [] Unit testing, with >80% coverage
  • [] User guide updated
  • Conforms to style guide

@datamweb

Copy link
Copy Markdown
Collaborator

Hey @sammyskills,

I can understand why you want to inherit from Validation?
As you know, you can use customization/validation_rules.
Can you provide an example for better understanding?

@datamwebdatamweb added the enhancement New feature or request label Sep 30, 2023
@sammyskills

Copy link
Copy Markdown
ContributorAuthor

Hi @datamweb,

Yes, before the refactor of the validation rules from PR #861, one could easily customize the rules. But since the rules have now been placed in a class of its own, devs might want to use(reuse) some of the methods in the validation class, to create custom rules (as another way to create or use rules).

Take for instance, I have an application that uses login via phone number and password. I can create a validation class in my app/Validations directory, named ValidationRules. Within this class, I can create a method: getLoginByPhoneNumberRules(), which also utilizes the getPasswordRules() method from the parent class, like so:

// app/Validation/ValidationRules.phpuseCodeIgniter\Shield\Validation\ValidationRulesasShieldValidationRules;
class ValidationRules extends ShieldValidationRules
{
publicfunctiongetLoginByPhoneNumberRules(): array
{
return [
'phone' => 'required|numeric',
'password' => $this->getPasswordRules()
]
}
}

With the above, the getValidationRules() method of my custom LoginController _(which of course extends shield's LoginControler can return my own custom rule: getLoginByPhoneNumberRules().

I hope you get what I mean.

@datamwebdatamweb left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the explanation,
when I reviewed the #861 I was aware that there would be no limit to customization.
Now I wanted to make sure that there was no limit.

Well, I understand with your explanation, you know that you can create and use your own methods and rules in file app/Config/Validation.php. However, this PR helps the integrity of the code to a great extent.
I think this PR is acceptable.

@sammyskills

Copy link
Copy Markdown
ContributorAuthor

you know that you can create and use your own methods and rules in file app/Config/Validation.php

Yes, I know, and that is what I've been using for a while now. But the PR #861 provides yet another way to set validation rules, for devs who prefer not to use config files.

@kenjis
kenjis merged commit a5483f9 into codeigniter4:developOct 1, 2023
@kenjis

Copy link
Copy Markdown
Member

I'm fine this change if someone wants to extend the class.

@sammyskills
sammyskills deleted the fix-validation-class-visibiliity branch October 1, 2023 06:13
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@sammyskills@datamweb@kenjis
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix: Change the visibility of validation properties for easier inheritance - #868

Merged
kenjis merged 1 commit into
codeigniter4:developfrom
sammyskills:fix-validation-class-visibiliity
Oct 1, 2023
Merged

fix: Change the visibility of validation properties for easier inheritance#868
kenjis merged 1 commit into
codeigniter4:developfrom
sammyskills:fix-validation-class-visibiliity

Conversation

@sammyskills

@sammyskillssammyskills commented Sep 30, 2023

Copy link
Copy Markdown
Contributor

Description
Currently, the Validation class declares the properties $config and $tables as private which makes them impossible to use within child classes. This PR fixes that.

Checklist:

  • Securely signed commits
  • [] Component(s) with PHPDoc blocks, only if necessary or adds value
  • [] Unit testing, with >80% coverage
  • [] User guide updated
  • Conforms to style guide

@datamweb

Copy link
Copy Markdown
Collaborator

Hey @sammyskills,

I can understand why you want to inherit from Validation?
As you know, you can use customization/validation_rules.
Can you provide an example for better understanding?

@datamwebdatamweb added the enhancement New feature or request label Sep 30, 2023
@sammyskills

Copy link
Copy Markdown
ContributorAuthor

Hi @datamweb,

Yes, before the refactor of the validation rules from PR #861, one could easily customize the rules. But since the rules have now been placed in a class of its own, devs might want to use(reuse) some of the methods in the validation class, to create custom rules (as another way to create or use rules).

Take for instance, I have an application that uses login via phone number and password. I can create a validation class in my app/Validations directory, named ValidationRules. Within this class, I can create a method: getLoginByPhoneNumberRules(), which also utilizes the getPasswordRules() method from the parent class, like so:

// app/Validation/ValidationRules.phpuseCodeIgniter\Shield\Validation\ValidationRulesasShieldValidationRules;
class ValidationRules extends ShieldValidationRules
{
publicfunctiongetLoginByPhoneNumberRules(): array
{
return [
'phone' => 'required|numeric',
'password' => $this->getPasswordRules()
]
}
}

With the above, the getValidationRules() method of my custom LoginController _(which of course extends shield's LoginControler can return my own custom rule: getLoginByPhoneNumberRules().

I hope you get what I mean.

@datamwebdatamweb left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the explanation,
when I reviewed the #861 I was aware that there would be no limit to customization.
Now I wanted to make sure that there was no limit.

Well, I understand with your explanation, you know that you can create and use your own methods and rules in file app/Config/Validation.php. However, this PR helps the integrity of the code to a great extent.
I think this PR is acceptable.

@sammyskills

Copy link
Copy Markdown
ContributorAuthor

you know that you can create and use your own methods and rules in file app/Config/Validation.php

Yes, I know, and that is what I've been using for a while now. But the PR #861 provides yet another way to set validation rules, for devs who prefer not to use config files.

@kenjis
kenjis merged commit a5483f9 into codeigniter4:developOct 1, 2023
@kenjis

Copy link
Copy Markdown
Member

I'm fine this change if someone wants to extend the class.

@sammyskills
sammyskills deleted the fix-validation-class-visibiliity branch October 1, 2023 06:13
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@sammyskills@datamweb@kenjis
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

fix: Change the visibility of validation properties for easier inheritance - #868

Merged
kenjis merged 1 commit into
codeigniter4:developfrom
sammyskills:fix-validation-class-visibiliity
Oct 1, 2023
Merged

fix: Change the visibility of validation properties for easier inheritance#868
kenjis merged 1 commit into
codeigniter4:developfrom
sammyskills:fix-validation-class-visibiliity

Conversation

@sammyskills

@sammyskillssammyskills commented Sep 30, 2023

Copy link
Copy Markdown
Contributor

Description
Currently, the Validation class declares the properties $config and $tables as private which makes them impossible to use within child classes. This PR fixes that.

Checklist:

  • Securely signed commits
  • [] Component(s) with PHPDoc blocks, only if necessary or adds value
  • [] Unit testing, with >80% coverage
  • [] User guide updated
  • Conforms to style guide

@datamweb

Copy link
Copy Markdown
Collaborator

Hey @sammyskills,

I can understand why you want to inherit from Validation?
As you know, you can use customization/validation_rules.
Can you provide an example for better understanding?

@datamwebdatamweb added the enhancement New feature or request label Sep 30, 2023
@sammyskills

Copy link
Copy Markdown
ContributorAuthor

Hi @datamweb,

Yes, before the refactor of the validation rules from PR #861, one could easily customize the rules. But since the rules have now been placed in a class of its own, devs might want to use(reuse) some of the methods in the validation class, to create custom rules (as another way to create or use rules).

Take for instance, I have an application that uses login via phone number and password. I can create a validation class in my app/Validations directory, named ValidationRules. Within this class, I can create a method: getLoginByPhoneNumberRules(), which also utilizes the getPasswordRules() method from the parent class, like so:

// app/Validation/ValidationRules.phpuseCodeIgniter\Shield\Validation\ValidationRulesasShieldValidationRules;
class ValidationRules extends ShieldValidationRules
{
publicfunctiongetLoginByPhoneNumberRules(): array
{
return [
'phone' => 'required|numeric',
'password' => $this->getPasswordRules()
]
}
}

With the above, the getValidationRules() method of my custom LoginController _(which of course extends shield's LoginControler can return my own custom rule: getLoginByPhoneNumberRules().

I hope you get what I mean.

@datamwebdatamweb left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the explanation,
when I reviewed the #861 I was aware that there would be no limit to customization.
Now I wanted to make sure that there was no limit.

Well, I understand with your explanation, you know that you can create and use your own methods and rules in file app/Config/Validation.php. However, this PR helps the integrity of the code to a great extent.
I think this PR is acceptable.

@sammyskills

Copy link
Copy Markdown
ContributorAuthor

you know that you can create and use your own methods and rules in file app/Config/Validation.php

Yes, I know, and that is what I've been using for a while now. But the PR #861 provides yet another way to set validation rules, for devs who prefer not to use config files.

@kenjis
kenjis merged commit a5483f9 into codeigniter4:developOct 1, 2023
@kenjis

Copy link
Copy Markdown
Member

I'm fine this change if someone wants to extend the class.

@sammyskills
sammyskills deleted the fix-validation-class-visibiliity branch October 1, 2023 06:13
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@sammyskills@datamweb@kenjis