diff --git a/gen_pc_sidecar.php b/gen_pc_sidecar.php index dbb00aa..ceb6c9a 100755 --- a/gen_pc_sidecar.php +++ b/gen_pc_sidecar.php @@ -1,17 +1,5 @@ #!/usr/bin/php -q (speed-dial) so contacts do NOT auto-populate line keys. - * - Optional --notify will send PJSIP check-sync to all numeric endpoints. - */ $bootstrap_settings['freepbx_auth'] = false; require_once('/etc/freepbx.conf'); @@ -51,7 +39,6 @@ function pull_db(): array { $db = FreePBX::Database(); $pbdb = []; - /** Try Core 'users' table first (name + extension) */ try { $stmt = $db->prepare(" SELECT name, extension @@ -62,37 +49,6 @@ function pull_db(): array { $stmt->execute(); $pbdb = $stmt->fetchAll(PDO::FETCH_ASSOC); } catch (Exception $e) { - // ignore, fall back below - } - - /** Fall back to PJSIP ps_endpoints (id is ext; parse callerid "Name <1001>") */ - if (!$pbdb) { - $stmt = $db->prepare(" - SELECT id AS extension, callerid - FROM ps_endpoints - ORDER BY CAST(id AS UNSIGNED) - "); - $stmt->execute(); - $tmp = $stmt->fetchAll(PDO::FETCH_ASSOC); - foreach ($tmp as $r) { - $ext = trim((string)$r['extension']); - if (!preg_match('/^[0-9]+$/', $ext)) continue; // only numeric extensions - $cid = trim((string)($r['callerid'] ?? '')); - // Try to parse descriptive name from callerid - $name = 'Ext ' . $ext; - if ($cid !== '') { - // Common formats: "John Smith" <1001> OR John Smith <1001> - if (preg_match('/^\"?([^\"<]+)\"?\s*<\s*' . preg_quote($ext, '/') . '\s*>$/', $cid, $m)) { - $name = trim($m[1]); - } else { - // If callerid is just a name without angle brackets, use it - if (strpos($cid, '<') === false) { - $name = $cid; - } - } - } - $pbdb[] = ['name' => $name, 'extension' => $ext]; - } } if (!$pbdb) { @@ -158,20 +114,18 @@ function pull_xml_file($file): DOMDocument { throw new RuntimeException("Unable to read file: {$file}"); } - // Strip UTF-8 BOM and leading whitespace $xmlString = preg_replace('/^\xEF\xBB\xBF/', '', $xmlString); // BOM $xmlString = ltrim($xmlString); - // If there are any stray bytes before the first '<', trim them $firstAngle = strpos($xmlString, '<'); if ($firstAngle !== false && $firstAngle > 0) { $xmlString = substr($xmlString, $firstAngle); } $xml = new DOMDocument('1.0', 'UTF-8'); - $xml->preserveWhiteSpace = true; // pretty-print + $xml->preserveWhiteSpace = true; $xml->formatOutput = true; - $xml->xmlStandalone = true; // keep standalone="yes" + $xml->xmlStandalone = true; if (!$xml->loadXML($xmlString)) { $errs = libxml_get_errors(); @@ -192,10 +146,8 @@ function remove_attendants($xml): DOMElement { if ($attendantNodes->length === 0) { throw new RuntimeException("No element found at /polycomConfig/attendant"); } - /** @var DOMElement $attendant */ $attendant = $attendantNodes->item(0); - // 1) Remove all existing attendant.resourceList.* attributes $toRemove = []; foreach ($attendant->attributes as $attr) { if (strpos($attr->nodeName, 'attendant.resourceList.') === 0) {