HEX
Server: Apache/2.4.46 (Win64) OpenSSL/1.1.1j PHP/8.4.25
System: Windows NT DESKTOP-4TAV2RJ 10.0 build 19045 (Windows 10) AMD64
User: fred (0)
PHP: 8.4.25
Disabled: NONE
Upload Files
File: C:/Users/fred/AppData/Roaming/Code/User/History/5ab3c2cc/yf9T.ps1
param(
    [int]$Limit = 25,
    [string]$ScanRoot = "C:\xampp\htdocs",
    [string]$OutFile = "$env:TEMP\cleanup_apply_patch.txt"
)

$files = @()
foreach ($file in Get-ChildItem $ScanRoot -Recurse -File -Include *.php,*.js,*.html,*.asp,*.aspx) {
    if ($files.Count -ge $Limit) {
        break
    }

    try {
        $content = [System.IO.File]::ReadAllText($file.FullName)
    }
    catch {
        continue
    }

    if ($content -match 'ushort\.observer') {
        $files += $file.FullName
    }
}

$builder = New-Object System.Text.StringBuilder
[void]$builder.AppendLine('*** Begin Patch')

foreach ($path in $files) {
    $lines = [System.IO.File]::ReadAllLines($path)
    $hitIndexes = @()
    for ($i = 0; $i -lt $lines.Length; $i++) {
        if ($lines[$i] -match 'ushort\.observer') {
            $hitIndexes += $i
        }
    }

    if ($hitIndexes.Count -eq 0) {
        continue
    }

    $removeStart = $hitIndexes[0]
    $removeEnd = $hitIndexes[$hitIndexes.Count - 1]

    $scriptStart = $removeStart
    while ($scriptStart -gt 0 -and $lines[$scriptStart].Trim() -ne '<script>') {
        $scriptStart--
    }
    $scriptEnd = $removeEnd
    while ($scriptEnd -lt ($lines.Length - 1) -and $lines[$scriptEnd].Trim() -ne '</script>') {
        $scriptEnd++
    }

    if ($lines[$scriptStart].Trim() -eq '<script>' -and $lines[$scriptEnd].Trim() -eq '</script>') {
        $removeStart = $scriptStart
        $removeEnd = $scriptEnd
    }

    $contextStart = [Math]::Max(0, $removeStart - 3)
    $contextEnd = [Math]::Min($lines.Length - 1, $removeEnd + 3)

    [void]$builder.AppendLine("*** Update File: $path")
    for ($i = $contextStart; $i -lt $removeStart; $i++) {
        [void]$builder.AppendLine($lines[$i])
    }
    for ($i = $removeStart; $i -le $removeEnd; $i++) {
        [void]$builder.AppendLine('-' + $lines[$i])
    }
    for ($i = $removeEnd + 1; $i -le $contextEnd; $i++) {
        [void]$builder.AppendLine($lines[$i])
    }
}

[void]$builder.AppendLine('*** End Patch')
[System.IO.File]::WriteAllText($OutFile, $builder.ToString(), [System.Text.Encoding]::UTF8)
Write-Host $OutFile
Write-Host ("FILES=" + $files.Count)