toArray(); } /** * @API-Callback * @Path servers/:id * @Require-Login * @Require-Permission Minecraft-Pay-Settings * * @Request-Method PATCH * * @Parameterized * * @param MinecraftServer $server 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 AddServer( 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 ); } /** * @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 > * @noinspection PhpDocSignatureInspection * @noinspection PhpUndefinedClassInspection */ 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; } }