feat: add RichTextEditor component for rich text editing in articles

feat: create SanitizeBlogBodiesCommand to clean existing blog bodies according to current HTML sanitization policies

test: add AppointmentTreatmentSessionLinkTest to ensure appointment booking functionality works correctly with treatment session links
This commit is contained in:
hamed
2026-08-08 11:40:17 +03:30
parent 934405c42d
commit 47323daa27
36 changed files with 3461 additions and 12686 deletions
@@ -10,7 +10,6 @@ use App\Insurance\Entity\TenantServiceCoverage;
use App\Insurance\Enum\ServiceCategory;
use App\Clinic\Security\ClinicDoctorAccessChecker;
use App\Secretary\Security\SecretaryAccessChecker;
use Doctrine\ORM\EntityManagerInterface;
use App\ClinicService\Repository\CatalogCategoryRepository;
use App\ClinicService\Repository\ServiceItemAuditLogRepository;
use App\ClinicService\Repository\ServiceItemRepository;
@@ -46,7 +45,6 @@ class ClinicServiceController extends BaseController
private readonly InventoryItemRepository $inventoryItemRepo,
private readonly ServiceItemAuditService $auditService,
private readonly ServiceItemAuditLogRepository $auditLogRepo,
private readonly EntityManagerInterface $em,
private readonly EntityContextResolver $contextResolver,
private readonly RequestStack $requestStack,
private readonly SecretaryAccessChecker $secretaryAccess,
+8
View File
@@ -147,6 +147,10 @@ class ServiceItem
public function getConsumables(): Collection
{
// Doctrine بدون constructor هیدریت می‌کند؛ از property تایپ‌شده محافظت کن.
// phpstan فقط constructor را می‌بیند و می‌گوید این property همیشه مقدار
// دارد. Doctrine اما بدون constructor هیدریت می‌کند، پس روی نمونهٔ
// نیمه‌ساخته می‌تواند initialize نشده باشد. گارد عمدی است.
/** @phpstan-ignore-next-line */
return $this->consumables ??= new ArrayCollection();
}
@@ -209,6 +213,10 @@ class ServiceItem
public function getStaffMembers(): Collection
{
// Doctrine hydrates without the constructor; guard the typed property.
// phpstan فقط constructor را می‌بیند و می‌گوید این property همیشه مقدار
// دارد. Doctrine اما بدون constructor هیدریت می‌کند، پس روی نمونهٔ
// نیمه‌ساخته می‌تواند initialize نشده باشد. گارد عمدی است.
/** @phpstan-ignore-next-line */
return $this->staffMembers ??= new ArrayCollection();
}