sub change { my $self = shift; my ($attr) = @_; my %FIELDS = (SIMULTANEONSLY => 'logins', DISABLE => 'disable', IP => 'ip', NETMASK => 'netmask', TP_ID => 'tp_id', SPEED => 'speed', CID => 'cid', UID => 'uid', FILTER_ID => 'filter_id', CALLBACK => 'callback', PORT => 'port' ); if (! $attr->{CALLBACK}) { $attr->{CALLBACK}=0; } my $old_info = $self->info($attr->{UID}); if ($old_info->{TP_ID} != $attr->{TP_ID}) { my $tariffs = Tariffs->new($db, $CONF, $admin); $tariffs->info($attr->{TP_ID}); if($tariffs->{CHANGE_PRICE} > 0) { my $user = Users->new($db, $admin, $CONF); $user->info($attr->{UID}); if ($user->{DEPOSIT} + $user->{CREDIT} < $tariffs->{CHANGE_PRICE}) { $self->{errno}=15; return $self; } my $fees = Fees->new($db, $admin, $CONF); $fees->take($user, $tariffs->{CHANGE_PRICE}, { DESCRIBE => "CHANGE TP" }); } if ($tariffs->{AGE} > 0) { my $user = Users->new($db, $admin, $CONF); use POSIX qw(strftime); my $EXPITE_DATE = strftime( "%Y-%m-%d", localtime(time + 86400 * $tariffs->{AGE}) ); #"curdate() + $tariffs->{AGE} days"; $user->{debug}=1; $user->change($attr->{UID}, { EXPIRE => $EXPITE_DATE, UID => $attr->{UID} }); } } $admin->{MODULE}=$MODULE; $self->changes($admin, { CHANGE_PARAM => 'UID', TABLE => 'dv_main', FIELDS => \%FIELDS, OLD_INFO => $old_info, DATA => $attr } ); return $self->{result}; }