require_class( 'RCon' ); } public function has_page(): bool { return true; } public function get_page_path() { return [ '/minecraft-pay/settle' => 'settle_view' ]; } public function pre_load_plugin() { $this->register_component_short( 'SettingsList' ); $this->add_route( '/minecraft-pay/settings', 'SettingsList' ); $this->register_component_short( 'Settings' ); $this->add_route( '/minecraft-pay/settings/:id', 'Settings' ); $this->register_component_short( 'UsersList' ); $this->add_route( '/minecraft-pay/users', 'UsersList' ); $this->register_component_short( 'MinecraftUsers' ); $this->add_route( '/minecraft-pay/users/:id', 'MinecraftUsers' ); $this->register_component_short( 'AlterAccount' ); $this->add_route( '/minecraft-pay/acredit', 'AlterAccount' ); $this->register_component_short( 'AccountList' ); $this->add_route( '/minecraft-pay/balance', 'AccountList' ); $this->register_component_short( 'GrantUser' ); $this->add_route( '/minecraft-pay/grant', 'GrantUser' ); $this->require_class( 'MinecraftPayAPI' ); API::REGISTER_CLASS( new MinecraftPayAPI(), 3, 'minecraft-pay/' ); } private function settle( $m, $y ) { $mp = MinecraftMonthPaid::GetByUnique( 0, $m, $y ); if ( $mp ) { echo __( [ 'de' => 'Bereits abgerechnet', 'en' => 'Already settled' ] ); return; } $sum = 0; foreach ( MinecraftServer::GetAll() as $server ) { $m = strlen( $m ) == 2 ? $m : '0' . $m; $f = "$y-$m-01"; $cap = date( 't', strtotime( $f ) ); $l = "$y-$m-$cap"; $sid = $server->ID; $subscribers = MinecraftServerSubscription::GetAll( "ConcerningServerID = $sid AND SubscriptionDate BETWEEN '$f' AND '$l'" ); $subsCount = count( $subscribers ); $pot = $subsCount * $server->GetPerMonthPrice(); $potPart = ceil( ( $pot / $subsCount ) * 100 ) / 100; if ( $pot == 0 ) continue; $potPart *= -1; if ( $pot > $server->GetMaxPerMonthPrice() ) $pot = $server->GetMaxPerMonthPrice(); $sum += $pot; /* $dayssum = 0; $subs = []; $sum += $pot; $potheap = 0; $dayssumheap = 0; foreach( $subscribers as $subscriber ) { $days = date( 'd', strtotime( $subscriber->GetSubscriptionDate() ) ); $dayssum += $days; $subs[] = [ $days, $subscriber ]; } foreach ( $subs as $subscription ) { $price = $pot * ( $dayssum / $subscription[ 0 ] ) }*/ foreach ( $subscribers as $subscriber ) { $u = $subscriber->GetUnlockedUser()->GetOwner(); $ac = new MinecraftUserAccount(); $ac->SetMod( $potPart ); $ac->SetDebtor( $u ); $ac->SetComment( 'Host-Relief for ' . $server->GetName() . ' for ' . $m . '-' . $y ); $ac->Save(); } $server->ClearWhitelist(); } $mp = new MinecraftMonthPaid(); $mp->SetAmount( $sum ); $mp->SetMonth( $m ); $mp->SetYear( $y ); if ( $mp->Save() ) { echo __( [ 'de' => 'Abrechnung beendet', 'en' => 'Settled' ] ); } } public function settle_view( string $url ) { // ORDER BY Year DESC, Month DESC LIMIT 1 $nwst = MinecraftMonthPaid::GetAll( "1 ORDER BY Year DESC, Month DESC LIMIT 1" )[ 0 ]; if ( !$nwst ) { $nwst = new MinecraftMonthPaid(); $nwst->SetMonth( date( 'm' ) ); $nwst->SetYear( date( 'Y' ) ); } $m = array_key_exists( 'month', $_GET ) ? $_GET[ 'month' ] + 1 : date( 'm' ); $y = array_key_exists( 'year', $_GET ) ? $_GET[ 'year' ] : date( 'Y' ); if ( $m == '0' ) { $m = '12'; $y--; } $start = ( new DateTime( $nwst->GetYear() . '-' . $nwst->GetMonth() . '-' . '01' ) )->modify( 'first day of next month' ); $end = ( new DateTime( date( "$y-$m-01" ) ) )->modify( 'first day of this month' ); $interval = DateInterval::createFromDateString( '1 month' ); $period = new DatePeriod( $start, $interval, $end ); $settled = false; foreach ( $period as $dt ) { $settled = true; echo 'Settling ' . $dt->format( "Y-m" ) . ': '; $this->settle( $dt->format( 'm' ), $dt->format( 'Y' ) ); echo "
\n"; } if ( !$settled ) { echo 'Nothing to settle'; } } public function load_plugin() { if ( is_null( Permission::GetByUnique( 0, 'Minecraft-Pay-Settings' ) ) ) { $p = Permission::FromArray( [], [] ); $p->SetName( 'Minecraft-Pay-Settings' ); $p->SetSlug( slugify( 'Minecraft-Pay-Settings' ) ); $p->Save(); } if ( is_null( Permission::GetByUnique( 0, 'Minecraft-Possess-User' ) ) ) { $p = Permission::FromArray( [], [] ); $p->SetName( 'Minecraft-Possess-User' ); $p->SetSlug( slugify( 'Minecraft-Possess-User' ) ); $p->Save(); } if ( User::ONLINE() && Permission::PERMITTED( 'Minecraft-Possess-User' ) ) { $me = new MenuEntry( 'Minecraft Payment' ); $me->addImageFromResource( 'minecraft.svg', MinecraftPaymentPlugin::get_plugin_name() ); $me->setFilter( 'none' ); if ( Permission::PERMITTED( 'Minecraft-Pay-Settings' ) ) { $sub = new MenuEntry( 'Minecraft Payment', HOME_URL . 'minecraft-pay/settings' ); $sub->addImageFromResource( 'settings.svg', Plugin_Plugin::get_plugin_name() ); $me->addSubEntry( $sub ); } $sub = new MenuEntry( [ 'de' => 'Minecraft Benutzer', 'en' => 'Minecraft Users' ], HOME_URL . 'minecraft-pay/users' ); $sub->addImageFromResource( 'users.svg', UserManager_Plugin::get_plugin_name() ); $me->addSubEntry( $sub ); if ( Permission::PERMITTED( 'Minecraft-Pay-Settings' ) ) { $sub = new MenuEntry( [ 'de' => 'Gutschrift', 'en' => 'Credit' ], HOME_URL . 'minecraft-pay/acredit' ); $sub->addImageFromResource( 'cash.svg', MinecraftPaymentPlugin::get_plugin_name() ); $me->addSubEntry( $sub ); } $sub = new MenuEntry( [ 'de' => 'Transaktionen', 'en' => 'Transactions' ], HOME_URL . 'minecraft-pay/balance' ); $sub->addImageFromResource( 'cash.svg', MinecraftPaymentPlugin::get_plugin_name() ); $me->addSubEntry( $sub ); if ( Permission::PERMITTED( 'Minecraft-Pay-Settings' ) ) { $sub = new MenuEntry( [ 'de' => 'Recht gewähren', 'en' => 'Grant right' ], HOME_URL . 'minecraft-pay/grant' ); $sub->addImageFromResource( 'key.svg', MinecraftPaymentPlugin::get_plugin_name() ); $me->addSubEntry( $sub ); } SideMenu::addMainMenuEntry( $me ); } } }