Skip to content

Use latest version of vnu to validate HTML5#553

Merged
tenzap merged 14 commits into
kalkun-sms:develfrom
tenzap:feature-250-vnuLatest
May 9, 2026
Merged

Use latest version of vnu to validate HTML5#553
tenzap merged 14 commits into
kalkun-sms:develfrom
tenzap:feature-250-vnuLatest

Conversation

@tenzap

@tenzap tenzap commented May 8, 2026

Copy link
Copy Markdown
Collaborator

Summary by CodeRabbit

  • New Features

    • Enhanced HTML structure and semantic markup across the application interface.
  • Style

    • Modernized HTML5 syntax by removing deprecated attributes and self-closing tag syntax.
    • Improved heading hierarchy for better visual organization and accessibility.
  • Chores

    • Updated CI/CD workflow configuration for improved build reliability.

tenzap added 12 commits May 8, 2026 13:19
The heading "h4" (with computed level 4) follows the heading "h2" (with computed level 2), skipping 1 heading level.
The heading "h4" (with computed level 4) follows the heading "h1" (with computed level 1), skipping 2 heading levels.
The heading "h3" (with computed level 3) follows the heading "h1" (with computed level 1), skipping 1 heading level.
and interacts badly with unquoted attribute values
Fixes these vnu warnings:

- The language attribute on the script element is obsolete. Use the type attribute instead.
- The type attribute is unnecessary for JavaScript resources.
The type attribute for the style element is not needed and should be omitted.
Trailing slash on void elements has no effect and interacts badly with unquoted attribute values.
Trailing slash on void elements has no effect and interacts badly with unquoted attribute values.
Trailing slash on void elements has no effect and interacts badly with unquoted attribute values.
Trailing slash on void elements has no effect and interacts badly with unquoted attribute values.
@coderabbitai

coderabbitai Bot commented May 8, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Rate limit exceeded

@tenzap has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 5 minutes and 6 seconds before requesting another review.

You’ve run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: c21c2c47-f7df-4ac1-9a8b-bdca65c8f7f8

📥 Commits

Reviewing files that changed from the base of the PR and between cf8c3d5 and 5c388ab.

📒 Files selected for processing (4)
  • application/views/main/base.php
  • application/views/main/dashboard/home.php
  • application/views/main/install/layout.php
  • media/css/install.css

Walkthrough

This PR modernizes the codebase's HTML markup to HTML5 standards: removing self-closing XHTML-style slashes, deprecated type and language attributes from script and style tags, promoting heading levels from h3/h4 to h1/h2 with corresponding CSS updates, and updating the CI workflow to download vnu.jar directly. All ~220 affected files contain coordinated changes to achieve valid HTML5 output.

Changes

HTML5 Modernization Sweep

