mirror of
				https://github.com/pelican-dev/panel.git
				synced 2025-10-31 06:56:52 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			206 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			206 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| @extends('layouts.admin')
 | |
| 
 | |
| @section('title')
 | |
|     Eggs → Egg: {{ $egg->name }}
 | |
| @endsection
 | |
| 
 | |
| @section('content-header')
 | |
|     <h1>{{ $egg->name }}<small>{{ str_limit($egg->description, 50) }}</small></h1>
 | |
|     <ol class="breadcrumb">
 | |
|         <li><a href="{{ route('admin.index') }}">Admin</a></li>
 | |
|         <li><a href="{{ route('admin.eggs') }}">Eggs</a></li>
 | |
|         <li class="active">{{ $egg->name }}</li>
 | |
|     </ol>
 | |
| @endsection
 | |
| 
 | |
| @section('content')
 | |
| <div class="row">
 | |
|     <div class="col-xs-12">
 | |
|         <div class="nav-tabs-custom nav-tabs-floating">
 | |
|             <ul class="nav nav-tabs">
 | |
|                 <li class="active"><a href="{{ route('admin.eggs.view', $egg->id) }}">Configuration</a></li>
 | |
|                 <li><a href="{{ route('admin.eggs.variables', $egg->id) }}">Variables</a></li>
 | |
|                 <li><a href="{{ route('admin.eggs.scripts', $egg->id) }}">Install Script</a></li>
 | |
|             </ul>
 | |
|         </div>
 | |
|     </div>
 | |
| </div>
 | |
| <form action="{{ route('admin.eggs.view', $egg->id) }}" enctype="multipart/form-data" method="POST">
 | |
|     <div class="row">
 | |
|         <div class="col-xs-12">
 | |
|             <div class="box box-danger">
 | |
|                 <div class="box-body">
 | |
|                     <div class="row">
 | |
|                         <div class="col-xs-8">
 | |
|                             <div class="form-group no-margin-bottom">
 | |
|                                 <label for="pName" class="control-label">Egg File</label>
 | |
|                                 <div>
 | |
|                                     <input type="file" name="import_file" class="form-control" style="border: 0;margin-left:-10px;" />
 | |
|                                     <p class="text-muted small no-margin-bottom">If you would like to replace settings for this Egg by uploading a new JSON file, simply select it here and press "Update Egg". This will not change any existing startup strings or Docker images for existing servers.</p>
 | |
|                                 </div>
 | |
|                             </div>
 | |
|                         </div>
 | |
|                         <div class="col-xs-4">
 | |
|                             {!! csrf_field() !!}
 | |
|                             <button type="submit" name="_method" value="PUT" class="btn btn-sm btn-danger pull-right">Update Egg</button>
 | |
|                         </div>
 | |
|                     </div>
 | |
|                 </div>
 | |
|             </div>
 | |
|         </div>
 | |
|     </div>
 | |
| </form>
 | |
| <form action="{{ route('admin.eggs.view', $egg->id) }}" method="POST">
 | |
|     <div class="row">
 | |
|         <div class="col-xs-12">
 | |
|             <div class="box">
 | |
|                 <div class="box-header with-border">
 | |
|                     <h3 class="box-title">Configuration</h3>
 | |
|                 </div>
 | |
|                 <div class="box-body">
 | |
|                     <div class="row">
 | |
|                         <div class="col-sm-6">
 | |
|                             <div class="form-group">
 | |
|                                 <label for="pName" class="control-label">Name <span class="field-required"></span></label>
 | |
|                                 <input type="text" id="pName" name="name" value="{{ $egg->name }}" class="form-control" />
 | |
|                                 <p class="text-muted small">A simple, human-readable name to use as an identifier for this Egg.</p>
 | |
|                             </div>
 | |
|                             <div class="form-group">
 | |
|                                 <label for="pUuid" class="control-label">UUID</label>
 | |
|                                 <input type="text" id="pUuid" readonly value="{{ $egg->uuid }}" class="form-control" />
 | |
|                                 <p class="text-muted small">This is the globally unique identifier for this Egg which the Daemon uses as an identifier.</p>
 | |
|                             </div>
 | |
|                             <div class="form-group">
 | |
|                                 <label for="pAuthor" class="control-label">Author</label>
 | |
