예제 #1
0
 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;
     }
 }