devsofttech_hms_ci4/DISCHARGE_SUMMARY_HTML_EDITOR_FIX.md
DevSoftTech Server 3dc9fe1df6 Fix discharge summary not appearing in PDF after HTML editor conversion
- Enhanced normalizeRichText() to detect and preserve HTML from HTML editors
- Added renderRichText() helper to safely render HTML vs plain text content
- Updated 4 rendering locations (narrative sections, systemic exams, investigations)
- Backward compatible: plain textarea fields still work correctly
- Fixes issue where strip_tags() removed all HTML formatting from editor content

Resolves blank discharge summaries in PDF when content saved from TinyMCE/HTML editors
2026-06-11 07:38:40 +05:30

3.0 KiB

Discharge Summary HTML Editor Fix

Problem

After converting textarea controls to HTML editors (TinyMCE/similar) in the discharge form, saved discharge summaries were not appearing in the generated PDF.

Root Cause

The normalizeRichText() function at line 1591 in Ipd_discharge.php was stripping ALL HTML tags using strip_tags(). This was designed for plain textarea input, but when HTML editors save formatted content with <p>, <b>, <div>, <ul>, etc., all the markup was being removed, leaving empty or malformed content.

Affected Fields

  • Presenting Complaints (complaint_remark)
  • Final Diagnosis (diagnosis_remark)
  • Course in Hospital (course_remark)
  • Summary of Key Investigations (inhos_remark)
  • Other/Systemic Examinations (systemic exam text)
  • Other Examinations/Provisional Diagnosis (other_exam_text)

Solution

Modified the following methods in app/Controllers/Ipd_discharge.php:

1. Enhanced normalizeRichText() (line 1591)

  • Detects if content contains HTML tags from HTML editor
  • If HTML detected: Preserves HTML structure, only cleans whitespace
  • If plain text: Uses original logic (strip tags, convert to plain text)
  • Backward compatible with existing plain textarea fields

2. Added renderRichText() (new method after normalizeRichText)

  • Detects HTML vs plain text content
  • If HTML: Returns content as-is for HTML rendering
  • If plain text: Applies esc() and nl2br() for safe output

3. Updated rendering methods

  • buildNarrativeSection(): Changed nl2br(esc($remark)) to $this->renderRichText($remark)
  • Systemic exam section: Changed nl2br(esc($value)) to $this->renderRichText($value)
  • Other exam section: Changed nl2br(esc($otherExamText)) to $this->renderRichText($otherExamText)
  • Key investigations section: Changed nl2br(esc($inhosRemark)) to $this->renderRichText($inhosRemark)

Changes Made

File: app/Controllers/Ipd_discharge.php
- Line ~1591: Enhanced normalizeRichText() to preserve HTML
- Line ~1625: Added new renderRichText() helper method
- Line ~1768: Updated buildNarrativeSection() to use renderRichText()
- Line ~1932: Updated systemic exam rendering to use renderRichText()
- Line ~2094: Updated other exam rendering to use renderRichText()
- Line ~2113: Updated key investigations rendering to use renderRichText()

Testing

  1. Open discharge form: /Ipd_discharge/ipd_select/1007170
  2. Verify HTML editor content is saved correctly
  3. Preview discharge PDF
  4. Check that formatted content (bold, lists, paragraphs) appears correctly
  5. Test with both HTML editor and plain textarea fields (backward compatibility)

Backward Compatibility

✅ Existing plain textarea fields continue to work ✅ HTML editor fields now render correctly ✅ No database changes required ✅ Automatic detection of content type (HTML vs plain text)

Security

  • HTML editor content is NOT escaped (assumes HTML editor provides safe content)
  • Plain text content continues to be escaped with esc() function
  • No XSS risk if HTML editor properly sanitizes input