Layer / File(s) Summary
CI Workflow
.github/workflows/codeigniter.yml
vnu.jar now downloads directly from latest validator/validator release into utils/ instead of via versioned zip; added explicit version output step.
CSS Heading Styles
media/css/base.css, media/css/blue.css, media/css/install.css
New CSS rules for h1 and h2.section headings (font sizing, margins, centering, borders); removed h4.section rule; blue color moved from h3 to article.plugin h1.
Plugin View Templates
application/plugins/*/views/*
All plugin views: removed self-closing slashes from input/img tags, dropped type="text/javascript" and language="javascript" from script tags, normalized form field markup, updated h4 labels to <p><strong> or kept heading structure consistent.
Main Application Views
application/views/main/*, application/views/errors/*, application/views/js_init/*, application/views/install/*
Dashboard, login, password reset, phonebook, message composition, settings, user management, and installation views: removed self-closing slashes, deprecated script/style/language attributes, promoted h2/h3 headings to h1, added <article class="plugin"> wrapper in plugin-adjacent sections, normalized <br> formatting.
Test Assertions
tests/controllers/Install_test.php, tests/controllers/Messages_test.php, tests/controllers/Pluginss_test.php
Updated 14 test assertions to expect <h1> headings instead of <h2> or <h3>, non-self-closing input elements, and aligned assertions with new HTML structure.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • kalkun-sms/Kalkun#544: Related modernization PR that includes the same vnu.jar CI workflow change and overlapping HTML5 heading/markup updates across plugins and views with test updates.
  • kalkun-sms/Kalkun#548: Related workflow change; modifies the same .github/workflows/codeigniter.yml file but for PHPUnit and Composer dependency management rather than vnu.jar setup.

Suggested reviewers

  • kingster
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Title check ⚠️ Warning The title is vague and does not accurately reflect the main scope of the changeset. The PR contains extensive HTML modernization across 50+ files (removing XHTML-style self-closing slashes, deprecated script/style attributes), with only one file (.github/workflows/codeigniter.yml) addressing the vnu validator update mentioned in the title. Update the title to reflect the primary change: something like 'Modernize HTML markup across application and views' or 'Remove XHTML-style self-closing syntax and deprecated attributes' would more accurately represent the 99% of changes in this PR.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (3)
application/views/main/users/add_user.php (1)

9-29: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Incomplete self-closing slash removal – realname, phone_number, and username inputs still use /> syntax.

Lines 12, 17, and 22 retain XHTML-style /> on <input> tags while the password inputs directly below were updated. Since the PR objective is full HTML5 compliance validated by vnu, these will still trigger validator errors.

🐛 Proposed fix
-		<input type="text" name="realname" id="realname" value="..." class="text ui-widget-content ui-corner-all" />
+		<input type="text" name="realname" id="realname" value="..." class="text ui-widget-content ui-corner-all">
 		...
-		<input type="text" name="phone_number" id="phone_number" value="..." class="text ui-widget-content ui-corner-all" />
+		<input type="text" name="phone_number" id="phone_number" value="..." class="text ui-widget-content ui-corner-all">
 		...
-		<input type="text" name="username" id="username" value="..." class="text ui-widget-content ui-corner-all" />
+		<input type="text" name="username" id="username" value="..." class="text ui-widget-content ui-corner-all">
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@application/views/main/users/add_user.php` around lines 9 - 29, The three
input elements for realname, phone_number and username still use the XHTML
self-closing "/>" syntax; update the <input> tags identified by id="realname",
id="phone_number" and id="username" to use plain HTML5 void element syntax
(remove the trailing slash) so they match the password inputs and pass the vnu
HTML5 validator.
.github/workflows/codeigniter.yml (1)

99-107: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

releaseId: 'latest' is not valid — CI download step will likely fail.

The robinraju/release-downloader action expects releaseId to be a numeric GitHub release ID (e.g., releaseId: '123123'); the string 'latest' is not a documented or supported value for that field. To download from the latest release, use latest: true and omit releaseId entirely.

The current combination of latest: false + releaseId: 'latest' will produce an API error or silently download the wrong artifact, breaking every CI run that needs vnu.jar.

🐛 Proposed fix
      - uses: robinraju/release-downloader@v1
        with:
          repository: 'validator/validator'
-         latest: false
-         releaseId: 'latest'
+         latest: true
          fileName: 'vnu.jar'
          tarBall: false
          zipBall: false
          out-file-path: 'utils'
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/codeigniter.yml around lines 99 - 107, The workflow step
using the robinraju/release-downloader action is passing an invalid releaseId
('latest') while latest is false; update the step that references releaseId,
latest, fileName (vnu.jar) and out-file-path (utils) to either set latest: true
and remove the releaseId field entirely to fetch the latest release, or replace
releaseId: 'latest' with a numeric GitHub release ID string (e.g., '123123') if
you want a specific release.
application/views/main/dashboard/statistic.php (1)

93-113: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Three parallel <h1> elements for sub-section panel labels — accessibility concern

"Folders", "My folders", and "Phonebook" are side-by-side summary panels within the statistics view, not independent primary page sections. Promoting all three from <h4> to <h1> creates three equal-rank level-1 headings on the same page without any sectioning context (<section>, <article>, etc.).

The h1 is for the page title only. Having multiple h1 elements on a web page is bad practice, for accessibility and for SEO — it creates a flat and meaningless structure. Headings should reflect the real structure of the page rather than visual styling choices, helping users understand how content is organised. Screen readers that present a heading outline to users would surface three "level 1" headings with no clear primary entry point.

The CSS approach of restyling h1 elements to appear visually smaller via selectors in base.css achieves the visual goal, but h2 (or h3) would be semantically correct for these panel labels while h1 is reserved for the page's primary heading.

♻️ Proposed fix
-	<h1><?php echo tr('Folders');?>: </h1>
+	<h2><?php echo tr('Folders');?>: </h2>
 ...
-	<h1><?php echo tr('My folders');?>: </h1>
+	<h2><?php echo tr('My folders');?>: </h2>
 ...
-	<h1><?php echo tr('Phonebook');?>: </h1>
+	<h2><?php echo tr('Phonebook');?>: </h2>
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@application/views/main/dashboard/statistic.php` around lines 93 - 113, The
three panel titles currently use top-level headings (<h1><?php echo
tr('Folders');?>: </h1>, <h1><?php echo tr('My folders');?>: </h1>, <h1><?php
echo tr('Phonebook');?>: </h1>) which incorrectly create multiple h1s; change
these to a lower-level semantic heading (e.g., <h2> or <h3>) so the page retains
a single primary h1 and each panel has an appropriate subheading, and optionally
wrap each panel in a section element with aria-labelledby pointing to the new
heading ID for better accessibility.
🧹 Nitpick comments (7)
application/plugins/soap/views/index.php (3)

132-166: 💤 Low value

Consider removing commented-out code.

This notification view section is commented out. If it's no longer needed, consider removing it entirely and relying on version control history. If it's planned for future use, consider adding a TODO comment explaining the intent.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@application/plugins/soap/views/index.php` around lines 132 - 166, The block
of commented-out HTML starting with <!--div id="space_area"> and containing the
notification plugin UI (elements like id="addnotificationbutton",
id="notification", class="simplebutton", and the "Notification" header) should
be removed or documented; either delete this entire commented-out section to
clean the view or replace the HTML comment with a brief TODO explaining why the
notification markup is preserved for future use (e.g., "TODO: retain
notification UI for feature X"), ensuring you remove the large commented block
or add the TODO comment in place of it.

57-68: ⚖️ Poor tradeoff

Consider refactoring to semantic table structure.

The hidden header row is a workaround for validation. A cleaner HTML5 approach would use explicit <thead> and <tbody> elements with proper semantic structure.

♻️ Potential refactor to semantic table structure

Replace the hidden row with proper table structure:

 <table class="nice-table">
-  <tr style="display: none">
-    <!-- this is a hack to pass validation https://stackoverflow.com/a/52175495 -->
-    <th></th>
-    ...
-  </tr>
+  <thead>
   <tr>
     <th class="nice-table-left">No.</th>
     ...
   </tr>
+  </thead>
+  <tbody>
   <?php
   ...
   ?>
+  </tbody>
+  <tfoot>
   <tr>
     <th colspan="8" class="nice-table-footer">
       ...
     </th>
   </tr>
+  </tfoot>
 </table>
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@application/plugins/soap/views/index.php` around lines 57 - 68, The table
currently uses a hidden <tr> hack to satisfy validation; instead update the
markup for the element with class "nice-table" to use a semantic table
structure: add a <thead> containing actual <th> cells (use descriptive text or
visually-hidden labels) and move the data rows into a <tbody>, removing the
display:none hidden row; ensure each header uses <th scope="col"> (or
scope="row" where appropriate) so the existing rendering and accessibility
remain intact.

123-126: ⚡ Quick win

Consider fixing the "notifiy" field name misspelling as part of planned refactoring.

The field name notifiy at line 126 is a misspelling of "notify" and is used consistently across the view and controller (checked at application/plugins/soap/controllers/Soap.php:41). While the naming is internally consistent and functional, the TODO comment at line 83 of the controller suggests this may be part of a planned refactoring effort. Coordinate any fix across both the form field name and the corresponding server-side post data validation.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@application/plugins/soap/views/index.php` around lines 123 - 126, Rename the
misspelled form field name/id "notifiy" to "notify" in the view (input
name="notifiy" id="notifiy" -> name="notify" id="notify") and update any
server-side references that expect "notifiy" (e.g., the POST key check in the
Soap controller where "notifiy" is referenced) to use "notify"; ensure the
controller's validation and any uses in methods (e.g., the POST handling logic
in Soap::whatever method that checks $_POST['notifiy']) are updated accordingly,
and optionally add a short compatibility branch that also accepts the old
"notifiy" key during the transition.
media/css/base.css (1)

556-565: 💤 Low value

Consider shorthand margin to reduce verbosity.

The four separate margin-* properties can be collapsed. Minor nit only.

♻️ Proposed shorthand
 .dash_box h1 {
     /* default style of h4 */
     display: block;
     font-size: 1em;
