static function create(Conf $conf, $reg, $send = false) { global $Me, $Now; if (is_array($reg)) { $reg = (object) $reg; } assert(is_string($reg->email)); $email = trim($reg->email); assert($email !== ""); // look up account first if ($acct = $conf->user_by_email($email)) { return $acct; } // validate email, check contactdb if (!get($reg, "no_validate_email") && !validate_email($email)) { return null; } $cdbu = Contact::contactdb_find_by_email($email); if (get($reg, "only_if_contactdb") && !$cdbu) { return null; } $cj = (object) array(); foreach (array("firstName", "lastName", "email", "affiliation", "collaborators", "preferredEmail") as $k) { if ($v = $cdbu && $cdbu->{$k} ? $cdbu->{$k} : get($reg, $k)) { $cj->{$k} = $v; } } if ($v = $cdbu && $cdbu->voicePhoneNumber ? $cdbu->voicePhoneNumber : get($reg, "voicePhoneNumber")) { $cj->phone = $v; } if ($cdbu && $cdbu->disabled || get($reg, "disabled")) { $cj->disabled = true; } $acct = new Contact(); if ($acct->save_json($cj, null, $send)) { if ($Me && $Me->privChair) { $type = $acct->disabled ? "disabled " : ""; $conf->infoMsg("Created {$type}account for <a href=\"" . hoturl("profile", "u=" . urlencode($acct->email)) . "\">" . Text::user_html_nolink($acct) . "</a>."); } return $acct; } else { $conf->log("Account {$email} creation failure", $Me); return null; } }