removed php-only settings_view and server_settings_view inccluding template and route registered MinecraftPayAPI registered Settings and SettingsList including route added CRUD for MinecraftServer implemented Settings and SettingsList component for managing Server-entries including templates added some german translations added MinecraftPayService for buffering datapull/1/head
| @@ -1,7 +1,7 @@ | |||
| <?php | |||
| class MinecraftPaymentPlugin extends Plugin { | |||
| public static function get_plugin_name(): string { | |||
| return 'Minecraft Payment'; | |||
| return 'Minecraft-Payment'; | |||
| } | |||
| public function __construct( $_DB ) { | |||
| @@ -15,10 +15,6 @@ class MinecraftPaymentPlugin extends Plugin { | |||
| public function get_page_path() { | |||
| return [ | |||
| '/minecraft-pay/' => [ | |||
| 'settings' => [ | |||
| null => 'settings_view', | |||
| '/*' => 'server_settings_view' | |||
| ], | |||
| 'users' => [ | |||
| null => 'users_view', | |||
| '/*' => 'user_view' | |||
| @@ -29,8 +25,17 @@ class MinecraftPaymentPlugin extends Plugin { | |||
| '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 pre_load_plugin(): void { | |||
| $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->require_class( 'MinecraftPayAPI' ); | |||
| API::REGISTER_CLASS( new MinecraftPayAPI(), 3, 'minecraft-pay/' ); | |||
| } | |||
| public function grant_view( string $url ) { | |||
| if ( !Permission::PERMITTED( 'Minecraft-Pay-Settings', 1 ) ) return; | |||
| @@ -257,84 +262,6 @@ class MinecraftPaymentPlugin extends Plugin { | |||
| $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( [], [] ); | |||
| @@ -0,0 +1,103 @@ | |||
| <?php | |||
| class MinecraftPayAPI { | |||
| /** | |||
| * @API-Callback | |||
| * @Path servers | |||
| * | |||
| * @Request-Method GET | |||
| * | |||
| * @return MinecraftServer[] | |||
| */ | |||
| public function GetAllServers() { | |||
| return MinecraftServer::GetAll()->toArray(); | |||
| } | |||
| /** | |||
| * @API-Callback | |||
| * @Path servers/:id | |||
| * @Require-Login | |||
| * @Require-Permission Minecraft-Pay-Settings | |||
| * | |||
| * @Request-Method PATCH | |||
| * | |||
| * @Parameterized | |||
| * | |||
| * @param MinecraftServer $seerver server to edit | |||
| * | |||
| * @paramget id path id required int | |||
| * @paramget server post server required MinecraftServer | |||
| * | |||
| * @return APIResult< MinecraftServer > | |||
| */ | |||
| public static function UpdateServer( int $id, MinecraftServer $server ) { | |||
| $o = MinecraftServer::GetByID( $id ); | |||
| if ( $o == null ) { | |||
| $results[] = new APIResult( 'Missing ID', false, $server ); | |||
| } | |||
| if ( $server->GetName() != null ) $o->SetName( $server->GetName() ); | |||
| if ( $server->GetDomain() != null ) $o->SetDomain( $server->GetDomain() ); | |||
| if ( $server->GetPort() != null ) $o->SetPort( $server->GetPort() ); | |||
| if ( $server->GetPassword() != null ) $o->SetPassword( $server->GetPassword() ); | |||
| if ( $server->GetServerPath() != null ) $o->SetServerPath( $server->GetServerPath() ); | |||
| if ( $server->GetPerMonthPrice() != null ) $o->SetPerMonthPrice( $server->GetPerMonthPrice() ); | |||
| if ( $server->GetMaxPerMonthPrice() != null ) $o->SetMaxPerMonthPrice( $server->GetMaxPerMonthPrice() ); | |||
| $r = $o->Save(); | |||
| return new APIResult( $r ? 'Saved successfully' : 'Saving failed', $r, $r ? $o : MinecraftServer::GetByID( $id ) ); | |||
| } | |||
| /** | |||
| * @API-Callback | |||
| * @Path servers/:id | |||
| * @Require-Login | |||
| * @Require-Permission Minecraft-Pay-Settings | |||
| * | |||
| * @Request-Method DELETE | |||
| * | |||
| * @Parameterized | |||
| * | |||
| * @paramget id path id required int | |||
| * | |||
| * @return APIResult< MinecraftServer > | |||
| */ | |||
| public static function DeleteServer( int $id ) { | |||
| if ( !is_numeric( $id ) ) return new APIResult( 'Invalid ID', false, null ); | |||
| $server = MinecraftServer::GetByID( $id ); | |||
| $result = null; | |||
| if ( !$server ) { | |||
| $result = new APIResult( 'Server does not exist', false, null ); | |||
| } else if ( $server->DELETE() ) { | |||
| $result = new APIResult( 'Deleted server successfully', true, null ); | |||
| } else { | |||
| $result = new APIResult( 'Deleting server failed', false, $server ); | |||
| } | |||
| return $result; | |||
| } | |||
| /** | |||
| * @API-Callback | |||
| * @Path servers | |||
| * @Require-Login | |||
| * @Require-Permission Minecraft-Pay-Settings | |||
| * | |||
| * @Request-Method POST | |||
| * | |||
| * @Parameterized | |||
| * | |||
| * @param MinecraftServer $server to add | |||
| * | |||
| * @paramget server post server required MinecraftServer | |||
| * | |||
| * @return APIResult< MinecraftServer > | |||
| */ | |||
| public static function AddMinecraftServer( MinecraftServer $server ) { | |||
| $o = new MinecraftServer(); | |||
| $o->SetName( $server->GetName() ); | |||
| $s = $o->Save(); | |||
| return new APIResult( $s ? 'Created server successfully' : 'The server could not be created', $s, $s ? $o : null ); | |||
| } | |||
| } | |||
| @@ -1,2 +1,2 @@ | |||
| declare class Account { | |||
| } | |||
| declare class Account { | |||
| } | |||
| @@ -1,2 +1,2 @@ | |||
| class Account { | |||
| } | |||
| class Account { | |||
| } | |||
| @@ -1,2 +1,2 @@ | |||
| declare class AccountList { | |||
| } | |||
| declare class AccountList { | |||
| } | |||
| @@ -1,2 +1,2 @@ | |||
| class AccountList { | |||
| } | |||
| class AccountList { | |||
| } | |||
| @@ -0,0 +1,7 @@ | |||
| declare class Settings { | |||
| private settings; | |||
| onview(vnode: any): void; | |||
| private loadServer; | |||
| constructor(); | |||
| private saveServer; | |||
| } | |||
| @@ -0,0 +1,26 @@ | |||
| // MLQRequire: { "Plugin": "Minecraft-Payment", "Type": "Service", "Name": "MinecraftPayService" } | |||
| class Settings { | |||
| constructor() { | |||
| this.settings = {}; | |||
| } | |||
| onview(vnode) { | |||
| if (typeof (MinecraftServer) !== 'function') | |||
| LoadQueue.Start(() => { }); | |||
| else | |||
| this.loadServer(); | |||
| } | |||
| loadServer() { | |||
| var id = m.route.param('id'); | |||
| if (id.match(/^[0-9]+$/)) | |||
| id = parseInt(id); | |||
| else | |||
| return; | |||
| if (this.settings.ID !== id) { | |||
| this.settings = $.extend(true, new MinecraftServer(), MinecraftPayService.Servers.find(o => o.ID === id)) || this.settings; | |||
| m.redraw(); | |||
| } | |||
| } | |||
| saveServer() { | |||
| MinecraftPayService.UpdateServer(this.settings.ID, this.settings); | |||
| } | |||
| } | |||
| @@ -0,0 +1,28 @@ | |||
| // MLQRequire: { "Plugin": "Minecraft-Payment", "Type": "Service", "Name": "MinecraftPayService" } | |||
| class Settings { | |||
| private settings: MinecraftServer = {} as MinecraftServer; | |||
| public onview( vnode ) | |||
| { | |||
| if ( typeof( MinecraftServer ) !== 'function' ) LoadQueue.Start( () => {} ) | |||
| else this.loadServer(); | |||
| } | |||
| private loadServer() { | |||
| var id: string | number = m.route.param( 'id' ); | |||
| if ( id.match( /^[0-9]+$/ ) ) id = parseInt( id ); | |||
| else return; | |||
| if ( this.settings.ID !== id ) { | |||
| this.settings = $.extend( true, new MinecraftServer(), MinecraftPayService.Servers.find( o => o.ID === id ) ) || this.settings; | |||
| m.redraw(); | |||
| } | |||
| } | |||
| public constructor() { | |||
| } | |||
| private saveServer() { | |||
| MinecraftPayService.UpdateServer( this.settings.ID, this.settings ); | |||
| } | |||
| } | |||
| @@ -0,0 +1,53 @@ | |||
| <form m-form="this.saveServer" m-if="m.route.param( 'id' ).match( /^([0-9]+|me)$/ )"> | |||
| <table class="table table-striped table-hover"> | |||
| <thead> | |||
| <tr class="table-primary"> | |||
| <th dval-innerText="'Minecraft Payment Server ' + __( 'Settings' )" colspan="2"></th> | |||
| </tr> | |||
| </thead> | |||
| <tbody> | |||
| <tr> | |||
| <th class="align-middle" dval-innerText="__( 'Domain' )"></th> | |||
| <td> | |||
| <input class="form-control" type="text" name="Domain" m-value="this.settings.Domain" /> | |||
| </td> | |||
| </tr> | |||
| <tr> | |||
| <th class="align-middle" dval-innerText="__( 'Port' )"></th> | |||
| <td> | |||
| <input class="form-control" type="number" name="Port" m-value="this.settings.Port" /> | |||
| </td> | |||
| </tr> | |||
| <tr> | |||
| <th class="align-middle" dval-innerText="__( 'Password' )"></th> | |||
| <td> | |||
| <input autocomplete="password" class="form-control" type="password" name="Password" m-value="this.settings.Password" /> | |||
| </td> | |||
| </tr> | |||
| <tr> | |||
| <th class="align-middle" dval-innerText="__( 'Server-Path' )"></th> | |||
| <td> | |||
| <input class="form-control" type="text" name="ServerPath" m-value="this.settings.ServerPath" /> | |||
| </td> | |||
| </tr> | |||
| <tr> | |||
| <th class="align-middle" dval-innerText="__( 'Price/Month' )"></th> | |||
| <td> | |||
| <input class="form-control" type="number" name="PerMonthPrice" m-value="this.settings.PerMonthPrice" /> | |||
| </td> | |||
| </tr> | |||
| <tr> | |||
| <th class="align-middle" dval-innerText="__( 'Price/Month (Limit)' )"></th> | |||
| <td> | |||
| <input class="form-control" type="number" name="MaxPerMonthPrice" m-value="this.settings.MaxPerMonthPrice" /> | |||
| </td> | |||
| </tr> | |||
| <tr> | |||
| <td colspan="2"> | |||
| <input class="btn btn-primary w-100" type="submit" name="SaveServerSettings" m-value="__( 'Save' )" /> | |||
| </td> | |||
| </tr> | |||
| </tbody> | |||
| </table> | |||
| </form> | |||
| <h3 m-if="!m.route.param( 'id' ).match( /^([0-9]+|me)$/ )" dval-innerText="__( 'Invalid ID given' )"></h3> | |||
| @@ -0,0 +1,5 @@ | |||
| declare class SettingsList { | |||
| private serverName; | |||
| private addServer; | |||
| private deleteServer; | |||
| } | |||
| @@ -0,0 +1,11 @@ | |||
| // MLQRequire: { "Plugin": "Minecraft-Payment", "Type": "Service", "Name": "MinecraftPayService" } | |||
| class SettingsList { | |||
| addServer() { | |||
| MinecraftPayService.CreateServer({ Name: this.serverName }); | |||
| } | |||
| deleteServer(id, confirm, event) { | |||
| if (confirm) { | |||
| MinecraftPayService.DeleteServer(id); | |||
| } | |||
| } | |||
| } | |||
| @@ -0,0 +1,15 @@ | |||
| // MLQRequire: { "Plugin": "Minecraft-Payment", "Type": "Service", "Name": "MinecraftPayService" } | |||
| class SettingsList { | |||
| private serverName: string; | |||
| private addServer() { | |||
| MinecraftPayService.CreateServer( { Name: this.serverName } as MinecraftServer ); | |||
| } | |||
| private deleteServer( id: number, confirm: boolean, event: any ) { | |||
| if ( confirm ) { | |||
| MinecraftPayService.DeleteServer( id ); | |||
| } | |||
| } | |||
| } | |||
| @@ -0,0 +1,31 @@ | |||
| <meta log-in permission="Minecraft-Pay-Settings" /> | |||
| <form m-form="this.addServer"> | |||
| <table class="table table-hover table-striped"> | |||
| <tbody> | |||
| <tr> | |||
| <td><input class="form-control" type="text" name="Name" m-value="this.serverName" /></td> | |||
| <td><input class="form-control btn-info" type="submit" name="CreateServer" dval-value="__( 'Create server' )" /></td> | |||
| </tr> | |||
| </tbody> | |||
| </table> | |||
| </form> | |||
| <hr /> | |||
| <table class="table table-hover table-striped"> | |||
| <thead> | |||
| <tr class="table-primary"> | |||
| <th style="width: 100%;">Name</th> | |||
| <th colspan="2"></th> | |||
| </tr> | |||
| </thead> | |||
| <tbody> | |||
| <tr m-for="MinecraftPayService.Servers as server"> | |||
| <td dval-innerText="server.Name"></td> | |||
| <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> | |||
| </td> | |||
| <td class="align-middle"> | |||
| <a class="action_href btn btn-outline-primary float-right" dval-m-href="'/minecraft-pay/settings/' + server.ID">>></a> | |||
| </td> | |||
| </tr> | |||
| </tbody> | |||
| </table> | |||
| @@ -0,0 +1,16 @@ | |||
| { | |||
| "Minecraft Users": "Minecraft Benutzer", | |||
| "Credit": "Gutschrift", | |||
| "Transactions": "Transaktionen", | |||
| "Grant right": "Recht gewähren", | |||
| "Create server": "Server anlegen", | |||
| "Domain": "Domäne", | |||
| "Server-Path": "Server-Pfad", | |||
| "Price/Month": "Preis/Monat", | |||
| "Price/Month (Limit)": "Preis/Monat (Limit)", | |||
| "Settings": "Einstellungen", | |||
| "Delete server": "Server löschen", | |||
| "Do you really want to delete this server?": "Willst du diesen Server wirklich löschen?", | |||
| "Yes": "Ja", | |||
| "No": "Nein" | |||
| } | |||
| @@ -0,0 +1,9 @@ | |||
| /// <reference types="assets/plugins/mithril/mithril/generated/apirequestimports" /> | |||
| declare class MinecraftPayService { | |||
| static INSTANCE: MinecraftPayService; | |||
| static Servers: MinecraftServer[]; | |||
| private constructor(); | |||
| static CreateServer(server: MinecraftServer): void; | |||
| static UpdateServer(id: number, server: MinecraftServer): void; | |||
| static DeleteServer(id: number): void; | |||
| } | |||
| @@ -0,0 +1,37 @@ | |||
| /// <reference path="../../../../assets/plugins/mithril/mithril/generated/APIRequestImports.d.ts" /> | |||
| // MLQRequire: { "Type": "API", "Name": "MinecraftPayAPI" } | |||
| // MLQRequire: { "Plugin": "Mithril", "Type": "Component", "Name": "Toasts" } | |||
| class MinecraftPayService { | |||
| constructor() { | |||
| LoadQueue.Start(() => { | |||
| MinecraftPayAPI.GetAllServers().then(s => MinecraftPayService.Servers = s || []); | |||
| }); | |||
| } | |||
| static CreateServer(server) { | |||
| MinecraftPayAPI.AddMinecraftServer({ post: { server } }).then(r => { | |||
| console.warn(r); | |||
| if (r.Success) { | |||
| this.Servers.push(r.Obj); | |||
| } | |||
| Toasts.Messaged(r.Message, Toast.Load({ Type: r.Success ? 'success' : 'danger' })); | |||
| }); | |||
| } | |||
| static UpdateServer(id, server) { | |||
| MinecraftPayAPI.UpdateServer({ post: { server }, params: { id } }).then(r => { | |||
| if (r.Success) { | |||
| this.Servers[this.Servers.findIndex(o => o.ID === r.Obj.ID)] = r.Obj; | |||
| } | |||
| Toasts.Messaged(r.Message, Toast.Load({ Type: r.Success ? 'success' : 'danger' })); | |||
| }); | |||
| } | |||
| static DeleteServer(id) { | |||
| MinecraftPayAPI.DeleteServer({ params: { id } }).then(r => { | |||
| if (r.Success) { | |||
| this.Servers.splice(this.Servers.findIndex(o => o.ID === id), 1); | |||
| } | |||
| Toasts.Messaged(r.Message, Toast.Load({ Type: r.Success ? 'success' : 'danger' })); | |||
| }); | |||
| } | |||
| } | |||
| MinecraftPayService.INSTANCE = new MinecraftPayService(); | |||
| MinecraftPayService.Servers = []; | |||
| @@ -0,0 +1,42 @@ | |||
| /// <reference path="../../../../assets/plugins/mithril/mithril/generated/APIRequestImports.d.ts" /> | |||
| // MLQRequire: { "Type": "API", "Name": "MinecraftPayAPI" } | |||
| // MLQRequire: { "Plugin": "Mithril", "Type": "Component", "Name": "Toasts" } | |||
| class MinecraftPayService { | |||
| public static INSTANCE: MinecraftPayService = new MinecraftPayService(); | |||
| public static Servers: MinecraftServer[] = []; | |||
| private constructor() { | |||
| LoadQueue.Start( () => { | |||
| MinecraftPayAPI.GetAllServers().then( s => MinecraftPayService.Servers = s || [] ); | |||
| } ); | |||
| } | |||
| public static CreateServer( server: MinecraftServer ) { | |||
| MinecraftPayAPI.AddMinecraftServer( { post: { server } } ).then( r => { | |||
| console.warn( r ); | |||
| if ( r.Success ) { | |||
| this.Servers.push( r.Obj ); | |||
| } | |||
| Toasts.Messaged( r.Message, Toast.Load( { Type: r.Success ? 'success' : 'danger' } ) ); | |||
| } ); | |||
| } | |||
| public static UpdateServer( id: number, server: MinecraftServer ) { | |||
| MinecraftPayAPI.UpdateServer( { post: { server }, params: { id } } ).then( r => { | |||
| if ( r.Success ) { | |||
| this.Servers[ this.Servers.findIndex( o => o.ID === r.Obj.ID ) ] = r.Obj; | |||
| } | |||
| Toasts.Messaged( r.Message, Toast.Load( { Type: r.Success ? 'success' : 'danger' } ) ); | |||
| } ); | |||
| } | |||
| public static DeleteServer( id: number ) { | |||
| MinecraftPayAPI.DeleteServer( { params: { id } } ).then( r => { | |||
| if ( r.Success ) { | |||
| this.Servers.splice( this.Servers.findIndex( o => o.ID === id ), 1 ); | |||
| } | |||
| Toasts.Messaged( r.Message, Toast.Load( { Type: r.Success ? 'success' : 'danger' } ) ); | |||
| } ); | |||
| } | |||
| } | |||
| @@ -1,56 +0,0 @@ | |||
| <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 eval-innerText="'Minecraft Payment ' . __([ 'de' => 'Einstellungen', 'en' => 'Settings' ])" colspan="2"></th> | |||
| </tr> | |||
| </thead> | |||
| <tbody> | |||
| <tr> | |||
| <th eval-innerText="__([ 'de' => 'Domäne', 'en' => 'Domain' ])"></th> | |||
| <td> | |||
| <input type="text" name="Domain" eval-value="$settings->GetDomain()" /> | |||
| </td> | |||
| </tr> | |||
| <tr> | |||
| <th eval-innerText="__([ 'de' => 'Port', 'en' => 'Port' ])"></th> | |||
| <td> | |||
| <input type="number" name="Port" eval-value="$settings->GetPort()" /> | |||
| </td> | |||
| </tr> | |||
| <tr> | |||
| <th eval-innerText="__([ 'de' => 'Passwort', 'en' => 'Password' ])"></th> | |||
| <td> | |||
| <input type="password" name="Password" eval-value="$settings->GetPassword()" /> | |||
| </td> | |||
| </tr> | |||
| <tr> | |||
| <th eval-innerText="__([ 'de' => 'Server-Pfad', 'en' => 'Server-Path' ])"></th> | |||
| <td> | |||
| <input type="text" name="ServerPath" eval-value="$settings->GetServerPath()" /> | |||
| </td> | |||
| </tr> | |||
| <tr> | |||
| <th eval-innerText="__([ 'de' => 'Preis/Monat', 'en' => 'Price/Month' ])"></th> | |||
| <td> | |||
| <input type="number" name="PerMonthPrice" eval-value="$settings->GetPerMonthPrice()" /> | |||
| </td> | |||
| </tr> | |||
| <tr> | |||
| <th eval-innerText="__([ 'de' => 'Preis/Monat (Limit)', 'en' => 'Price/Month (Limit)' ])"></th> | |||
| <td> | |||
| <input type="number" name="MaxPerMonthPrice" eval-value="$settings->GetMaxPerMonthPrice()" /> | |||
| </td> | |||
| </tr> | |||
| <tr> | |||
| <td colspan="2"> | |||
| <input type="submit" name="SaveServerSettings" eval-value="__([ 'de' => 'Speichern', 'en' => 'Save' ])" /> | |||
| </td> | |||
| </tr> | |||
| </tbody> | |||
| </table> | |||
| </form> | |||
| @@ -1,42 +0,0 @@ | |||
| <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 class="table"> | |||
| <tbody> | |||
| <tr> | |||
| <td><input type="text" name="Name" /></td> | |||
| <td><input type="submit" name="CreateServer" eval-value="__( [ 'de' => 'Server anlegen', 'en' => 'Create server' ] )" /></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="[ 'server', 'MinecraftServer::GetAll()' ]"> | |||
| <td eval-innerText="$server->GetName()"></td> | |||
| <td> | |||
| <a style="cursor: pointer;" eval-href="HOME_URL . 'minecraft-pay/settings/' . $server->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="$server->GetID()" /> | |||
| <input type="submit" name="DeleteServer" eval-value="__( [ 'de' => 'Löschen', 'en' => 'Delete' ] )" /> | |||
| </form> | |||
| <a eval-href=""> | |||
| </a> | |||
| </td> | |||
| </tr> | |||
| </tbody> | |||
| </table> | |||