-    margin-top: 1.33em;
-    margin-bottom: 1.33em;
-    margin-left: 0;
-    margin-right: 0;
+    margin: 1.33em 0;
     font-weight: bold;
 }
 article.plugin h1 {
     /* Apply default value for h3 */
     display: block;
     font-size: 1.17em;
-    margin-top: 1em;
-    margin-bottom: 1em;
-    margin-left: 0;
-    margin-right: 0;
+    margin: 1em 0;
     font-weight: bold;
 }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@media/css/base.css` around lines 556 - 565, The CSS block for the selector
.dash_box h1 uses four separate margin properties; replace margin-top,
margin-bottom, margin-left and margin-right with a single margin shorthand on
the .dash_box h1 rule (e.g., margin: 1.33em 0;) to collapse those declarations
and reduce verbosity while preserving layout.
application/views/main/search.php (1)

7-23: ⚡ Quick win

Incomplete /> cleanup on text inputs.

The two text <input> elements (lines 10 and 22) still carry the XHTML-style trailing /> that this PR removes everywhere else, while the adjacent submit inputs were cleaned up. Within the same file the style is now mixed.

♻️ Proposed fix
-		<td><input type="text" name="search_name" id="search" value="..." class="ui-corner-left" /></td>
+		<td><input type="text" name="search_name" id="search" value="..." class="ui-corner-left"></td>

(Apply the same change to the search_sms input on line 22.)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@application/views/main/search.php` around lines 7 - 23, The two text input
tags still use XHTML-style self-closing "/>"; update the input elements for
search_name and search_sms (the inputs with name="search_name" and
name="search_sms", both id="search") to use the same HTML-style closing as the
submit inputs by removing the trailing slash so they end with ">" instead of
"/>".
application/views/main/login.php (1)