|                                 <input type="text" id="pAuthor" readonly value="{{ $egg->author }}" class="form-control" />
 | |
|                                 <p class="text-muted small">The author of this version of the Egg. Uploading a new Egg configuration from a different author will change this.</p>
 | |
|                             </div>
 | |
|                             <div class="form-group">
 | |
|                                 <label for="pDockerImage" class="control-label">Docker Images <span class="field-required"></span></label>
 | |
|                                 <textarea id="pDockerImages" name="docker_images" class="form-control" rows="4">{{ implode(PHP_EOL, $images) }}</textarea>
 | |
|                                 <p class="text-muted small">
 | |
|                                     The docker images available to servers using this egg. Enter one per line. Users
 | |
|                                     will be able to select from this list of images if more than one value is provided.
 | |
|                                     Optionally, a display name may be provided by prefixing the image with the name
 | |
|                                     followed by a pipe character, and then the image URL. Example: <code>Display Name|ghcr.io/my/egg</code>
 | |
|                                 </p>
 | |
|                             </div>
 | |
|                             <div class="form-group">
 | |
|                                 <div class="checkbox checkbox-primary no-margin-bottom">
 | |
|                                     <input id="pForceOutgoingIp" name="force_outgoing_ip" type="checkbox" value="1" @if($egg->force_outgoing_ip) checked @endif />
 | |
|                                     <label for="pForceOutgoingIp" class="strong">Force Outgoing IP</label>
 | |
|                                     <p class="text-muted small">
 | |
|                                         Forces all outgoing network traffic to have its Source IP NATed to the IP of the server's primary allocation IP.
 | |
|                                         Required for certain games to work properly when the Node has multiple public IP addresses.
 | |
|                                         <br>
 | |
|                                         <strong>
 | |
|                                             Enabling this option will disable internal networking for any servers using this egg,
 | |
|                                             causing them to be unable to internally access other servers on the same node.
 | |
|                                         </strong>
 | |
|                                     </p>
 | |
|                                 </div>
 | |
|                             </div>
 | |
| 
 | |
|                         </div>
 | |
|                         <div class="col-sm-6">
 | |
|                             <div class="form-group">
 | |
|                                 <label for="pDescription" class="control-label">Description</label>
 | |
|                                 <textarea id="pDescription" name="description" class="form-control" rows="8">{{ $egg->description }}</textarea>
 | |
|                                 <p class="text-muted small">A description of this Egg that will be displayed throughout the Panel as needed.</p>
 | |
|                             </div>
 | |
|                             <div class="form-group">
 | |
|                                 <label for="pStartup" class="control-label">Startup Command <span class="field-required"></span></label>
 | |
|                                 <textarea id="pStartup" name="startup" class="form-control" rows="8">{{ $egg->startup }}</textarea>
 | |
|                                 <p class="text-muted small">The default startup command that should be used for new servers using this Egg.</p>
 | |
|                             </div>
 | |
|                         </div>
 | |
|                     </div>
 | |
|                 </div>
 | |
|             </div>
 | |
|         </div>
 | |
|         <div class="col-xs-12">
 | |
|             <div class="box">
 | |
|                 <div class="box-header with-border">
 | |
|                     <h3 class="box-title">Process Management</h3>
 | |
|                 </div>
 | |
|                 <div class="box-body">
 | |
|                     <div class="row">
 | |
|                         <div class="col-xs-12">
 | |
|                             <div class="alert alert-warning">
 | |
|                                 <p>The following configuration options should not be edited unless you understand how this system works. If wrongly modified it is possible for the daemon to break.</p>
 | |
|                                 <p>All fields are required unless you select a separate option from the 'Copy Settings From' dropdown, in which case fields may be left blank to use the values from that Egg.</p>
 | |
|                             </div>
 | |
|                         </div>
 | |
|                         <div class="col-sm-6">
 | |
|                             <div class="form-group">
 | |
|                                 <label for="pConfigFrom" class="form-label">Copy Settings From</label>
 | |
|                                 <select name="config_from" id="pConfigFrom" class="form-control">
 | |
|                                     <option value="">None</option>
 | |
|                                     @foreach($egg->newQuery()->get() as $o)
 | |
|                                         <option value="{{ $o->id }}" {{ ($egg->config_from !== $o->id) ?: 'selected' }}>{{ $o->name }} <{{ $o->author }}></option>
 | |
