require_class( 'RCon' ); } public function has_page(): bool { return true; } public function get_page_path() { return [ '/minecraft-pay/' => [ 'settings' => [ null => 'settings_view', '/*' => 'server_settings_view' ], 'users' => [ null => 'users_view', '/*' => 'user_view' ], 'grant' => 'grant_view', 'settle' => 'settle_view', 'balance' => 'balance_view', 'acredit' => 'acredit_view' ] ]; // return [ '/minecraft-pay/settings', '/minecraft-pay/settings/*', '/minecraft-pay/users', '/minecraft-pay/grant', '/minecraft-pay/settle', '/minecraft-pay/balance', '/minecraft-pay/users/*', '/minecraft-pay/acredit' ]; } public function grant_view( string $url ) { if ( !Permission::PERMITTED( 'Minecraft-Pay-Settings', 1 ) ) return; $params = []; if ( array_key_exists( 'GrantUserRights', $_POST ) && array_key_exists( 'ID', $_POST ) ) { $u = User::GetByID( $_POST[ 'ID' ] ); $s = false; if ( !is_null( $u ) ) { $p = Permission::SEARCH( 'Minecraft-Possess-User' ); $s = $p->grant_user( $u->GetID(), true ); $s = true; // echo $p; // echo $s; $params[ 'save_message' ] = // $s ? __( [ 'de' => 'Recht erfolgreich gewährt', 'en' => 'Right granted successfully' ] ); // : // __( [ 'de' => 'Recht konnte nicht gewährt werden', 'en' => 'Right could not be granted' ] ); } else $params[ 'save_message' ] = __( [ 'de' => 'Benutzer nicht gefunden', 'en' => 'Could not find user' ] ); $params[ 'save_success' ] = $s; } $this->show_template( 'GrantUser', $params ); } 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 acredit_view( string $url ) { if ( !Permission::PERMITTED( 'Minecraft-Pay-Settings', 1 ) ) return; $params = null; if ( array_key_exists( 'AddAccountChange', $_POST ) && array_key_exists( 'Mod', $_POST ) && array_key_exists( 'DebtorID', $_POST ) && array_key_exists( 'Comment', $_POST ) ) { $ac = MinecraftUserAccount::FromPropertyArray( $_POST ); $ac->SetDebtor( User::GetByID( $_POST[ 'DebtorID' ] ) ); $params = []; $params[ 'save_success' ] = $ac->Save(); $params[ 'save_message' ] = $params[ 'save_success' ] ? __( [ 'de' => 'Gutschrift erfolgreich', 'en' => 'Credit successful' ] ) : __( [ 'de' => 'Gutschrift fehlgeschlagen', 'en' => 'Credit failed' ] ); } $this->show_template( 'AlterAccount', $params ); } public function balance_view( string $url ) { if ( !Permission::PERMITTED( 'Minecraft-Possess-User', 1 ) ) return; $this->show_template( 'AccountList', null ); } public function users_view( string $url ) { if ( !Permission::PERMITTED( 'Minecraft-Possess-User', 1 ) ) return; if ( $url == '/minecraft-pay/users' ) { $params = []; if ( array_key_exists( 'CreateMinecraftUser', $_POST ) && array_key_exists( 'Username', $_POST ) ) { $s = MinecraftUser::FromPropertyArray( $_POST ); $s->SetOwner( User::CURRENT() ); try { $s->Save(); $params[ 'save_message' ] = __( [ 'de' => 'Minecraft Benutzer erfolgreich angelegt', 'en' => 'Created minecraft user successfully' ] ); $params[ 'save_success' ] = true; } catch( Exception $ex ) { $params[ 'save_message' ] = $ex->getMessage(); if ( startsWith( $params[ 'save_message' ], 'Duplicate entry' ) ) $params[ 'save_message' ] = __( [ 'de' => 'Doppelter Name oder es wurde bei einem anderen Server weder Domain noch Port angegeben', 'en' => 'Duplicated Name or another server has neither domain nor port' ] ); $params[ 'save_success' ] = false; } } if ( array_key_exists( 'DeleteMinecraftUser', $_POST ) && array_key_exists( 'ID', $_POST ) ) { $s = MinecraftUser::GetByID( $_POST[ 'ID' ] ); if ( User::CURRENT()->GetID() != $s->GetOwner()->GetID() ) { $params[ 'save_message' ] = __( [ 'de' => 'Dieser Benutzer gehöt Ihnen nicht!', 'en' => 'This user does not belong to you!' ] ); $params[ 'save_success' ] = false; } else { try { $s->Delete(); $params[ 'save_message' ] = __( [ 'de' => 'Minecraft Benutzer erfolgreich gelöscht', 'en' => 'Deleted minecraft user successfully' ] ); $params[ 'save_success' ] = true; } catch( Exception $ex ) { $params[ 'save_message' ] = $ex->getMessage(); $params[ 'save_success' ] = false; } } } $this->show_template( 'UsersList', $params ); } else $this->user_view( $url ); } public function user_view( string $url ) { if ( !Permission::PERMITTED( 'Minecraft-Possess-User', 1 ) ) return; if ( !preg_match( '/\/minecraft-pay\/users\/([0-9]+)/', $url, $m ) || is_null( MinecraftUser::GetByID( $m[ 1 ] ) ) ) { Alert::SHOW( __( [ 'de' => 'Dieser Benutzer existiert nicht', 'en' => 'This user does not exist' ] ) ); return; } $params = []; if ( array_key_exists( 'RUnlockUser', $_POST ) && array_key_exists( 'ID', $_POST ) ) { $s = MinecraftServer::GetByID( $_POST[ 'ID' ] ); $u = MinecraftUser::GetByID( $m[ 1 ] ); if ( is_null( $s ) ) { $params[ 'save_message' ] = __( [ 'de' => 'Unbekannter Server', 'en' => 'Unknown server' ] ); $params[ 'save_success' ] = false; } else if ( is_null( $u ) ) { $params[ 'save_message' ] = __( [ 'de' => 'Unbekannter Benutzer', 'en' => 'Unknown user' ] ); $params[ 'save_success' ] = false; } else { if ( $s->Unlock( $u ) ) { if ( !$u->HasSubscripted( $s ) ) { $ms = new MinecraftServerSubscription(); $ms->SetConcerningServer( $s ); $ms->SetUnlockedUser( $u ); $params[ 'save_success' ] = $ms->Save(); $params[ 'save_message' ] = $params[ 'save_success' ] ? __( [ 'de' => 'Erfolgreich freigeschaltet', 'en' => 'Unlock successful' ] ) : __( [ 'de' => 'Freischaltung fehlgeschlagen', 'en' => 'Unlock failed' ] ); if ( !$params[ 'save_success' ] ) $s->Lock( $u ); } else { $params[ 'save_message' ] = __( [ 'de' => 'Erfolgreich freigeschaltet', 'en' => 'Unlock successful' ] ); $params[ 'save_success' ] = true; } } else { $params[ 'save_message' ] = __( [ 'de' => 'Freischaltung fehlgeschlagen', 'en' => 'Unlock failed' ] ); $params[ 'save_success' ] = false; } } } $params[ 'user' ] = MinecraftUser::GetByID( $m[ 1 ] ); $this->show_template( 'Users', $params ); } public function settings_view( string $url ) { if ( !Permission::PERMITTED( 'Minecraft-Pay-Settings', 1 ) ) return; if ( $url == '/minecraft-pay/settings' ) { $params = []; if ( array_key_exists( 'CreateServer', $_POST ) && array_key_exists( 'Name', $_POST ) ) { $s = MinecraftServer::FromPropertyArray( $_POST ); try { $s->Save(); $params[ 'save_message' ] = __( [ 'de' => 'Server erfolgreich angelegt', 'en' => 'Created server successfully' ] ); $params[ 'save_success' ] = true; } catch( Exception $ex ) { $params[ 'save_message' ] = $ex->getMessage(); if ( startsWith( $params[ 'save_message' ], 'Duplicate entry' ) ) $params[ 'save_message' ] = __( [ 'de' => 'Doppelter Name oder es wurde bei einem anderen Server weder Domain noch Port angegeben', 'en' => 'Duplicated Name or another server has neither domain nor port' ] ); $params[ 'save_success' ] = false; } } if ( array_key_exists( 'DeleteServer', $_POST ) && array_key_exists( 'ID', $_POST ) ) { $s = MinecraftServer::FromPropertyArray( $_POST ); try { $s->Delete(); $params[ 'save_message' ] = __( [ 'de' => 'Server erfolgreich gelöscht', 'en' => 'Deleted server successfully' ] ); $params[ 'save_success' ] = true; } catch( Exception $ex ) { $params[ 'save_message' ] = $ex->getMessage(); $params[ 'save_success' ] = false; } } $this->show_template( 'SettingsList', $params ); } else $this->server_settings_view( $url ); // $this->show_template( 'Settings', [ 'settings' => (object) [ 'Server' => '', 'Port' => 35575, 'Password' => '' ] ] ); } public function server_settings_view( string $url ) { if ( !Permission::PERMITTED( 'Minecraft-Pay-Settings', 1 ) ) return; if ( !preg_match( '/\/minecraft-pay\/settings\/([0-9]+)/', $url, $m ) || is_null( MinecraftServer::GetByID( $m[ 1 ] ) ) ) { Alert::SHOW( __( [ 'de' => 'Dieser Server existiert nicht', 'en' => 'This server does not exist' ] ) ); return; } $params = []; if ( array_key_exists( 'SaveServerSettings', $_POST ) && array_key_exists( 'Domain', $_POST ) && array_key_exists( 'Port', $_POST ) && array_key_exists( 'Password', $_POST ) && array_key_exists( 'ServerPath', $_POST ) ) { if ( !$_POST[ 'Port' ] ) $_POST[ 'Port' ] = null; $o = MinecraftServer::GetByID( $m[ 1 ] ); $s = MinecraftServer::FromPropertyArray( $_POST ); $s->SetID( $o->GetID() ); $s->SetName( $o->GetName() ); try { $s->Save(); $params[ 'save_message' ] = __( [ 'de' => 'Server erfolgreich gespeichert', 'en' => 'Saved server successfully' ] ); $params[ 'save_success' ] = true; } catch( Exception $ex ) { $params[ 'save_message' ] = $ex->getMessage(); if ( startsWith( $params[ 'save_message' ], 'Duplicate entry' ) ) $params[ 'save_message' ] = __( [ 'de' => 'Doppelte Domain noch Port Kombination', 'en' => 'Duplicated domain - port combination' ] ); $params[ 'save_success' ] = false; } } $params[ 'settings' ] = MinecraftServer::GetByID( $m[ 1 ] ); $this->show_template( 'Settings', $params ); } public function load_plugin(): void { 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 ); } } }