- 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
3.0 KiB
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()andnl2br()for safe output
3. Updated rendering methods
buildNarrativeSection(): Changednl2br(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
- Open discharge form:
/Ipd_discharge/ipd_select/1007170 - Verify HTML editor content is saved correctly
- Preview discharge PDF
- Check that formatted content (bold, lists, paragraphs) appears correctly
- 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