53-56: ⚡ Quick win

Associate labels to inputs for better accessibility.

At Line 53 and Line 56, add for attributes and an id on the password input so labels are announced correctly by assistive tech.

Suggested fix
- <td><label><?php echo tr('Username'); ?></label><input type="text" name="username" id="username" style="width:95%"></td>
+ <td><label for="username"><?php echo tr('Username'); ?></label><input type="text" name="username" id="username" style="width:95%"></td>

- <td><label><?php echo tr('Password'); ?></label><input type="password" name="password" style="width:95%"></td>
+ <td><label for="password"><?php echo tr('Password'); ?></label><input type="password" id="password" name="password" style="width:95%"></td>
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@application/views/main/login.php` around lines 53 - 56, The labels for the
username and password inputs are not properly associated with their inputs;
update the Username label to include for="username" (it already has input
id="username") and add an id (e.g., id="password") to the password input and
update the Password label to for="password" so screen readers can announce them
correctly (modify the label and the password <input> element in
application/views/main/login.php).
tests/controllers/Pluginss_test.php (1)

163-163: ⚡ Quick win

Make assertions less brittle than exact inline-style HTML strings.

At Line 163 and the related assertions, matching the full style attribute over-couples tests to presentation details. Prefer matching heading/text semantics (or regex on <h1[^>]*>), so harmless style refactors don’t break these tests.

Example adjustment
- $this->_assertStringContainsString('<h1 style="color: `#000`">Blacklist Number</h1>', $output);
+ $this->assertMatchesRegularExpression('/<h1[^>]*>\s*Blacklist Number\s*<\/h1>/', $output);

