/** * Performs an user registration * * @global object $billing * @param array $user_data * @param bool $goprofile */ function zb_UserRegister($user_data, $goprofile = true) { global $billing; // Init all of needed user data $login = vf($user_data['login']); $login = zb_RegLoginFilter($login); $password = vf($user_data['password']); $ip = $user_data['IP']; $cityid = $user_data['city']; $streetid = $user_data['street']; $buildid = $user_data['build']; @($entrance = $user_data['entrance']); @($floor = $user_data['floor']); $apt = $user_data['apt']; $serviceid = $user_data['service']; $netid = multinet_get_service_networkid($serviceid); $busylogins = zb_AllBusyLogins(); //check login lenght $maxStLen = 42; $loginLen = strlen($login); if ($loginLen > $maxStLen) { log_register("HUGELOGIN REGISTER TRY (" . $login . ")"); $alert = __('Attention generated login longer than') . ' ' . $maxStLen . ' ' . __('bytes') . '. (' . $login . ' > ' . $loginLen . ') ' . __('And is not compatible with Stargazer') . '.'; die($alert); } // empty login validation if (empty($login)) { $alert = wf_tag('script', false, '', 'type="text/javascript"'); $alert .= 'alert("' . __('Error') . ': ' . __('Empty login') . '");'; $alert .= wf_tag('script', true); print $alert; rcms_redirect("?module=userreg"); die; } //duplicate login validation if (isset($busylogins[$login])) { $alert = wf_tag('script', false, '', 'type="text/javascript"'); $alert .= 'alert("' . __('Error') . ': ' . __('Duplicate login') . '");'; $alert .= wf_tag('script', true); print $alert; rcms_redirect("?module=userreg"); die; } //last check if (!zb_ip_unique($ip)) { $alert = wf_tag('script', false, '', 'type="text/javascript"'); $alert .= 'alert("' . __('Error') . ': ' . __('This IP is already used by another user') . '");'; $alert .= wf_tag('script', true); print $alert; rcms_redirect("?module=userreg"); die; } // registration subroutine $billing->createuser($login); log_register("StgUser REGISTER (" . $login . ")"); $billing->setpassword($login, $password); log_register("StgUser (" . $login . ") PASSWORD `" . $password . "`"); $billing->setip($login, $ip); log_register("StgUser (" . $login . ") IP `" . $ip . "`"); zb_AddressCreateApartment($buildid, $entrance, $floor, $apt); zb_AddressCreateAddress($login, zb_AddressGetLastid()); multinet_add_host($netid, $ip); zb_UserCreateRealName($login, ''); zb_UserCreatePhone($login, '', ''); zb_UserCreateContract($login, ''); zb_UserCreateEmail($login, ''); zb_UserCreateSpeedOverride($login, 0); zb_UserRegisterLog($login); // if random mac needed $billingconf = rcms_parse_ini_file(CONFIG_PATH . '/billing.ini'); $alterconf = rcms_parse_ini_file(CONFIG_PATH . "alter.ini"); if ($billingconf['REGRANDOM_MAC']) { // funny random mac, yeah? :) $mac = '14:' . '88' . ':' . rand(10, 99) . ':' . rand(10, 99) . ':' . rand(10, 99) . ':' . rand(10, 99); multinet_change_mac($ip, $mac); multinet_rebuild_all_handlers(); } // if AlwaysOnline to new user needed if ($billingconf['REGALWONLINE']) { $alwaysonline = 1; $billing->setao($login, $alwaysonline); log_register('CHANGE AlwaysOnline (' . $login . ') ON ' . $alwaysonline); } // if we want to disable detailed stats to new user by default if ($billingconf['REGDISABLEDSTAT']) { $dstat = 1; $billing->setdstat($login, $dstat); log_register('CHANGE dstat (' . $login . ') ON ' . $dstat); } //set contract same as login for this user if (isset($alterconf['CONTRACT_SAME_AS_LOGIN'])) { if ($alterconf['CONTRACT_SAME_AS_LOGIN']) { $newUserContract = $login; zb_UserChangeContract($login, $newUserContract); } } //cemetery processing if (isset($alterconf['CEMETERY_ENABLED'])) { if ($alterconf['CEMETERY_ENABLED']) { if ($alterconf['CEMETERY_ENABLED'] == 2) { $cemetery = new Cemetery(false); $cemetery->setDead($login); } } } //contract autogeneration if (isset($alterconf['CONTRACT_AUTOGEN'])) { if ($alterconf['CONTRACT_AUTOGEN']) { $contract_proposal = ''; $allcontracts = zb_UserGetAllContracts(); $top_offset = 100000; //contract generation mode default if ($alterconf['CONTRACT_GENERATION_DEFAULT']) { for ($i = 1; $i < $top_offset; $i++) { if (!isset($allcontracts[$i])) { $contract_proposal = $i; break; } } } else { //alternate generation method $max_contract = max(array_keys($allcontracts)); $contract_proposal = $max_contract + 1; } //setting generated contract to new user if (!isset($allcontracts[$contract_proposal])) { $contractDate = date("Y-m-d"); zb_UserChangeContract($login, $contract_proposal); zb_UserContractDateCreate($contract_proposal, $contractDate); } } } /////////////////////////////////// if ($goprofile) { rcms_redirect("?module=userprofile&username=" . $login); } }
/** * Performs user changing IP subroutine * * @global object $billing * @param int $serviceId * @param string $newIp * * @return void/string */ public function changeUserIp($serviceId, $newIp) { global $billing; $result = ''; $serviceId = vf($serviceId, 3); $networkId = multinet_get_service_networkid($serviceId); if (isset($this->allServices[$serviceId])) { if (zb_ip_unique($newIp)) { if (!empty($this->currentIp)) { if ($this->isNethostExists()) { //force user disconnect if ($this->billingCfg['RESET_AO']) { $billing->setao($this->login, 0); } else { $billing->setdown($this->login, 1); } $billing->setip($this->login, $newIp); multinet_delete_host($this->currentIp); multinet_add_host($networkId, $newIp, $this->currentMac); log_register("CHANGE MultiNetIP (" . $this->login . ") FROM " . $this->currentIp . " ON " . $newIp . ""); multinet_rebuild_all_handlers(); multinet_RestartDhcp(); //back teh user online if ($this->billingCfg['RESET_AO']) { $billing->setao($this->login, 1); } else { $billing->setdown($this->login, 0); } } else { log_register("CHANGE FAIL MultiNetIP (" . $this->login . ") FROM " . $this->currentIp . " ON " . $newIp . " NO_NETHOST"); $result = __('No existing nethost for current IP'); } } else { log_register("CHANGE FAIL MultiNetIP (" . $this->login . ") FROM " . $this->currentIp . " ON " . $newIp . " EMPTY_IP"); $result = __('Something went wrong') . ': ' . __('empty current IP'); } } else { log_register("CHANGE FAIL MultiNetIP (" . $this->login . ") FROM " . $this->currentIp . " ON " . $newIp . " IP_DUPLICATE"); $result = __('This IP is already used by another user'); } } else { log_register("CHANGE FAIL MultiNetIP (" . $this->login . ") FROM " . $this->currentIp . " ON " . $newIp . " NO_SERVICE"); $result = __('Unexistent service'); } return $result; }