isVariant( 'workstation_impersonate_link_in_oa', 'enabled', $userContext ); $canImpersonate = $isWorkstationImpersonateLinkInOaFFEnabled && userCanImpersonate(); # encrypt the session id $auth0Config = yaml_parse_file(APPLICATION_PATH . '/configs/auth0.yml'); $encryptionHelper = new EncryptionManager(); $sid = $encryptionHelper->encryptWithCustomKey($session_id, $auth0Config['client_id']); $isEnabledLambaSyncTearDown = $featuresService->isVariant( 'lambda_kinesis_to_neo4j_sync_tear_down', 'enabled', $userContext); $url = formatURLQueryString('sort_by,sort_desc,page,pageRecord', array($_REQUEST)); switch ($sort_by) { case 'name': $order_by = 'name'; break; case 'login': $order_by = 'login'; break; case 'contact_phone': $order_by = 'c.contact_phone'; break; case 'active': $order_by = 'active'; break; case 'ctype': $order_by = 'vc.master'; break; case 'ctitle': $order_by = 'c.contact_title'; break; case 'email': $order_by = 'c.contact_email'; break; case 'city': $order_by = 'c.address_city'; break; case 'state': $order_by = 'state'; break; case 'zip': $order_by = 'c.address_zip'; break; case 'cntry': $order_by = 'country'; break; default: $order_by = 'vc.master, vc.active, name'; } //removed unneccassary join with subaccount table $master = check_user_permission(365) ? ' AND vc.master = \'Y\' ' : ' '; $sql = 'SELECT distinct c.contact_id, c.contact_first_name, c.contact_last_name, CONCAT_WS(" ", c.contact_first_name, c.contact_last_name) AS name, c.contact_title, c.contact_email, c.address_city, c.address_zip, vc.master, cn.name AS country, s.name AS state, c.alt_email, c.contact_phone, c.address_street, c.address2, v.status, vc.login, vc.passwords, vc.id, vc.active, vc.auth0_user_id, c.requested_login_email FROM vend_contact vc INNER JOIN contact c ON vc.contact_id = c.contact_id INNER JOIN vendor v ON v.vendor_id = vc.vendor_id LEFT OUTER JOIN country cn ON c.orchard_country = cn.id LEFT OUTER JOIN orchard_state s ON c.address_state = s.id WHERE vc.vendor_id = ? AND vc.subaccount_id IS NULL'. $master . 'ORDER BY ' . $order_by . ($sort_desc ? ' DESC' : ''); $data_params = new QueryData(); $data_params->addDataParam('i', $vendor_id); $contacts_data = $wrapperObj->executeQuery($sql, $data_params); if ($contacts_data === false) { showierror($sql); } ?>

Label Contacts

getAuth0EmailsPaginated($auth0_ids_chunk)); } $auth0_emails = array_combine(array_column($auth0_users, 'user_id'), array_column($auth0_users, 'email')); } // Three disable classes drive the tooltip: // A = auth0_user_id NULL -> 'no active login' // B = identity-by-auth0 404 -> OSP-1409 stale // C = wildcard Vendor (id='*') -> all-labels, no single-vendor session $canCreateImpersonatedAuth0User = []; $contactDisableClass = []; $isQaImpersonationEnv = defined('APPLICATION_ENV') && APPLICATION_ENV !== 'production'; if ($isQaImpersonationEnv && !empty($contacts_data)) { $auth0IdsForResolve = []; $vcIdByAuth0Id = []; foreach ($contacts_data as $row) { if (!empty($row['auth0_user_id'])) { $auth0IdsForResolve[] = (string)$row['auth0_user_id']; $vcIdByAuth0Id[(string)$row['auth0_user_id']] = (int)$row['id']; } } if (!empty($auth0IdsForResolve)) { try { $resolvedMap = $owsUsers->getIdentitiesByAuth0UserIds($auth0IdsForResolve); $vendorPairs = []; foreach ($resolvedMap as $auth0UserId => $identity) { if (empty($identity) || empty($identity['id']) || empty($vcIdByAuth0Id[$auth0UserId])) { $canCreateImpersonatedAuth0User[(string)$auth0UserId] = false; $contactDisableClass[(string)$auth0UserId] = 'B'; continue; } $vendorPairs[(string)$auth0UserId] = [(string)$identity['id'], $vcIdByAuth0Id[$auth0UserId]]; } if (!empty($vendorPairs)) { $vendorMap = $owsUsers->getVendorsForIdentityVcPairs(array_values($vendorPairs)); foreach ($vendorPairs as $auth0UserId => $pair) { $vcIdInt = (int)$pair[1]; if (!array_key_exists($vcIdInt, $vendorMap)) { continue; // fail-open on transient ows-users error } $vendor = $vendorMap[$vcIdInt]; $vendorIdField = is_array($vendor) ? (isset($vendor['id']) ? $vendor['id'] : null) : null; $isResolvable = !empty($vendor) && is_numeric($vendorIdField); $canCreateImpersonatedAuth0User[(string)$auth0UserId] = $isResolvable; if (!$isResolvable) { $contactDisableClass[(string)$auth0UserId] = 'C'; } } } } catch (\Exception $e) { $logger->warning('panelLabelContacts impersonation gate check failed: ' . $e->getMessage()); } } } foreach ($contacts_data as $contact_row) { $row_class = (++$rci & 1) ? '' : 'alt'; $auth0_user_id = $contact_row['auth0_user_id']; $loginDetails = (!empty($auth0_emails['auth0|' . $auth0_user_id])) ? $auth0_emails['auth0|' . $auth0_user_id] : $contact_row['login']; $address = ($contact_row['address_street']) ? $contact_row['address_street'] . ', ' : ''; $address .= ($contact_row['address2']) ? $contact_row['address2'] . ', ' : ''; $address .= ($contact_row['address_city']) ? $contact_row['address_city'] . ', ' : ''; $address .= ($contact_row['state']) ? $contact_row['state'] . ', ' : ''; $address .= ($contact_row['address_zip']) ? $contact_row['address_zip'] : ''; ?> " />
Select / Deselect all Address
".$contact_row['name'].""))?> &vend_contact_id=" target="_blank">Login check guide'; $rowTooltipMsg = $rowDisableClass === 'B' ? "Impersonation unavailable, user deactivated — {$_guideLink}" : ($rowDisableClass === 'C' ? "Impersonation unavailable, wildcard vendor — {$_guideLink}" : "Impersonation unavailable, no active login — {$_guideLink}"); if (!empty($contact_row['auth0_user_id']) && !$isContactIdentityUnresolvable) { ?> Impersonate Impersonate&vend_contact_id=" target="_blank"> ".$contact_row['contact_title'].""))?> ".($contact_row['master'] == 'Y' ? 'Yes' : 'No').""))?>
Alt.
Alt.
".$contact_row['contact_phone'].""))?> " . $address . ""))?> ".$contact_row['country'].""))?> Edit     Remove