- $this->assertThat($output, $this->logicalNot($this->stringContains('<h1 style="color: `#000`">'.$plugin_label.'</h1>')));
+ $this->assertThat($output, $this->logicalNot($this->stringContains('>'.$plugin_label.'</h1>')));

Also applies to: 439-439, 483-483, 519-519, 557-557, 575-575

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/controllers/Pluginss_test.php` at line 163, The assertion using
$this->_assertStringContainsString('<h1 style="color: `#000`">Blacklist
Number</h1>', $output) is brittle because it ties tests to inline styles; change
the check to assert the semantic heading/text instead (e.g., use
$this->_assertStringContainsString('Blacklist Number', $output) or use a
regex/assertMatchesRegularExpression against '<h1[^>]*>\\s*Blacklist
Number\\s*</h1>') so the test on Pluginss_test.php targets the heading content
via _assertStringContainsString or assertMatchesRegularExpression with $output
rather than the exact style attribute.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@application/views/main/base.php`:
- Around line 58-60: The call to htmlentities is missing the ENT_QUOTES flag
because the closing parenthesis is misplaced, causing ENT_QUOTES to be passed to
filter_data (which only accepts one argument); update both occurrences so
htmlentities receives ENT_QUOTES and filter_data is called with just its single
string argument—i.e., wrap the result of htmlentities(..., ENT_QUOTES) (for the
expressions using
$this->Kalkun_model->get_gammu_info('gammu_version')->row('Client') and
->get_gammu_info('db_version')->row('Version')) and pass that single value into
filter_data, preserving the strval() on the first occurrence.

In `@application/views/main/install/layout.php`:
- Line 47: Change the sidebar heading in the install layout from an h1 to an h2
to ensure each install page has a single main h1; specifically update the
element that renders "<?php echo tr('Installation steps'); ?>" in
application/views/main/install/layout.php from h1 to h2 and then adjust the CSS
selector in media/css/install.css (update "#right-container h1" to
"#right-container h2") so styling is preserved.

---

Outside diff comments:
In @.github/workflows/codeigniter.yml:
- Around line 99-107: The workflow step using the robinraju/release-downloader
action is passing an invalid releaseId ('latest') while latest is false; update
the step that references releaseId, latest, fileName (vnu.jar) and out-file-path
(utils) to either set latest: true and remove the releaseId field entirely to
fetch the latest release, or replace releaseId: 'latest' with a numeric GitHub
release ID string (e.g., '123123') if you want a specific release.

In `@application/views/main/dashboard/statistic.php`:
- Around line 93-113: The three panel titles currently use top-level headings
(<h1><?php echo tr('Folders');?>: </h1>, <h1><?php echo tr('My folders');?>:
</h1>, <h1><?php echo tr('Phonebook');?>: </h1>) which incorrectly create
multiple h1s; change these to a lower-level semantic heading (e.g., <h2> or
<h3>) so the page retains a single primary h1 and each panel has an appropriate
subheading, and optionally wrap each panel in a section element with
aria-labelledby pointing to the new heading ID for better accessibility.

In `@application/views/main/users/add_user.php`:
- Around line 9-29: The three input elements for realname, phone_number and
username still use the XHTML self-closing "/>" syntax; update the <input> tags
identified by id="realname", id="phone_number" and id="username" to use plain
HTML5 void element syntax (remove the trailing slash) so they match the password
inputs and pass the vnu HTML5 validator.

---

Nitpick comments:
In `@application/plugins/soap/views/index.php`:
- Around line 132-166: The block of commented-out HTML starting with <!--div
id="space_area"> and containing the notification plugin UI (elements like
id="addnotificationbutton", id="notification", class="simplebutton", and the
"Notification" header) should be removed or documented; either delete this
entire commented-out section to clean the view or replace the HTML comment with
a brief TODO explaining why the notification markup is preserved for future use
(e.g., "TODO: retain notification UI for feature X"), ensuring you remove the
large commented block or add the TODO comment in place of it.
- Around line 57-68: The table currently uses a hidden <tr> hack to satisfy
validation; instead update the markup for the element with class "nice-table" to
use a semantic table structure: add a <thead> containing actual <th> cells (use
descriptive text or visually-hidden labels) and move the data rows into a
<tbody>, removing the display:none hidden row; ensure each header uses <th
scope="col"> (or scope="row" where appropriate) so the existing rendering and
accessibility remain intact.
- Around line 123-126: Rename the misspelled form field name/id "notifiy" to
"notify" in the view (input name="notifiy" id="notifiy" -> name="notify"
id="notify") and update any server-side references that expect "notifiy" (e.g.,
the POST key check in the Soap controller where "notifiy" is referenced) to use
"notify"; ensure the controller's validation and any uses in methods (e.g., the
POST handling logic in Soap::whatever method that checks $_POST['notifiy']) are
updated accordingly, and optionally add a short compatibility branch that also
accepts the old "notifiy" key during the transition.

In `@application/views/main/login.php`:
- Around line 53-56: The labels for the username and password inputs are not
properly associated with their inputs; update the Username label to include
for="username" (it already has input id="username") and add an id (e.g.,
id="password") to the password input and update the Password label to
for="password" so screen readers can announce them correctly (modify the label
and the password <input> element in application/views/main/login.php).

In `@application/views/main/search.php`:
- Around line 7-23: The two text input tags still use XHTML-style self-closing
"/>"; update the input elements for search_name and search_sms (the inputs with
name="search_name" and name="search_sms", both id="search") to use the same
HTML-style closing as the submit inputs by removing the trailing slash so they
end with ">" instead of "/>".

In `@media/css/base.css`:
- Around line 556-565: The CSS block for the selector .dash_box h1 uses four
separate margin properties; replace margin-top, margin-bottom, margin-left and
margin-right with a single margin shorthand on the .dash_box h1 rule (e.g.,
margin: 1.33em 0;) to collapse those declarations and reduce verbosity while
preserving layout.

In `@tests/controllers/Pluginss_test.php`:
- Line 163: The assertion using $this->_assertStringContainsString('<h1
style="color: `#000`">Blacklist Number</h1>', $output) is brittle because it ties
tests to inline styles; change the check to assert the semantic heading/text
instead (e.g., use $this->_assertStringContainsString('Blacklist Number',
$output) or use a regex/assertMatchesRegularExpression against
'<h1[^>]*>\\s*Blacklist Number\\s*</h1>') so the test on Pluginss_test.php
targets the heading content via _assertStringContainsString or
assertMatchesRegularExpression with $output rather than the exact style
attribute.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 89de1230-4c67-46a3-a5a6-1212a5fc86d5

📥 Commits

Reviewing files that changed from the base of the PR and between 66983b3 and cf8c3d5.

📒 Files selected for processing (76)
  • .github/workflows/codeigniter.yml
  • application/plugins/blacklist_number/views/index.php
  • application/plugins/blacklist_number/views/js_blacklist_number.php
  • application/plugins/server_alert/views/index.php
  • application/plugins/server_alert/views/js_server_alert.php
  • application/plugins/sms_credit/views/index.php
  • application/plugins/sms_credit/views/js_packages.php
  • application/plugins/sms_credit/views/js_users.php
  • application/plugins/sms_credit/views/packages.php
  • application/plugins/sms_member/views/js_member.php
  • application/plugins/sms_to_email/views/index.php
  • application/plugins/sms_to_wordpress/views/index.php
  • application/plugins/sms_to_wordpress/views/js_sms_to_wordpress.php
  • application/plugins/sms_to_xmpp/views/index.php
  • application/plugins/sms_to_xmpp/views/js_sms_to_xmpp.php
  • application/plugins/soap/views/index.php
  • application/plugins/soap/views/js_remote_access.php
  • application/plugins/stop_manager/views/index.php
  • application/plugins/stop_manager/views/js_stop_manager.php
  • application/plugins/whitelist_number/views/index.php
  • application/plugins/whitelist_number/views/js_whitelist_number.php
  • application/views/errors/html/error_404.php
  • application/views/errors/html/error_db.php
  • application/views/errors/html/error_exception.php
  • application/views/errors/html/error_general.php
  • application/views/errors/html/error_php.php
  • application/views/js_init/js_dashboard.php
  • application/views/js_init/js_filters.php
  • application/views/js_init/js_keyboard.php
  • application/views/js_init/js_layout.php
  • application/views/js_init/message/js_compose.php
  • application/views/js_init/message/js_conversation.php
  • application/views/js_init/message/js_function.php
  • application/views/js_init/phonebook/js_group.php
  • application/views/js_init/phonebook/js_phonebook.php
  • application/views/js_init/users/js_add_user.php
  • application/views/js_init/users/js_users.php
  • application/views/main/base.php
  • application/views/main/dashboard/home.php
  • application/views/main/dashboard/statistic.php
  • application/views/main/forgot_password.php
  • application/views/main/header.php
  • application/views/main/install/config_setup.php
  • application/views/main/install/database_setup.php
  • application/views/main/install/layout.php
  • application/views/main/install/requirement_check.php
  • application/views/main/install/welcome.php
  • application/views/main/layout.php
  • application/views/main/login.php
  • application/views/main/messages/compose.php
  • application/views/main/messages/conversation.php
  • application/views/main/messages/index.php
  • application/views/main/messages/message_list.php
  • application/views/main/password_reset.php
  • application/views/main/phonebook/contact/add_contact.php
  • application/views/main/phonebook/contact/index.php
  • application/views/main/phonebook/contact/pbk_list.php
  • application/views/main/phonebook/group/index.php
  • application/views/main/phonebook/group/pbk_list.php
  • application/views/main/plugin/index.php
  • application/views/main/search.php
  • application/views/main/settings/appearance.php
  • application/views/main/settings/filters.php
  • application/views/main/settings/general.php
  • application/views/main/settings/password.php
  • application/views/main/settings/personal.php
  • application/views/main/settings/setting.php
  • application/views/main/users/add_user.php
  • application/views/main/users/index.php
  • application/views/main/users/users_list.php
  • media/css/base.css
  • media/css/blue.css
  • media/css/install.css
  • tests/controllers/Install_test.php
  • tests/controllers/Messages_test.php
  • tests/controllers/Pluginss_test.php

Comment thread application/views/main/base.php Outdated
Comment thread application/views/main/install/layout.php Outdated
tenzap added 2 commits May 8, 2026 14:16
Fixes this error on the requirement checks page (which doesn't have a h2)

- The heading "h3" (with computed level 3) follows the heading "h1" (with computed level 1), skipping 1 heading level.
@tenzap tenzap force-pushed the feature-250-vnuLatest branch from cf8c3d5 to 5c388ab Compare May 8, 2026 12:16
@tenzap tenzap merged commit a8e3350 into kalkun-sms:devel May 9, 2026
12 of 16 checks passed
@tenzap tenzap deleted the feature-250-vnuLatest branch May 9, 2026 10:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants