0, '911' => 0, 'OUT' => 0, 'INVALID' => 0, 'INVALID_911' => 0, 'MAX' => 0, ]; // Logging function function logMessage($msg) { global $logFile; $line = date('Y-m-d H:i:s') . " " . $msg . "\n"; file_put_contents($logFile, $line, FILE_APPEND); echo $line; } // Normalize CID function function normalizeCid($cid) { if (!$cid) return false; $cleanCid = preg_replace('/\D/', '', $cid); // remove all non-digit characters if (strlen($cleanCid) == 11 && $cleanCid[0] == '1') { $cleanCid = substr($cleanCid, 1); // remove leading 1 } if (preg_match('/^[2-9][0-9]{2}[2-9][0-9]{6}$/', $cleanCid)) { return $cleanCid; } return false; } // Process PHONE section $section = 'phone'; $infos = $telephony->getExtensions($section); $total = count($infos); $i = 0; foreach ($infos as $id => $info) { $i++; $changed = false; $extId = $info['ext_id'] ?? $id; $extNum = $info['phone_extension'] ?? ''; // ------------------------------- // 1️⃣ Handle EXT callerid // ------------------------------- $useExternal = $info['phone_cid_external'] ?? true; // true = hidden, false = visible $cidExternal = $info['phone_cid_external_number'] ?? ''; if ($useExternal) { // EXT callerid hidden -> force enable if phone_extension is valid if (normalizeCid($extNum)) { $info['phone_cid_external'] = false; $info['phone_cid_external_number'] = normalizeCid($extNum); logMessage("[EXT] ext_id $extId: activated EXT callerid -> " . $info['phone_cid_external_number']); $counters['EXT']++; $changed = true; } } else { // EXT visible, normalize existing number if needed if ($cidExternal) { $ncid = normalizeCid($cidExternal); if ($ncid && $ncid != $cidExternal) { $info['phone_cid_external_number'] = $ncid; logMessage("[EXT_NORMALIZED] ext_id $extId: $cidExternal -> $ncid"); $counters['EXT']++; $changed = true; } } elseif (normalizeCid($extNum)) { // no number yet, use extension $info['phone_cid_external_number'] = normalizeCid($extNum); logMessage("[EXT] ext_id $extId: set EXT callerid -> " . $info['phone_cid_external_number']); $counters['EXT']++; $changed = true; } } // ------------------------------- // 2️⃣ Handle 911 callerid // ------------------------------- $cid911 = $info['phone_cid_emergency_number'] ?? ''; $useExternal = $info['phone_cid_external'] === false; $cidExternal = $info['phone_cid_external_number'] ?? ''; if (!$cid911 || !normalizeCid($cid911)) { // Use EXT callerid if enabled and valid if ($useExternal && normalizeCid($cidExternal)) { $new911 = normalizeCid($cidExternal); $info['phone_cid_emergency_number'] = $new911; $info['phone_cid_emergency'] = true; logMessage("[911] ext_id $extId: external -> $new911"); $counters['911']++; $changed = true; } // Otherwise, use phone_extension if valid elseif (normalizeCid($extNum)) { $new911 = normalizeCid($extNum); $info['phone_cid_emergency_number'] = $new911; $info['phone_cid_emergency'] = true; logMessage("[911] ext_id $extId: extension -> $new911"); $counters['911']++; $changed = true; } else { // Invalid logMessage("[INVALID_911] ext_id $extId: $extNum"); $info['invalid_911'] = $extNum; $counters['INVALID_911']++; } } else { // Existing 911 valid but may need normalization $ncid = normalizeCid($cid911); if ($ncid && $ncid != $cid911) { $info['phone_cid_emergency_number'] = $ncid; logMessage("[911] ext_id $extId: existing number normalized -> $ncid"); $counters['911']++; $changed = true; } } if ($changed) { $telephony->saveExtension($info); logMessage("[DEBUG_SAVE] ext_id $extId: saved changes"); } printf("Processing PHONE %d/%d [ext_id: %s]... %.1f%%\n", $i, $total, $extId, $i / $total * 100); } // ------------------------------- // 3️⃣ Handle LINE_OUT section (unchanged) // ------------------------------- $section = 'line_out'; $infos = $telephony->getExtensions($section); $total = count($infos); $i = 0; $vars = ['callerid_num','callerid_invalid_num','cid_blacklist_dest_cid']; foreach ($infos as $id => $info) { $i++; $changed = false; $extId = $info['ext_id'] ?? $id; // Force MAX and MIN to 9 foreach (['line_out_callerid_invalid_max','line_out_callerid_invalid_min'] as $field) { if (($info[$field] ?? 0) != 9) { $info[$field] = 9; logMessage("CHANGE $field TO 9 for ext_id $extId"); $counters['MAX']++; $changed = true; } } foreach ($vars as $var) { $field = 'line_out_' . $var; $cid = $info[$field] ?? false; $ncid = normalizeCid($cid); if ($ncid && $cid != $ncid) { $info[$field] = $ncid; $changed = true; logMessage("[OUT] ext_id $extId: $cid -> $ncid"); $counters['OUT']++; } } if ($changed) { $telephony->saveExtension($info); } printf("Processing LINE_OUT %d/%d [ext_id: %s]... %.1f%%\n", $i, $total, $extId, $i / $total * 100); } // ------------------------------- // 4️⃣ Summary // ------------------------------- logMessage("=== Résumé ==="); logMessage("EXT fixés : " . $counters['EXT']); logMessage("911 fixés : " . $counters['911']); logMessage("OUT fixés : " . $counters['OUT']); logMessage("MAX/MIN corr : " . $counters['MAX']); logMessage("INVALID : " . $counters['INVALID']); logMessage("INVALID 911 : " . $counters['INVALID_911']); // Set log ownership setLogOwner($logFile);