| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386 |
- <?php
- class MinecraftPaymentPlugin extends Plugin {
- public static function get_plugin_name(): string {
- return 'Minecraft Payment';
- }
-
- public function __construct( $_DB ) {
- $this->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 "<br>\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 );
- }
- }
- }
|