|                                     @endforeach
 | |
|                                 </select>
 | |
|                                 <p class="text-muted small">If you would like to default to settings from another Egg select it from the menu above.</p>
 | |
|                             </div>
 | |
|                             <div class="form-group">
 | |
|                                 <label for="pConfigStop" class="form-label">Stop Command</label>
 | |
|                                 <input type="text" id="pConfigStop" name="config_stop" class="form-control" value="{{ $egg->config_stop }}" />
 | |
|                                 <p class="text-muted small">The command that should be sent to server processes to stop them gracefully. If you need to send a <code>SIGINT</code> you should enter <code>^C</code> here.</p>
 | |
|                             </div>
 | |
|                             <div class="form-group">
 | |
|                                 <label for="pConfigLogs" class="form-label">Log Configuration</label>
 | |
|                                 <textarea data-action="handle-tabs" id="pConfigLogs" name="config_logs" class="form-control" rows="6">{{ ! is_null($egg->config_logs) ? json_encode(json_decode($egg->config_logs), JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) : '' }}</textarea>
 | |
|                                 <p class="text-muted small">This should be a JSON representation of where log files are stored, and whether or not the daemon should be creating custom logs.</p>
 | |
|                             </div>
 | |
|                         </div>
 | |
|                         <div class="col-sm-6">
 | |
|                             <div class="form-group">
 | |
|                                 <label for="pConfigFiles" class="form-label">Configuration Files</label>
 | |
|                                 <textarea data-action="handle-tabs" id="pConfigFiles" name="config_files" class="form-control" rows="6">{{ ! is_null($egg->config_files) ? json_encode(json_decode($egg->config_files), JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) : '' }}</textarea>
 | |
|                                 <p class="text-muted small">This should be a JSON representation of configuration files to modify and what parts should be changed.</p>
 | |
|                             </div>
 | |
|                             <div class="form-group">
 | |
|                                 <label for="pConfigStartup" class="form-label">Start Configuration</label>
 | |
|                                 <textarea data-action="handle-tabs" id="pConfigStartup" name="config_startup" class="form-control" rows="6">{{ ! is_null($egg->config_startup) ? json_encode(json_decode($egg->config_startup), JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) : '' }}</textarea>
 | |
|                                 <p class="text-muted small">This should be a JSON representation of what values the daemon should be looking for when booting a server to determine completion.</p>
 | |
|                             </div>
 | |
|                         </div>
 | |
|                     </div>
 | |
|                 </div>
 | |
|                 <div class="box-footer">
 | |
|                     {!! csrf_field() !!}
 | |
|                     <button type="submit" name="_method" value="PATCH" class="btn btn-primary btn-sm pull-right">Save</button>
 | |
|                     <a href="{{ route('admin.eggs.export', $egg->id) }}" class="btn btn-sm btn-info pull-right" style="margin-right:10px;">Export</a>
 | |
|                     <button id="deleteButton" type="submit" name="_method" value="DELETE" class="btn btn-danger btn-sm muted muted-hover">
 | |
|                         <i class="fa fa-trash-o"></i>
 | |
|                     </button>
 | |
|                 </div>
 | |
|             </div>
 | |
|         </div>
 | |
|     </div>
 | |
| </form>
 | |
| @endsection
 | |
| 
 | |
| @section('footer-scripts')
 | |
|     @parent
 | |
|     <script>
 | |
|     $('#pConfigFrom').select2();
 | |
|     $('#deleteButton').on('mouseenter', function (event) {
 | |
|         $(this).find('i').html(' Delete Egg');
 | |
|     }).on('mouseleave', function (event) {
 | |
|         $(this).find('i').html('');
 | |
|     });
 | |
|     $('textarea[data-action="handle-tabs"]').on('keydown', function(event) {
 | |
|         if (event.keyCode === 9) {
 | |
|             event.preventDefault();
 | |
| 
 | |
|             var curPos = $(this)[0].selectionStart;
 | |
|             var prepend = $(this).val().substr(0, curPos);
 | |
|             var append = $(this).val().substr(curPos);
 | |
| 
 | |
|             $(this).val(prepend + '    ' + append);
 | |
|         }
 | |
|     });
 | |
|     </script>
 | |
| @endsection
 | 
