public function update_ipblacklist() { $db = Loader::db(); if ($this->token->validate("update_ipblacklist")) { Loader::model('user_banned_ip'); //configs from top part form $ip_ban_lock_ip_enable = 1 == $this->post('ip_ban_lock_ip_enable') ? 1 : 0; Config::save('IP_BAN_LOCK_IP_ENABLE', $ip_ban_lock_ip_enable); Config::save('IP_BAN_LOCK_IP_ATTEMPTS', $this->post('ip_ban_lock_ip_attempts')); Config::Save('IP_BAN_LOCK_IP_TIME', $this->post('ip_ban_lock_ip_time')); if (self::IP_BAN_LOCK_IP_HOW_LONG_TYPE_FOREVER != $this->post('ip_ban_lock_ip_how_long_type')) { Config::Save('IP_BAN_LOCK_IP_HOW_LONG_MIN', $this->post('ip_ban_lock_ip_how_long_min')); } else { Config::Save('IP_BAN_LOCK_IP_HOW_LONG_MIN', 0); } //ip table actions //use a single sql query, more efficient than active record $ip_ban_changes = $this->post('ip_ban_changes'); if (count($ip_ban_changes) > 0) { $ip_ban_change_to = $this->post('ip_ban_change_to'); $q = 'UPDATE UserBannedIPs SET expires = ? WHERE '; $v = array(); switch ($ip_ban_change_to) { case self::IP_BLACKLIST_CHANGE_MAKEPERM: $v[] = 0; //expires 0 is a perma-ban break; case self::IP_BLACKLIST_CHANGE_REMOVE: $v[] = 1; //expires 1 is really far in past, defacto expire break; } $utility = new UserBannedIP(); foreach ($ip_ban_changes as $key) { $q .= '(ipFrom = ? AND ipTo = ?) OR'; $ids = $utility->parseUniqueID($key); $v[] = $ids['ipFrom']; $v[] = $ids['ipTo']; } $q = substr($q, 0, strlen($q) - 3); $db->execute($q, $v); } //textarea actions $ip_ranges = $this->parseIPBlacklistIntoRanges(); $db = Loader::db(); $db->StartTrans(); $q = 'DELETE FROM UserBannedIPs WHERE isManual = 1'; $db->execute($q); //no batch insert in adodb? :( foreach ($ip_ranges as $ip_range) { $ip = new UserBannedIP(); $ip->ipFrom = ip2long($ip_range['ipFrom']); $ip->ipTo = $ip_range['ipTo']; if ($ip->ipTo != 0) { echo $ip->ipTo . "\n"; $ip->ipTo = ip2long($ip_range['ipTo']); } $ip->banCode = UserBannedIP::IP_BAN_CODE_REGISTRATION_THROTTLE; $ip->expires = 0; $ip->isManual = 1; try { $ip->save(); } catch (Exception $e) { //silently discard duplicates } } $db->CompleteTrans(); $this->redirect('/dashboard/settings', 'set_permissions', 'saved_ipblacklist'); } else { $this->set('error', array($this->token->getErrorMessage())); } }