$value) { if (property_exists(get_called_class(), $field)) { $this->$field = $value; } } } public static function importDomainContacts($domainContacts): array { $db = FronkDB::singleton(); $db->query("TRUNCATE TABLE `DomainContact`"); $sql = /** @lang text */ "INSERT INTO `DomainContact` (`inwxRoId`, `type`, `name`, `street`, `city`, `pc`, `cc`, `voice`, `email`, `protection`, `verificationStatus`, `usedCount`) VALUES "; $values = []; foreach ($domainContacts as $domainContact) { $valueStr = "(" . $domainContact['roId'] . ", '" . $domainContact['type'] . "', '" . $domainContact['name'] . "', '" . $domainContact['street'] . "', '" . $domainContact['city'] . "', '" . $domainContact['pc'] . "', '" . $domainContact['cc'] . "', '" . $domainContact['voice'] . "', '" . $domainContact['email'] . "', " . ($domainContact['protection'] ? 1 : 0) . ", '" . $domainContact['verificationStatus'] . "', "; $valueStr .= $domainContact['usedCount'] ?? "NULL"; $valueStr .= ")"; $values[] = $valueStr; } $sql .= implode(", ", $values); $db->query($sql); return [ "message" => "Imported " . count($domainContacts) . " domain contacts." ]; } /** * Generate SQL Filter condition (space separated) for a given column. * * @param string|null $filterValue The filter value to match against. * @param string $columnName The name of the column in the database table. * @return string The SQL condition generated based on the filter value and column name. */ public static function generateFilterCondition(?string $filterValue, string $columnName): string { $sql = ""; if (!empty($filterValue)) { $filterItems = explode(" ", $filterValue); foreach ($filterItems as $item) { $sql .= " AND `$columnName` LIKE '%" . $item . "%'"; } } return $sql; } public static function getSqlFilter($filters): string { $sql = isset($filters['roId']) ? " AND `inwxRoId` = " . $filters['roId'] : ""; $sql .= isset($filters['type']) ? " AND `type` = '" . $filters['type'] . "'" : ""; $sql .= isset($filters['name']) ? self::generateFilterCondition($filters['name'], "name") : ""; $sql .= isset($filters['street']) ? self::generateFilterCondition($filters['street'], "street") : ""; $sql .= isset($filters['city']) ? self::generateFilterCondition($filters['city'], "city") : ""; $sql .= isset($filters['pc']) ? " AND `pc` = " . $filters['pc'] : ""; $sql .= isset($filters['cc']) ? " AND `cc` = " . $filters['cc'] : ""; $sql .= isset($filters['voice']) ? " AND `voice` = " . $filters['voice'] : ""; $sql .= isset($filters['email']) ? self::generateFilterCondition($filters['email'], "email") : ""; $sql .= isset($filters['protection']) ? " AND `protection` = " . $filters['protection'] : ""; $sql .= isset($filters['usedCount']) ? " AND `usedCount` = " . $filters['usedCount'] : ""; $sql .= isset($filters['verificationStatus']) ? " AND `verificationStatus` = '" . $filters['verificationStatus'] . "'" : ""; return $sql; } public static function getAllDomainContacts($filters = null, $limit = null, $offset = 0, $raw_array = true): array { $db = FronkDB::singleton(); $sql = "SELECT * FROM `DomainContact` WHERE 1 "; $sql .= $filters === null ? "" : self::getSqlFilter($filters); $sql .= $limit === null ? "" : " LIMIT " . $limit . " OFFSET " . $offset; $result = $db->query($sql); $rows = []; while ($row = $result->fetch_assoc()) { $rows[] = $raw_array ? $row : new DomainContactModel($row); } return $rows; } public static function countDomainContacts($filters) { $db = FronkDB::singleton(); $sql = "SELECT COUNT(*) as `total_rows` FROM `DomainContact` WHERE 1 " . self::getSqlFilter($filters); $result = $db->query($sql); return $result->fetch_assoc()['total_rows']; } }