removed nearly all templates and view methods implemented most components to have full functionality nowpull/1/head
| public function get_page_path() { | public function get_page_path() { | ||||
| return [ | return [ | ||||
| '/minecraft-pay/' => [ | |||||
| 'users' => [ | |||||
| null => 'users_view', | |||||
| '/*' => 'user_view' | |||||
| ], | |||||
| 'grant' => 'grant_view', | |||||
| 'settle' => 'settle_view', | |||||
| 'balance' => 'balance_view', | |||||
| 'acredit' => 'acredit_view' | |||||
| ] | |||||
| '/minecraft-pay/settle' => 'settle_view' | |||||
| ]; | ]; | ||||
| } | } | ||||
| $this->add_route( '/minecraft-pay/settings', 'SettingsList' ); | $this->add_route( '/minecraft-pay/settings', 'SettingsList' ); | ||||
| $this->register_component_short( 'Settings' ); | $this->register_component_short( 'Settings' ); | ||||
| $this->add_route( '/minecraft-pay/settings/:id', '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' ); | $this->require_class( 'MinecraftPayAPI' ); | ||||
| API::REGISTER_CLASS( new MinecraftPayAPI(), 3, 'minecraft-pay/' ); | API::REGISTER_CLASS( new MinecraftPayAPI(), 3, 'minecraft-pay/' ); | ||||
| } | } | ||||
| 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 ) { | private function settle( $m, $y ) { | ||||
| $mp = MinecraftMonthPaid::GetByUnique( 0, $m ,$y ); | $mp = MinecraftMonthPaid::GetByUnique( 0, $m ,$y ); | ||||
| if ( $mp ) { | if ( $mp ) { | ||||
| } | } | ||||
| } | } | ||||
| 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 load_plugin(): void { | public function load_plugin(): void { | ||||
| if ( is_null( Permission::GetByUnique( 0, 'Minecraft-Pay-Settings' ) ) ) { | if ( is_null( Permission::GetByUnique( 0, 'Minecraft-Pay-Settings' ) ) ) { | ||||
| $p = Permission::FromArray( [], [] ); | $p = Permission::FromArray( [], [] ); |
| * | * | ||||
| * @Parameterized | * @Parameterized | ||||
| * | * | ||||
| * @param MinecraftServer $seerver server to edit | |||||
| * @param MinecraftServer $server server to edit | |||||
| * | * | ||||
| * @paramget id path id required int | * @paramget id path id required int | ||||
| * @paramget server post server required MinecraftServer | * @paramget server post server required MinecraftServer | ||||
| * | * | ||||
| * @return APIResult< MinecraftServer > | * @return APIResult< MinecraftServer > | ||||
| */ | */ | ||||
| public static function AddMinecraftServer( MinecraftServer $server ) { | |||||
| public static function AddServer( MinecraftServer $server ) { | |||||
| $o = new MinecraftServer(); | $o = new MinecraftServer(); | ||||
| $o->SetName( $server->GetName() ); | $o->SetName( $server->GetName() ); | ||||
| return new APIResult( $s ? 'Created server successfully' : 'The server could not be created', $s, $s ? $o : null ); | return new APIResult( $s ? 'Created server successfully' : 'The server could not be created', $s, $s ? $o : null ); | ||||
| } | } | ||||
| /** | |||||
| * @API-Callback | |||||
| * @Path users | |||||
| * @Require-Login | |||||
| * @Require-Permission Minecraft-Possess-User | |||||
| * | |||||
| * @Request-Method GET | |||||
| * | |||||
| * @return MinecraftUser[] | |||||
| */ | |||||
| public function GetAllUsers() { | |||||
| return MinecraftUser::GetAll( [ 'OwnerID' => API::$User->GetID() ] )->toArray(); | |||||
| } | |||||
| /** | |||||
| * @API-Callback | |||||
| * @Path users/:id/subscription-states | |||||
| * @Require-Login | |||||
| * @Require-Permission Minecraft-Possess-User | |||||
| * | |||||
| * @Request-Method GET | |||||
| * | |||||
| * @Parameterized | |||||
| * | |||||
| * @paramget id path id required int | |||||
| * | |||||
| * @return Map< int, boolean > | |||||
| */ | |||||
| public function GetAllSubscriptionStates( int $id ) { | |||||
| $user = MinecraftUser::GetByID( $id ); | |||||
| $data = []; | |||||
| foreach( MinecraftServer::GetAll() as $server ) { | |||||
| $data[] = [ $server->GetID() , $server->IsUnlocked( $user ) ]; | |||||
| } | |||||
| return $data; | |||||
| } | |||||
| /** | |||||
| * @API-Callback | |||||
| * @Path users/:id/subscribe-server/:serverId | |||||
| * @Require-Login | |||||
| * @Require-Permission Minecraft-Possess-User | |||||
| * | |||||
| * @Request-Method GET | |||||
| * | |||||
| * @Parameterized | |||||
| * | |||||
| * @paramget id path id required int | |||||
| * @paramget serverId path serverId required int | |||||
| * | |||||
| * @return APIResult< boolean > | |||||
| */ | |||||
| public function SubscribeServer( int $id, int $serverId ) { | |||||
| $u = MinecraftUser::GetByID( $id ); | |||||
| $s = MinecraftServer::GetByID( $serverId ); | |||||
| $result = new APIResult( '', false, false ); | |||||
| if ( is_null( $s ) ) { | |||||
| $result->Message( 'Unknown server' ); | |||||
| } | |||||
| else if ( is_null( $u ) ) { | |||||
| $result->Message( 'Unknown user' ); | |||||
| } | |||||
| else { | |||||
| if ( $s->Unlock( $u ) ) { | |||||
| if ( !$u->HasSubscripted( $s ) ) { | |||||
| $ms = new MinecraftServerSubscription(); | |||||
| $ms->SetConcerningServer( $s ); | |||||
| $ms->SetUnlockedUser( $u ); | |||||
| $result->Success( $ms->Save() ); | |||||
| $result->Message( $result->Success() ? 'Unlock successful' : 'Unlock failed' )->Obj( $result->Success() ); | |||||
| if ( !$result->Success() ) $s->Lock( $u ); | |||||
| } else { | |||||
| $result->Message( 'Unlock successful' )->Success( true )->Obj( true ); | |||||
| } | |||||
| } else { | |||||
| $result->Message( 'Unlock failed' )->Success( false ); | |||||
| } | |||||
| } | |||||
| return $result; | |||||
| } | |||||
| // /** | |||||
| // * @API-Callback | |||||
| // * @Path users/:id | |||||
| // * @Require-Login | |||||
| // * @Require-Permission Minecraft-Possess-User | |||||
| // * | |||||
| // * @Request-Method PATCH | |||||
| // * | |||||
| // * @Parameterized | |||||
| // * | |||||
| // * @param MinecraftUser $user user to edit | |||||
| // * | |||||
| // * @paramget id path id required int | |||||
| // * @paramget user post user required MinecraftUser | |||||
| // * | |||||
| // * @return APIResult< MinecraftUser > | |||||
| // */ | |||||
| // public static function UpdateUser( int $id, MinecraftUser $user ) { | |||||
| // $o = MinecraftUser::GetByID( $id ); | |||||
| // if ( $o == null ) { | |||||
| // $results[] = new APIResult( 'Missing ID', false, $user ); | |||||
| // } | |||||
| // if ( $user->GetUsername() != null ) $o->SetUsername( $user->GetUsername() ); | |||||
| // if ( API::$User->GetID() != $user->GetOwner()->GetID() ) { | |||||
| // return new APIResult( 'This minecraft user does not belong to you', false, null ); | |||||
| // } | |||||
| // $r = $o->Save(); | |||||
| // return new APIResult( $r ? 'Saved successfully' : 'Saving failed', $r, $r ? $o : MinecraftUser::GetByID( $id ) ); | |||||
| // } | |||||
| /** | |||||
| * @API-Callback | |||||
| * @Path users/:id | |||||
| * @Require-Login | |||||
| * @Require-Permission Minecraft-Possess-User | |||||
| * | |||||
| * @Request-Method DELETE | |||||
| * | |||||
| * @Parameterized | |||||
| * | |||||
| * @paramget id path id required int | |||||
| * | |||||
| * @return APIResult< MinecraftUser > | |||||
| */ | |||||
| public static function DeleteUser( int $id ) { | |||||
| if ( !is_numeric( $id ) ) return new APIResult( 'Invalid ID', false, null ); | |||||
| $user = MinecraftUser::GetByID( $id ); | |||||
| $result = null; | |||||
| if ( !$user ) { | |||||
| $result = new APIResult( 'User does not exist', false, null ); | |||||
| } else if ( $user->DELETE() ) { | |||||
| $result = new APIResult( 'Deleted user successfully', true, null ); | |||||
| } else { | |||||
| $result = new APIResult( 'Deleting user failed', false, $user ); | |||||
| } | |||||
| return $result; | |||||
| } | |||||
| /** | |||||
| * @API-Callback | |||||
| * @Path users | |||||
| * @Require-Login | |||||
| * @Require-Permission Minecraft-Possess-User | |||||
| * | |||||
| * @Request-Method POST | |||||
| * | |||||
| * @Parameterized | |||||
| * | |||||
| * @param MinecraftUser $user to add | |||||
| * | |||||
| * @paramget user post user required MinecraftUser | |||||
| * | |||||
| * @return APIResult< MinecraftUser > | |||||
| */ | |||||
| public static function AddUser( MinecraftUser $user ) { | |||||
| $o = new MinecraftUser(); | |||||
| $o->SetUsername( $user->GetUsername() ); | |||||
| $o->SetOwner( API::$User ); | |||||
| $s = $o->Save(); | |||||
| return new APIResult( $s ? 'Created user successfully' : 'The user could not be created', $s, $s ? $o : null ); | |||||
| } | |||||
| /** | |||||
| * @API-Callback | |||||
| * @Path charges | |||||
| * @Require-Login | |||||
| * @Require-Permission Minecraft-Possess-User | |||||
| * | |||||
| * @Request-Method GET | |||||
| * | |||||
| * @return MinecraftUserAccount[] | |||||
| */ | |||||
| public function GetAllCharges() { | |||||
| return MinecraftUserAccount::GetAll( [ 'DebtorID' => API::$User->GetID() ] )->toArray(); | |||||
| } | |||||
| /** | |||||
| * @API-Callback | |||||
| * @Path users/:id/grant-user-right | |||||
| * @Require-Login | |||||
| * @Require-Permission Minecraft-Pay-Settings | |||||
| * | |||||
| * @Request-Method POST | |||||
| * | |||||
| * @Parameterized | |||||
| * | |||||
| * @paramget id path id required int | |||||
| * | |||||
| * @return APIResult< boolean > | |||||
| */ | |||||
| public function GrantUserRight( int $id ) { | |||||
| $u = User::GetByID( $id ); | |||||
| $r = new APIResult( '', false, false ); | |||||
| $s = false; | |||||
| if ( !is_null( $u ) ) { | |||||
| $p = Permission::SEARCH( 'Minecraft-Possess-User' ); | |||||
| $s = $p->grant_user( $u->GetID(), true ); | |||||
| $r->Message( 'Right granted successfully' )->Success( true )->Obj( true ); | |||||
| } | |||||
| else $r->Message( 'Could not find user' ); | |||||
| return $r; | |||||
| } | |||||
| /** | |||||
| * @API-Callback | |||||
| * @Path users/:id/acredit | |||||
| * @Require-Login | |||||
| * @Require-Permission Minecraft-Pay-Settings | |||||
| * | |||||
| * @Request-Method POST | |||||
| * | |||||
| * @Parameterized | |||||
| * | |||||
| * @paramget id path id required int | |||||
| * @paramget credit post credit required MinecraftUserAccount | |||||
| * | |||||
| * @return APIResult< MinecraftUserAccount > | |||||
| */ | |||||
| public function Acredit( int $id, MinecraftUserAccount $credit ) { | |||||
| $r = new APIResult( '', false, null ); | |||||
| $ac = new MinecraftUserAccount(); | |||||
| $u = User::GetByID( $id ); | |||||
| if ( is_null( $u ) ) { | |||||
| $r->Message( 'Missing user' ); | |||||
| } else { | |||||
| $ac->SetMod( $credit->GetMod() ); | |||||
| $ac->SetComment( $credit->GetComment() ); | |||||
| $ac->SetDebtor( $u ); | |||||
| $r->Success( !!$ac->Save() ); | |||||
| $r->Message( $r->Success() ? 'Credit successful' : 'Credit failed' ); | |||||
| if ( $r->Success() ) $r->Obj( $ac ); | |||||
| } | |||||
| return $r; | |||||
| } | |||||
| } | } |
| <svg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'><title>ionicons-v5-b</title><path d='M256,48C141.31,48,48,141.32,48,256c0,114.86,93.14,208,208,208,114.69,0,208-93.31,208-208C464,141.13,370.87,48,256,48Zm94,219a94,94,0,1,1-94-94h4.21l-24-24L256,129.2,315.8,189,256,248.8,236.2,229l27.92-27.92C261.72,201,259,201,256,201a66,66,0,1,0,66,66V253h28Z'/></svg> |
| declare class AccountList { | declare class AccountList { | ||||
| private refresh; | |||||
| private getAccount; | |||||
| } | } |
| // MLQRequire: { "Plugin": "Minecraft-Payment", "Type": "Service", "Name": "MinecraftPayService" } | |||||
| class AccountList { | class AccountList { | ||||
| refresh() { | |||||
| MinecraftPayService.RefreshCharges(); | |||||
| } | |||||
| getAccount() { | |||||
| return MinecraftPayService.UserAccounts.map(acc => acc.Mod).concat([0]).reduce((pre, nxt) => pre + nxt); | |||||
| } | |||||
| } | } |
| // MLQRequire: { "Plugin": "Minecraft-Payment", "Type": "Service", "Name": "MinecraftPayService" } | |||||
| class AccountList { | class AccountList { | ||||
| private refresh() { | |||||
| MinecraftPayService.RefreshCharges(); | |||||
| } | |||||
| private getAccount() { | |||||
| return MinecraftPayService.UserAccounts.map( acc => acc.Mod ).concat( [ 0 ] ).reduce( ( pre, nxt ) => pre + nxt ); | |||||
| } | |||||
| } | } |
| <meta log-in permission="Minecraft-Possess-User" /> | |||||
| <table class="table"> | |||||
| <div class="bg-primary w-100 d-flex justify-content-end p-2 rounded"> | |||||
| <span dval-innerText="__( 'Account' ) + ': '"></span> | |||||
| <span dval-innerText="this.getAccount()"></span> | |||||
| <span> €</span> | |||||
| </div> | |||||
| <hr /> | |||||
| <table class="table table-hover table-striped"> | |||||
| <thead> | <thead> | ||||
| <tr> | |||||
| <th dval-innerText="__( [ 'Date' )"></th> | |||||
| <th style="width: 100%;" dval-innerText="__( 'Comment' )"></th> | |||||
| <th dval-innerText="__( 'Amount' )"></th> | |||||
| <tr class="table-primary"> | |||||
| <th class="align-middle" dval-innerText="__( 'Date' )"></th> | |||||
| <th class="align-middle" style="width: 100%;" dval-innerText="__( 'Comment' )"></th> | |||||
| <th class="align-middle" dval-innerText="__( 'Amount' )"></th> | |||||
| <th> | |||||
| <a class="btn btn-info p-0"> | |||||
| <img dval-src="Resources.GetImageUrl( 'refresh.svg', 'Minecraft-Payment' )" | |||||
| style="filter: invert( 1 ); height: 2em;" dval-onclick="() => this.refresh()" /> | |||||
| </a> | |||||
| </th> | |||||
| </tr> | </tr> | ||||
| </thead> | </thead> | ||||
| <tbody> | <tbody> | ||||
| <tr dyn-for="[ 'credit', 'MinecraftUserAccount::GetAll( [ \'DebtorID\' => User::CURRENT()->ID ] )' ]"> | |||||
| <td dval-innerText="credit.GetOccurence()"></td> | |||||
| <td dval-innerText="credit.GetComment()"></td> | |||||
| <td style="text-align: right;" dval-innerText="credit.GetMod() + ' €'"></td> | |||||
| <tr m-for="MinecraftPayService.UserAccounts as credit"> | |||||
| <td class="align-middle" dval-innerText="credit.Occurence"></td> | |||||
| <td class="align-middle" dval-innerText="credit.Comment"></td> | |||||
| <td colspan="2" class="align-middle" style="text-align: right;" | |||||
| dval-innerText="credit.Mod + ' €'"></td> | |||||
| </tr> | </tr> | ||||
| </tbody> | </tbody> | ||||
| </table> | </table> |
| declare class AlterAccount { | |||||
| private debtor; | |||||
| private mod; | |||||
| private comment; | |||||
| private acredit; | |||||
| } |
| // MLQRequire: { "Plugin": "Minecraft-Payment", "Type": "Service", "Name": "MinecraftPayService" } | |||||
| // MLQRequire: { "Plugin": "User-Manager", "Type": "Service", "Name": "UserData" } | |||||
| class AlterAccount { | |||||
| acredit() { | |||||
| MinecraftPayAPI.Acredit({ | |||||
| params: { | |||||
| id: this.debtor | |||||
| }, | |||||
| post: { | |||||
| credit: { | |||||
| Comment: this.comment, | |||||
| Mod: this.mod | |||||
| } | |||||
| } | |||||
| }).then(r => { | |||||
| Toasts.Messaged(r.Message, Toast.Load({ Type: r.Success ? 'success' : 'danger' })); | |||||
| }); | |||||
| } | |||||
| } |
| // MLQRequire: { "Plugin": "Minecraft-Payment", "Type": "Service", "Name": "MinecraftPayService" } | |||||
| // MLQRequire: { "Plugin": "User-Manager", "Type": "Service", "Name": "UserData" } | |||||
| class AlterAccount { | |||||
| private debtor: number; | |||||
| private mod: number; | |||||
| private comment: string; | |||||
| private acredit() { | |||||
| MinecraftPayAPI.Acredit( | |||||
| { | |||||
| params: { | |||||
| id: this.debtor | |||||
| }, | |||||
| post: { | |||||
| credit: { | |||||
| Comment: this.comment, | |||||
| Mod: this.mod | |||||
| } as MinecraftUserAccount | |||||
| } | |||||
| } | |||||
| ).then( r => { | |||||
| Toasts.Messaged( r.Message, Toast.Load( { Type: r.Success ? 'success' : 'danger' } ) ); | |||||
| } ); | |||||
| } | |||||
| } |
| <meta log-in permission="Minecraft-Pay-Settings" /> | |||||
| <div dyn-if="isset( $save_message )"> | |||||
| <div dyn-type="alert" eval-value="$save_message" eval-type="$save_success ? ALERT_SUCCESS : ALERT_DANGER"></div> | |||||
| </div> | |||||
| <form method="POST"> | |||||
| <table> | |||||
| <form m-form="this.acredit"> | |||||
| <table class="table table-striped table-hover"> | |||||
| <thead> | <thead> | ||||
| <tr> | |||||
| <tr class="table-primary"> | |||||
| <th innerText="Minecraft Payment" colspan="2"></th> | <th innerText="Minecraft Payment" colspan="2"></th> | ||||
| </tr> | </tr> | ||||
| </thead> | </thead> | ||||
| <tbody> | <tbody> | ||||
| <tr> | <tr> | ||||
| <th eval-innerText="__([ 'de' => 'Benutzer', 'en' => 'User' ])"></th> | |||||
| <th class="align-middle" dval-innerText="__( 'User' )"></th> | |||||
| <td> | <td> | ||||
| <select name="DebtorID"> | |||||
| <div dyn-for="[ 'user', 'User::GetAll()' ]"><option eval-value="$user->GetID()" eval-innerText="$user->GetUsername()"></option></div> | |||||
| <select class="form-control" name="DebtorID" m-value="this.debtor"> | |||||
| <option dval-innerText="__( '-- Please select --' )"></option> | |||||
| <option m-for="UserData.Users as user" dval-value="user.ID" dval-innerText="user.Username"></option> | |||||
| </select> | </select> | ||||
| </td> | </td> | ||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| <th eval-innerText="__([ 'de' => 'Menge', 'en' => 'Amount' ])"></th> | |||||
| <th class="align-middle" dval-innerText="__( 'Amount' )"></th> | |||||
| <td> | <td> | ||||
| <input type="number" step="0.01" name="Mod" value="0.00" /> | |||||
| <input class="form-control" type="number" step="0.01" name="Mod" value="0.00" m-value="this.mod" /> | |||||
| </td> | </td> | ||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| <th eval-innerText="__([ 'de' => 'Kommentar', 'en' => 'Comment' ])"></th> | |||||
| <th class="align-middle" dval-innerText="__( 'Comment' )"></th> | |||||
| <td> | <td> | ||||
| <input type="string" name="Comment" /> | |||||
| <input class="form-control" type="string" name="Comment" m-value="this.comment" /> | |||||
| </td> | </td> | ||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| <td colspan="2"> | <td colspan="2"> | ||||
| <input type="submit" name="AddAccountChange" eval-value="__([ 'de' => 'Gutschreiben', 'en' => 'Credit' ])" /> | |||||
| <input class="form-control btn-info" type="submit" name="AddAccountChange" dval-value="__( 'Credit' )" /> | |||||
| </td> | </td> | ||||
| </tr> | </tr> | ||||
| </tbody> | </tbody> |
| declare class GrantUser { | |||||
| private user; | |||||
| private grant; | |||||
| } |
| // MLQRequire: { "Plugin": "Minecraft-Payment", "Type": "Service", "Name": "MinecraftPayService" } | |||||
| // MLQRequire: { "Plugin": "User-Manager", "Type": "Service", "Name": "UserData" } | |||||
| class GrantUser { | |||||
| grant() { | |||||
| MinecraftPayAPI.GrantUserRight({ params: { id: this.user } }).then(r => { | |||||
| Toasts.Messaged(r.Message, Toast.Load({ Type: r.Success ? 'success' : 'danger' })); | |||||
| }); | |||||
| } | |||||
| } |
| // MLQRequire: { "Plugin": "Minecraft-Payment", "Type": "Service", "Name": "MinecraftPayService" } | |||||
| // MLQRequire: { "Plugin": "User-Manager", "Type": "Service", "Name": "UserData" } | |||||
| class GrantUser { | |||||
| private user: number; | |||||
| private grant() { | |||||
| MinecraftPayAPI.GrantUserRight( { params: { id: this.user } } ).then( r => { | |||||
| Toasts.Messaged( r.Message, Toast.Load( { Type: r.Success ? 'success' : 'danger' } ) ); | |||||
| } ); | |||||
| } | |||||
| } |
| <form m-form="this.grant"> | |||||
| <table class="table table-hover table-striped"> | |||||
| <thead> | |||||
| <tr class="table-primary"> | |||||
| <th innerText="Minecraft Payment" colspan="2"></th> | |||||
| </tr> | |||||
| </thead> | |||||
| <tbody> | |||||
| <tr> | |||||
| <th class="align-middle" dval-innerText="__( 'User' )"></th> | |||||
| <td> | |||||
| <select class="form-control" name="ID" m-value="this.user"> | |||||
| <option dval-innerText="__( '-- Please select --' )"></option> | |||||
| <option m-for="UserData.Users as user" dval-value="user.ID" dval-innerText="user.Username"></option> | |||||
| </select> | |||||
| </td> | |||||
| </tr> | |||||
| <tr> | |||||
| <td colspan="2"> | |||||
| <input class="form-control btn-info" type="submit" name="GrantUserRights" dval-value="__( 'Mark as Minecraft Payment User' )" /> | |||||
| </td> | |||||
| </tr> | |||||
| </tbody> | |||||
| </table> | |||||
| </form> |
| declare class MinecraftUsers { | |||||
| private user; | |||||
| private subscriptionsStates; | |||||
| onview(vnode: any): void; | |||||
| private loadUser; | |||||
| private UnlockServer; | |||||
| private unlockServer; | |||||
| constructor(); | |||||
| } |
| // MLQRequire: { "Plugin": "Minecraft-Payment", "Type": "Service", "Name": "MinecraftPayService" } | |||||
| class MinecraftUsers { | |||||
| constructor() { | |||||
| this.user = {}; | |||||
| this.subscriptionsStates = new Map(); | |||||
| } | |||||
| onview(vnode) { | |||||
| if (typeof (MinecraftUser) !== 'function') | |||||
| LoadQueue.Start(() => { }); | |||||
| else | |||||
| this.loadUser(); | |||||
| } | |||||
| loadUser() { | |||||
| var id = m.route.param('id'); | |||||
| if (id.match(/^[0-9]+$/)) | |||||
| id = +id; | |||||
| else | |||||
| return; | |||||
| if (this.user.ID !== id) { | |||||
| this.user = $.extend(true, new MinecraftUser(), MinecraftPayService.Users.find(o => o.ID === id)) || this.user; | |||||
| if (this.user.ID) { | |||||
| MinecraftPayAPI.GetAllSubscriptionStates({ params: { id } }).then(map => { | |||||
| this.subscriptionsStates = map || this.subscriptionsStates; | |||||
| }); | |||||
| } | |||||
| m.redraw(); | |||||
| } | |||||
| } | |||||
| UnlockServer(serverId) { | |||||
| if (!this.subscriptionsStates.get(serverId)) { | |||||
| Modal.YesNo('Delete minecraft user', __('Do you really want to unlock this server for this minecraft user?'), (c, e) => this.unlockServer(this.user.ID, serverId, c)).Show(); | |||||
| } | |||||
| } | |||||
| unlockServer(userId, serverId, confirmed) { | |||||
| if (confirmed) { | |||||
| MinecraftPayAPI.SubscribeServer({ params: { id: userId, serverId } }).then(r => { | |||||
| this.subscriptionsStates.set(serverId, r.Obj); | |||||
| Toasts.Messaged(r.Message, Toast.Load({ Type: r.Success ? 'success' : 'danger' })); | |||||
| }); | |||||
| } | |||||
| return undefined; | |||||
| } | |||||
| } |
| // MLQRequire: { "Plugin": "Minecraft-Payment", "Type": "Service", "Name": "MinecraftPayService" } | |||||
| class MinecraftUsers { | |||||
| private user: MinecraftUser = {} as MinecraftUser; | |||||
| private subscriptionsStates: Map< number, boolean > = new Map(); | |||||
| public onview( vnode ) | |||||
| { | |||||
| if ( typeof( MinecraftUser ) !== 'function' ) LoadQueue.Start( () => {} ) | |||||
| else this.loadUser(); | |||||
| } | |||||
| private loadUser() { | |||||
| var id: string | number = m.route.param( 'id' ); | |||||
| if ( id.match( /^[0-9]+$/ ) ) id = +id; | |||||
| else return; | |||||
| if ( this.user.ID !== id ) { | |||||
| this.user = $.extend( true, new MinecraftUser(), MinecraftPayService.Users.find( o => o.ID === id ) ) || this.user; | |||||
| if ( this.user.ID ) { | |||||
| MinecraftPayAPI.GetAllSubscriptionStates( { params: { id } } ).then( map => { | |||||
| this.subscriptionsStates = map || this.subscriptionsStates; | |||||
| } ); | |||||
| } | |||||
| m.redraw(); | |||||
| } | |||||
| } | |||||
| private UnlockServer( serverId: number ) { | |||||
| if ( !this.subscriptionsStates.get( serverId ) ) { | |||||
| Modal.YesNo( | |||||
| 'Delete minecraft user', __( 'Do you really want to unlock this server for this minecraft user?' ), | |||||
| ( c, e ) => this.unlockServer( this.user.ID, serverId, c ) | |||||
| ).Show(); | |||||
| } | |||||
| } | |||||
| private unlockServer( userId: number, serverId: number, confirmed: boolean ): boolean { | |||||
| if ( confirmed ) { | |||||
| MinecraftPayAPI.SubscribeServer( { params: { id: userId, serverId } } ).then( r => { | |||||
| this.subscriptionsStates.set( serverId, r.Obj ); | |||||
| Toasts.Messaged( r.Message, Toast.Load( { Type: r.Success ? 'success' : 'danger' } ) ); | |||||
| } ); | |||||
| } | |||||
| return undefined; | |||||
| } | |||||
| public constructor() { | |||||
| } | |||||
| } |
| <table class="table table-striped table-hover"> | |||||
| <thead> | |||||
| <tr class="table-primary"> | |||||
| <th dval-innerText="this.user.Username" colspan="2"></th> | |||||
| </tr> | |||||
| </thead> | |||||
| <tbody> | |||||
| <tr class="table-primary"> | |||||
| <th colspan="2" dval-innerText="__('Server')"></th> | |||||
| </tr> | |||||
| <tr m-for="MinecraftPayService.Servers as server"> | |||||
| <td class="align-middle" style="vertical-align: middle; width: 100%" dval-innerText="server.Name"></td> | |||||
| <td class="align-middle"> | |||||
| <span m-if="this.subscriptionsStates.has( server.ID )" dval-onclick="() => this.UnlockServer( server.ID )" dval-class="'d-flex align-items-center btn ' + ( this.subscriptionsStates.get( server.ID ) ? 'btn-success' : 'btn-danger' )"> | |||||
| <span m-if="!this.subscriptionsStates.get( server.ID )" dval-innerText="__( 'Unlock' ) + ' ~' + server.PerMonthPrice + ' € '"></span> | |||||
| <img class="float-right" style="height: 1em; filter: invert( 1 ); vertical-align: middle;" dval-src="Resources.GetImageUrl( this.subscriptionsStates.get( server.ID ) ? 'unlock.svg' : 'lock.svg', 'Minecraft-Payment' )" /> | |||||
| </span> | |||||
| </td> | |||||
| </tr> | |||||
| </tbody> | |||||
| </table> |
| </thead> | </thead> | ||||
| <tbody> | <tbody> | ||||
| <tr m-for="MinecraftPayService.Servers as server"> | <tr m-for="MinecraftPayService.Servers as server"> | ||||
| <td dval-innerText="server.Name"></td> | |||||
| <td class="align-middle" dval-innerText="server.Name"></td> | |||||
| <td class="align-middle"> | <td class="align-middle"> | ||||
| <a class="action_href action_delete btn btn-danger" style="cursor: pointer;" dval-onclick="() => Modal.YesNo( 'Delete server', __( 'Do you really want to delete this server?' ), ( c, e ) => this.deleteServer( server.ID, c, e ) ).Show()">🗑</a> | <a class="action_href action_delete btn btn-danger" style="cursor: pointer;" dval-onclick="() => Modal.YesNo( 'Delete server', __( 'Do you really want to delete this server?' ), ( c, e ) => this.deleteServer( server.ID, c, e ) ).Show()">🗑</a> | ||||
| </td> | </td> |
| declare class UsersList { | |||||
| private username; | |||||
| private addUser; | |||||
| private deleteUser; | |||||
| } |
| // MLQRequire: { "Plugin": "Minecraft-Payment", "Type": "Service", "Name": "MinecraftPayService" } | |||||
| class UsersList { | |||||
| addUser() { | |||||
| MinecraftPayService.CreateUser({ Username: this.username }); | |||||
| } | |||||
| deleteUser(id, confirm, event) { | |||||
| if (confirm) { | |||||
| MinecraftPayService.DeleteUser(id); | |||||
| } | |||||
| } | |||||
| } |
| // MLQRequire: { "Plugin": "Minecraft-Payment", "Type": "Service", "Name": "MinecraftPayService" } | |||||
| class UsersList { | |||||
| private username: string; | |||||
| private addUser() { | |||||
| MinecraftPayService.CreateUser( { Username: this.username } as MinecraftUser ); | |||||
| } | |||||
| private deleteUser( id: number, confirm: boolean, event: any ) { | |||||
| if ( confirm ) { | |||||
| MinecraftPayService.DeleteUser( id ); | |||||
| } | |||||
| } | |||||
| } |
| <form m-form="this.addUser"> | |||||
| <table class="table table-hover table-striped"> | |||||
| <tbody> | |||||
| <tr> | |||||
| <td><input class="form-control" type="text" name="Username" dval-placeholder="__( 'Username' )" m-value="this.username" /></td> | |||||
| <td><input class="form-control btn-info" type="submit" name="CreateMinecraftUser" dval-value="__( 'Add Minecraft User' )" /></td> | |||||
| </tr> | |||||
| </tbody> | |||||
| </table> | |||||
| </form> | |||||
| <hr /> | |||||
| <table class="table"> | |||||
| <thead> | |||||
| <tr class="table-primary"> | |||||
| <th style="width: 100%;">Name</th> | |||||
| <th colspan="2"></th> | |||||
| </tr> | |||||
| </thead> | |||||
| <tbody> | |||||
| <tr m-for="MinecraftPayService.Users as user"> | |||||
| <td class="align-middle" dval-innerText="user.Username"></td> | |||||
| <td class="align-middle"> | |||||
| <a class="action_href action_delete btn btn-danger" style="cursor: pointer;" dval-onclick="() => Modal.YesNo( 'Delete minecraft user', __( 'Do you really want to delete this minecraft user?' ), ( c, e ) => this.deleteUser( user.ID, c, e ) ).Show()">🗑</a> | |||||
| </td> | |||||
| <td class="align-middle"> | |||||
| <a class="action_href btn btn-outline-primary float-right" dval-m-href="'/minecraft-pay/users/' + user.ID">>></a> | |||||
| </td> | |||||
| </tr> | |||||
| </tbody> | |||||
| </table> |
| "Delete server": "Server löschen", | "Delete server": "Server löschen", | ||||
| "Do you really want to delete this server?": "Willst du diesen Server wirklich löschen?", | "Do you really want to delete this server?": "Willst du diesen Server wirklich löschen?", | ||||
| "Yes": "Ja", | "Yes": "Ja", | ||||
| "No": "Nein" | |||||
| "No": "Nein", | |||||
| "User": "Benutzer", | |||||
| "Amount": "Menge", | |||||
| "Comment": "Kommentar", | |||||
| "Mark as Minecraft Payment User": "Als Minecraft Payment Nutzer markieren", | |||||
| "Date": "Datum", | |||||
| "Account": "Konto-Stand", | |||||
| "-- Please select --": "-- Bitte auswählen --", | |||||
| "Add Minecraft User": "Minecraft Benutzer hinzufügen" | |||||
| } | } |
| declare class MinecraftPayService { | declare class MinecraftPayService { | ||||
| static INSTANCE: MinecraftPayService; | static INSTANCE: MinecraftPayService; | ||||
| static Servers: MinecraftServer[]; | static Servers: MinecraftServer[]; | ||||
| static Users: MinecraftUser[]; | |||||
| static UserAccounts: MinecraftUserAccount[]; | |||||
| private constructor(); | private constructor(); | ||||
| static RefreshCharges(): void; | |||||
| static CreateServer(server: MinecraftServer): void; | static CreateServer(server: MinecraftServer): void; | ||||
| static UpdateServer(id: number, server: MinecraftServer): void; | static UpdateServer(id: number, server: MinecraftServer): void; | ||||
| static DeleteServer(id: number): void; | static DeleteServer(id: number): void; | ||||
| static CreateUser(user: MinecraftUser): void; | |||||
| static DeleteUser(id: number): void; | |||||
| } | } |
| constructor() { | constructor() { | ||||
| LoadQueue.Start(() => { | LoadQueue.Start(() => { | ||||
| MinecraftPayAPI.GetAllServers().then(s => MinecraftPayService.Servers = s || []); | MinecraftPayAPI.GetAllServers().then(s => MinecraftPayService.Servers = s || []); | ||||
| MinecraftPayAPI.GetAllUsers().then(u => MinecraftPayService.Users = u || []); | |||||
| MinecraftPayAPI.GetAllCharges().then(mua => MinecraftPayService.UserAccounts = mua || []); | |||||
| }); | |||||
| } | |||||
| static RefreshCharges() { | |||||
| LoadQueue.Start(() => { | |||||
| MinecraftPayAPI.GetAllCharges().then(mua => MinecraftPayService.UserAccounts = mua || []); | |||||
| }); | }); | ||||
| } | } | ||||
| static CreateServer(server) { | static CreateServer(server) { | ||||
| MinecraftPayAPI.AddMinecraftServer({ post: { server } }).then(r => { | |||||
| console.warn(r); | |||||
| MinecraftPayAPI.AddServer({ post: { server } }).then(r => { | |||||
| if (r.Success) { | if (r.Success) { | ||||
| this.Servers.push(r.Obj); | this.Servers.push(r.Obj); | ||||
| } | } | ||||
| Toasts.Messaged(r.Message, Toast.Load({ Type: r.Success ? 'success' : 'danger' })); | Toasts.Messaged(r.Message, Toast.Load({ Type: r.Success ? 'success' : 'danger' })); | ||||
| }); | }); | ||||
| } | } | ||||
| static CreateUser(user) { | |||||
| MinecraftPayAPI.AddUser({ post: { user } }).then(r => { | |||||
| if (r.Success) { | |||||
| this.Users.push(r.Obj); | |||||
| } | |||||
| Toasts.Messaged(r.Message, Toast.Load({ Type: r.Success ? 'success' : 'danger' })); | |||||
| }); | |||||
| } | |||||
| // public static UpdateUser( id: number, user: MinecraftUser ) { | |||||
| // MinecraftPayAPI.UpdateUser( { post: { user }, params: { id } } ).then( r => { | |||||
| // if ( r.Success ) { | |||||
| // this.Users[ this.Users.findIndex( o => o.ID === r.Obj.ID ) ] = r.Obj; | |||||
| // } | |||||
| // Toasts.Messaged( r.Message, Toast.Load( { Type: r.Success ? 'success' : 'danger' } ) ); | |||||
| // } ); | |||||
| // } | |||||
| static DeleteUser(id) { | |||||
| MinecraftPayAPI.DeleteUser({ params: { id } }).then(r => { | |||||
| if (r.Success) { | |||||
| this.Users.splice(this.Users.findIndex(o => o.ID === id), 1); | |||||
| } | |||||
| Toasts.Messaged(r.Message, Toast.Load({ Type: r.Success ? 'success' : 'danger' })); | |||||
| }); | |||||
| } | |||||
| } | } | ||||
| MinecraftPayService.INSTANCE = new MinecraftPayService(); | MinecraftPayService.INSTANCE = new MinecraftPayService(); | ||||
| MinecraftPayService.Servers = []; | MinecraftPayService.Servers = []; | ||||
| MinecraftPayService.Users = []; | |||||
| MinecraftPayService.UserAccounts = []; |
| class MinecraftPayService { | class MinecraftPayService { | ||||
| public static INSTANCE: MinecraftPayService = new MinecraftPayService(); | public static INSTANCE: MinecraftPayService = new MinecraftPayService(); | ||||
| public static Servers: MinecraftServer[] = []; | public static Servers: MinecraftServer[] = []; | ||||
| public static Users: MinecraftUser[] = []; | |||||
| public static UserAccounts: MinecraftUserAccount[] = []; | |||||
| private constructor() { | private constructor() { | ||||
| LoadQueue.Start( () => { | LoadQueue.Start( () => { | ||||
| MinecraftPayAPI.GetAllServers().then( s => MinecraftPayService.Servers = s || [] ); | MinecraftPayAPI.GetAllServers().then( s => MinecraftPayService.Servers = s || [] ); | ||||
| MinecraftPayAPI.GetAllUsers().then( u => MinecraftPayService.Users = u || [] ); | |||||
| MinecraftPayAPI.GetAllCharges().then( mua => MinecraftPayService.UserAccounts = mua || [] ); | |||||
| } ); | |||||
| } | |||||
| public static RefreshCharges() { | |||||
| LoadQueue.Start( () => { | |||||
| MinecraftPayAPI.GetAllCharges().then( mua => MinecraftPayService.UserAccounts = mua || [] ); | |||||
| } ); | } ); | ||||
| } | } | ||||
| public static CreateServer( server: MinecraftServer ) { | public static CreateServer( server: MinecraftServer ) { | ||||
| MinecraftPayAPI.AddMinecraftServer( { post: { server } } ).then( r => { | |||||
| console.warn( r ); | |||||
| MinecraftPayAPI.AddServer( { post: { server } } ).then( r => { | |||||
| if ( r.Success ) { | if ( r.Success ) { | ||||
| this.Servers.push( r.Obj ); | this.Servers.push( r.Obj ); | ||||
| } | } | ||||
| Toasts.Messaged( r.Message, Toast.Load( { Type: r.Success ? 'success' : 'danger' } ) ); | Toasts.Messaged( r.Message, Toast.Load( { Type: r.Success ? 'success' : 'danger' } ) ); | ||||
| } ); | } ); | ||||
| } | } | ||||
| public static CreateUser( user: MinecraftUser ) { | |||||
| MinecraftPayAPI.AddUser( { post: { user } } ).then( r => { | |||||
| if ( r.Success ) { | |||||
| this.Users.push( r.Obj ); | |||||
| } | |||||
| Toasts.Messaged( r.Message, Toast.Load( { Type: r.Success ? 'success' : 'danger' } ) ); | |||||
| } ); | |||||
| } | |||||
| // public static UpdateUser( id: number, user: MinecraftUser ) { | |||||
| // MinecraftPayAPI.UpdateUser( { post: { user }, params: { id } } ).then( r => { | |||||
| // if ( r.Success ) { | |||||
| // this.Users[ this.Users.findIndex( o => o.ID === r.Obj.ID ) ] = r.Obj; | |||||
| // } | |||||
| // Toasts.Messaged( r.Message, Toast.Load( { Type: r.Success ? 'success' : 'danger' } ) ); | |||||
| // } ); | |||||
| // } | |||||
| public static DeleteUser( id: number ) { | |||||
| MinecraftPayAPI.DeleteUser( { params: { id } } ).then( r => { | |||||
| if ( r.Success ) { | |||||
| this.Users.splice( this.Users.findIndex( o => o.ID === id ), 1 ); | |||||
| } | |||||
| Toasts.Messaged( r.Message, Toast.Load( { Type: r.Success ? 'success' : 'danger' } ) ); | |||||
| } ); | |||||
| } | |||||
| } | } |
| <meta log-in permission="Minecraft-Possess-User" /> | |||||
| <div dyn-if="isset( $save_message )"> | |||||
| <div dyn-type="alert" eval-value="$save_message" eval-type="$save_success ? ALERT_SUCCESS : ALERT_DANGER"></div> | |||||
| </div> | |||||
| <table class="table"> | |||||
| <thead> | |||||
| <tr> | |||||
| <th eval-innerText="__( [ 'de' => 'Datum', 'en' => 'Date' ] )"></th> | |||||
| <th style="width: 100%;" eval-innerText="__( [ 'de' => 'Kommentar', 'en' => 'Comment' ] )"></th> | |||||
| <th eval-innerText="__( [ 'de' => 'Menge', 'en' => 'Amount' ] )"></th> | |||||
| </tr> | |||||
| </thead> | |||||
| <tbody> | |||||
| <tr dyn-for="[ 'credit', 'MinecraftUserAccount::GetAll( [ \'DebtorID\' => User::CURRENT()->ID ] )' ]"> | |||||
| <td eval-innerText="$credit->GetOccurence()"></td> | |||||
| <td eval-innerText="$credit->GetComment()"></td> | |||||
| <td style="text-align: right;" eval-innerText="$credit->GetMod() . ' €'"></td> | |||||
| </tr> | |||||
| </tbody> | |||||
| </table> |
| <meta log-in permission="Minecraft-Pay-Settings" /> | |||||
| <div dyn-if="isset( $save_message )"> | |||||
| <div dyn-type="alert" eval-value="$save_message" eval-type="$save_success ? ALERT_SUCCESS : ALERT_DANGER"></div> | |||||
| </div> | |||||
| <form method="POST"> | |||||
| <table> | |||||
| <thead> | |||||
| <tr> | |||||
| <th innerText="Minecraft Payment" colspan="2"></th> | |||||
| </tr> | |||||
| </thead> | |||||
| <tbody> | |||||
| <tr> | |||||
| <th eval-innerText="__([ 'de' => 'Benutzer', 'en' => 'User' ])"></th> | |||||
| <td> | |||||
| <select name="DebtorID"> | |||||
| <div dyn-for="[ 'user', 'User::GetAll()' ]"><option eval-value="$user->GetID()" eval-innerText="$user->GetUsername()"></option></div> | |||||
| </select> | |||||
| </td> | |||||
| </tr> | |||||
| <tr> | |||||
| <th eval-innerText="__([ 'de' => 'Menge', 'en' => 'Amount' ])"></th> | |||||
| <td> | |||||
| <input type="number" step="0.01" name="Mod" value="0.00" /> | |||||
| </td> | |||||
| </tr> | |||||
| <tr> | |||||
| <th eval-innerText="__([ 'de' => 'Kommentar', 'en' => 'Comment' ])"></th> | |||||
| <td> | |||||
| <input type="string" name="Comment" /> | |||||
| </td> | |||||
| </tr> | |||||
| <tr> | |||||
| <td colspan="2"> | |||||
| <input type="submit" name="AddAccountChange" eval-value="__([ 'de' => 'Gutschreiben', 'en' => 'Credit' ])" /> | |||||
| </td> | |||||
| </tr> | |||||
| </tbody> | |||||
| </table> | |||||
| </form> |
| <meta log-in permission="Minecraft-Pay-Settings" /> | |||||
| <div dyn-if="isset( $save_message )"> | |||||
| <div dyn-type="alert" eval-value="$save_message" eval-type="$save_success ? ALERT_SUCCESS : ALERT_DANGER"></div> | |||||
| </div> | |||||
| <form method="POST"> | |||||
| <table> | |||||
| <thead> | |||||
| <tr> | |||||
| <th innerText="Minecraft Payment" colspan="2"></th> | |||||
| </tr> | |||||
| </thead> | |||||
| <tbody> | |||||
| <tr> | |||||
| <th eval-innerText="__([ 'de' => 'Benutzer', 'en' => 'User' ])"></th> | |||||
| <td> | |||||
| <select name="ID"> | |||||
| <div dyn-for="[ 'user', 'User::GetAll()' ]"><option eval-value="$user->GetID()" eval-innerText="$user->GetUsername()"></option></div> | |||||
| </select> | |||||
| </td> | |||||
| </tr> | |||||
| <tr> | |||||
| <td colspan="2"> | |||||
| <input type="submit" name="GrantUserRights" eval-value="__([ 'de' => 'Als Minecraft Nutzer eintragte', 'en' => 'Enter as Minecraft User' ])" /> | |||||
| </td> | |||||
| </tr> | |||||
| </tbody> | |||||
| </table> | |||||
| </form> |
| <meta log-in permission="Minecraft-Possess-User" /> | |||||
| <div dyn-if="isset( $save_message )"> | |||||
| <div dyn-type="alert" eval-value="$save_message" eval-type="$save_success ? ALERT_SUCCESS : ALERT_DANGER"></div> | |||||
| </div> | |||||
| <form method="POST"> | |||||
| <table class="table"> | |||||
| <thead> | |||||
| <tr> | |||||
| <th eval-innerText="$user->GetUsername()" colspan="2"></th> | |||||
| </tr> | |||||
| </thead> | |||||
| <tbody> | |||||
| <tr> | |||||
| <th colspan="2" eval-innerText="__([ 'de' => 'Server', 'en' => 'Server' ])"></th> | |||||
| </tr> | |||||
| <tr> | |||||
| <td colspan="2"> | |||||
| <table class="table"> | |||||
| <tbody> | |||||
| <tr dyn-for="[ 'server', 'MinecraftServer::GetAll()' ]"> | |||||
| <td style="vertical-align: middle; width: 100%" dyn-set="[ 'isUnlocked' => '$server->IsUnlocked( $user )' ]" eval-innerText="$server->GetName()"></td> | |||||
| <td> | |||||
| <form method="POST"> | |||||
| <input type="hidden" name="ID" eval-value="$server->GetID()" /> | |||||
| <input type="submit" dyn-if="!$isUnlocked" eval-name="( isset( $_POST[ 'UnlockUser' ] ) && $_POST[ 'ID' ] == $server->GetID() ) ? 'RUnlockUser' : 'UnlockUser'" | |||||
| eval-style="( isset( $_POST[ 'UnlockUser' ] ) && $_POST[ 'ID' ] == $server->GetID() ) ? 'background-color: red' : ''" | |||||
| eval-value="__( [ 'de' => 'Freischalten', 'en' => 'Unlock' ] ) . ' ~' . $server->GetPerMonthPrice() . ' €'" /> | |||||
| </form> | |||||
| </td> | |||||
| <td><img style="height: 1em; filter: invert( 1 ); vertical-align: middle;" eval-src="HOME_URL . 'imgs/' . MinecraftPaymentPlugin::get_plugin_name() . '/' . ($isUnlocked ? 'unlock.svg' : 'lock.svg')" /></td> | |||||
| </tr> | |||||
| </tbody> | |||||
| </table> | |||||
| </td> | |||||
| </tr> | |||||
| </tbody> | |||||
| </table> | |||||
| </form> |
| <meta log-in permission="Minecraft-Possess-User" /> | |||||
| <div dyn-if="isset( $save_message )"> | |||||
| <div dyn-type="alert" eval-value="$save_message" eval-type="$save_success ? ALERT_SUCCESS : ALERT_DANGER"></div> | |||||
| </div> | |||||
| <form method="POST"> | |||||
| <table class="table"> | |||||
| <tbody> | |||||
| <tr> | |||||
| <td><input type="text" name="Username" eval-placeholder="__( [ 'de' => 'Benutzername', 'en' => 'Username' ] )" /></td> | |||||
| <td><input type="submit" name="CreateMinecraftUser" eval-value="__( [ 'de' => 'Minecraft Benutzer hinzufügen', 'en' => 'Add Minecraft User' ] )" /></td> | |||||
| </tr> | |||||
| </tbody> | |||||
| </table> | |||||
| </form> | |||||
| <hr /> | |||||
| <table class="table"> | |||||
| <thead> | |||||
| <tr> | |||||
| <th style="width: 100%;">Name</th> | |||||
| <th colspan="2"></th> | |||||
| </tr> | |||||
| </thead> | |||||
| <tbody> | |||||
| <tr dyn-for="[ 'user', 'MinecraftUser::GetAll( [ \'OwnerID\' => User::CURRENT()->GetID() ] )' ]"> | |||||
| <td eval-innerText="$user->GetUsername()"></td> | |||||
| <td> | |||||
| <a style="cursor: pointer;" eval-href="HOME_URL . 'minecraft-pay/users/' . $user->GetID()"> | |||||
| <input style="cursor: pointer;" type="button" eval-value="__( [ 'de' => 'Bearbeiten', 'en' => 'Edit' ] )" /> | |||||
| </a> | |||||
| </td> | |||||
| <td> | |||||
| <form method="POST"> | |||||
| <input type="hidden" name="ID" eval-value="$user->GetID()" /> | |||||
| <input type="submit" name="DeleteMinecraftUser" eval-value="__( [ 'de' => 'Löschen', 'en' => 'Delete' ] )" /> | |||||
| </form> | |||||
| <a eval-href=""> | |||||
| </a> | |||||
| </td> | |||||
| </tr> | |||||
| </tbody> | |||||
| </table> |