Serving a payment option for my minecraft server so I don't have to pay for it all alone
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

Plugin.php 7.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. <?php
  2. class MinecraftPaymentPlugin extends Plugin {
  3. public static function get_plugin_name(): string {
  4. return 'Minecraft-Payment';
  5. }
  6. public function __construct( $_DB ) {
  7. $this->require_class( 'RCon' );
  8. }
  9. public function has_page(): bool {
  10. return true;
  11. }
  12. public function get_page_path() {
  13. return [
  14. '/minecraft-pay/settle' => 'settle_view'
  15. ];
  16. }
  17. public function pre_load_plugin(): void {
  18. $this->register_component_short( 'SettingsList' );
  19. $this->add_route( '/minecraft-pay/settings', 'SettingsList' );
  20. $this->register_component_short( 'Settings' );
  21. $this->add_route( '/minecraft-pay/settings/:id', 'Settings' );
  22. $this->register_component_short( 'UsersList' );
  23. $this->add_route( '/minecraft-pay/users', 'UsersList' );
  24. $this->register_component_short( 'MinecraftUsers' );
  25. $this->add_route( '/minecraft-pay/users/:id', 'MinecraftUsers' );
  26. $this->register_component_short( 'AlterAccount' );
  27. $this->add_route( '/minecraft-pay/acredit', 'AlterAccount' );
  28. $this->register_component_short( 'AccountList' );
  29. $this->add_route( '/minecraft-pay/balance', 'AccountList' );
  30. $this->register_component_short( 'GrantUser' );
  31. $this->add_route( '/minecraft-pay/grant', 'GrantUser' );
  32. $this->require_class( 'MinecraftPayAPI' );
  33. API::REGISTER_CLASS( new MinecraftPayAPI(), 3, 'minecraft-pay/' );
  34. }
  35. private function settle( $m, $y ) {
  36. $mp = MinecraftMonthPaid::GetByUnique( 0, $m ,$y );
  37. if ( $mp ) {
  38. echo __( [ 'de' => 'Bereits abgerechnet', 'en' => 'Already settled' ] );
  39. return;
  40. }
  41. $sum = 0;
  42. foreach ( MinecraftServer::GetAll() as $server ) {
  43. $m = strlen( $m ) == 2 ? $m : '0' . $m;
  44. $f = "$y-$m-01";
  45. $cap = date( 't', strtotime( $f ) );
  46. $l = "$y-$m-$cap";
  47. $sid = $server->ID;
  48. $subscribers = MinecraftServerSubscription::GetAll( "ConcerningServerID = $sid AND SubscriptionDate BETWEEN '$f' AND '$l'" );
  49. $subsCount = count( $subscribers );
  50. $pot = $subsCount * $server->GetPerMonthPrice();
  51. $potPart = ceil( ( $pot / $subsCount ) * 100 ) / 100;
  52. if ( $pot == 0 ) continue;
  53. $potPart *= -1;
  54. if ( $pot > $server->GetMaxPerMonthPrice() ) $pot = $server->GetMaxPerMonthPrice();
  55. $sum += $pot;
  56. /* $dayssum = 0;
  57. $subs = [];
  58. $sum += $pot;
  59. $potheap = 0;
  60. $dayssumheap = 0;
  61. foreach( $subscribers as $subscriber ) {
  62. $days = date( 'd', strtotime( $subscriber->GetSubscriptionDate() ) );
  63. $dayssum += $days;
  64. $subs[] = [ $days, $subscriber ];
  65. }
  66. foreach ( $subs as $subscription ) {
  67. $price = $pot * ( $dayssum / $subscription[ 0 ] )
  68. }*/
  69. foreach( $subscribers as $subscriber ) {
  70. $u = $subscriber->GetUnlockedUser()->GetOwner();
  71. $ac = new MinecraftUserAccount();
  72. $ac->SetMod( $potPart );
  73. $ac->SetDebtor( $u );
  74. $ac->SetComment( 'Host-Relief for ' . $server->GetName() . ' for ' . $m . '-' . $y );
  75. $ac->Save();
  76. }
  77. $server->ClearWhitelist();
  78. }
  79. $mp = new MinecraftMonthPaid();
  80. $mp->SetAmount( $sum );
  81. $mp->SetMonth( $m );
  82. $mp->SetYear( $y );
  83. if ( $mp->Save() ) {
  84. echo __( [ 'de' => 'Abrechnung beendet', 'en' => 'Settled' ] );
  85. }
  86. }
  87. public function settle_view( string $url ) {
  88. // ORDER BY Year DESC, Month DESC LIMIT 1
  89. $nwst = MinecraftMonthPaid::GetAll( "1 ORDER BY Year DESC, Month DESC LIMIT 1" )[ 0 ];
  90. if ( !$nwst ) {
  91. $nwst = new MinecraftMonthPaid();
  92. $nwst->SetMonth( date( 'm' ) );
  93. $nwst->SetYear( date( 'Y' ) );
  94. }
  95. $m = array_key_exists( 'month', $_GET ) ? $_GET[ 'month' ] + 1 : date( 'm' );
  96. $y = array_key_exists( 'year', $_GET ) ? $_GET[ 'year' ] : date( 'Y' );
  97. if ( $m == '0' ) { $m = '12'; $y--; }
  98. $start = ( new DateTime( $nwst->GetYear() . '-' . $nwst->GetMonth() . '-' . '01' ) )->modify( 'first day of next month' );
  99. $end = ( new DateTime( date( "$y-$m-01" ) ) )->modify( 'first day of this month' );
  100. $interval = DateInterval::createFromDateString( '1 month' );
  101. $period = new DatePeriod( $start, $interval, $end );
  102. $settled = false;
  103. foreach ($period as $dt) {
  104. $settled = true;
  105. echo 'Settling ' . $dt->format("Y-m") . ': ';
  106. $this->settle( $dt->format( 'm' ), $dt->format( 'Y' ) );
  107. echo "<br>\n";
  108. }
  109. if( !$settled ) {
  110. echo 'Nothing to settle';
  111. }
  112. }
  113. public function load_plugin(): void {
  114. if ( is_null( Permission::GetByUnique( 0, 'Minecraft-Pay-Settings' ) ) ) {
  115. $p = Permission::FromArray( [], [] );
  116. $p->SetName( 'Minecraft-Pay-Settings' );
  117. $p->SetSlug( slugify( 'Minecraft-Pay-Settings' ) );
  118. $p->Save();
  119. }
  120. if ( is_null( Permission::GetByUnique( 0, 'Minecraft-Possess-User' ) ) ) {
  121. $p = Permission::FromArray( [], [] );
  122. $p->SetName( 'Minecraft-Possess-User' );
  123. $p->SetSlug( slugify( 'Minecraft-Possess-User' ) );
  124. $p->Save();
  125. }
  126. if ( User::ONLINE() && Permission::PERMITTED( 'Minecraft-Possess-User' ) ) {
  127. $me = new MenuEntry( 'Minecraft Payment' );
  128. $me->addImageFromResource( 'minecraft.svg', MinecraftPaymentPlugin::get_plugin_name() );
  129. $me->setFilter( 'none' );
  130. if ( Permission::PERMITTED( 'Minecraft-Pay-Settings' ) ) {
  131. $sub = new MenuEntry( 'Minecraft Payment', HOME_URL . 'minecraft-pay/settings' );
  132. $sub->addImageFromResource( 'settings.svg', Plugin_Plugin::get_plugin_name() );
  133. $me->addSubEntry( $sub );
  134. }
  135. $sub = new MenuEntry( [ 'de' => 'Minecraft Benutzer', 'en' => 'Minecraft Users' ], HOME_URL . 'minecraft-pay/users' );
  136. $sub->addImageFromResource( 'users.svg', UserManager_Plugin::get_plugin_name() );
  137. $me->addSubEntry( $sub );
  138. if ( Permission::PERMITTED( 'Minecraft-Pay-Settings' ) ) {
  139. $sub = new MenuEntry( [ 'de' => 'Gutschrift', 'en' => 'Credit' ], HOME_URL . 'minecraft-pay/acredit' );
  140. $sub->addImageFromResource( 'cash.svg', MinecraftPaymentPlugin::get_plugin_name() );
  141. $me->addSubEntry( $sub );
  142. }
  143. $sub = new MenuEntry( [ 'de' => 'Transaktionen', 'en' => 'Transactions' ], HOME_URL . 'minecraft-pay/balance' );
  144. $sub->addImageFromResource( 'cash.svg', MinecraftPaymentPlugin::get_plugin_name() );
  145. $me->addSubEntry( $sub );
  146. if ( Permission::PERMITTED( 'Minecraft-Pay-Settings' ) ) {
  147. $sub = new MenuEntry( [ 'de' => 'Recht gew&auml;hren', 'en' => 'Grant right' ], HOME_URL . 'minecraft-pay/grant' );
  148. $sub->addImageFromResource( 'key.svg', MinecraftPaymentPlugin::get_plugin_name() );
  149. $me->addSubEntry( $sub );
  150. };
  151. SideMenu::addMainMenuEntry( $me );
  152. }
  153. }
  154. }