commit
9de3163af6
|
@ -74,6 +74,8 @@
|
|||
- Update lexer/extractor to handle banned hashtags ([909a8a5a](https://github.com/pixelfed/pixelfed/commit/909a8a5a))
|
||||
- Update FederationController, fix double lock bug ([9fcccca9](https://github.com/pixelfed/pixelfed/commit/9fcccca9))
|
||||
- Update AdminInvite component, fix email regex ([2aea77d3](https://github.com/pixelfed/pixelfed/commit/2aea77d3))
|
||||
- Update database config, use single transaction and skip lock tables for mysql dump ([936f1e7a](https://github.com/pixelfed/pixelfed/commit/936f1e7a))
|
||||
- Update database config, add sticky flag https://laravel.com/docs/9.x/database#the-sticky-option ([10b65980](https://github.com/pixelfed/pixelfed/commit/10b65980))
|
||||
- ([](https://github.com/pixelfed/pixelfed/commit/))
|
||||
|
||||
## [v0.11.4 (2022-10-04)](https://github.com/pixelfed/pixelfed/compare/v0.11.3...v0.11.4)
|
||||
|
|
|
@ -264,6 +264,10 @@ class AdminController extends Controller
|
|||
]);
|
||||
$changed = false;
|
||||
$changedFields = [];
|
||||
$slug = str_slug($request->input('title'));
|
||||
if(Newsroom::whereSlug($slug)->exists()) {
|
||||
$slug = $slug . '-' . str_random(4);
|
||||
}
|
||||
$news = Newsroom::findOrFail($id);
|
||||
$fields = [
|
||||
'title' => 'string',
|
||||
|
@ -281,7 +285,7 @@ class AdminController extends Controller
|
|||
case 'string':
|
||||
if($request->{$field} != $news->{$field}) {
|
||||
if($field == 'title') {
|
||||
$news->slug = str_slug($request->{$field});
|
||||
$news->slug = $slug;
|
||||
}
|
||||
$news->{$field} = $request->{$field};
|
||||
$changed = true;
|
||||
|
@ -327,6 +331,10 @@ class AdminController extends Controller
|
|||
]);
|
||||
$changed = false;
|
||||
$changedFields = [];
|
||||
$slug = str_slug($request->input('title'));
|
||||
if(Newsroom::whereSlug($slug)->exists()) {
|
||||
$slug = $slug . '-' . str_random(4);
|
||||
}
|
||||
$news = new Newsroom();
|
||||
$fields = [
|
||||
'title' => 'string',
|
||||
|
@ -344,7 +352,7 @@ class AdminController extends Controller
|
|||
case 'string':
|
||||
if($request->{$field} != $news->{$field}) {
|
||||
if($field == 'title') {
|
||||
$news->slug = str_slug($request->{$field});
|
||||
$news->slug = $slug;
|
||||
}
|
||||
$news->{$field} = $request->{$field};
|
||||
$changed = true;
|
||||
|
|
|
@ -48,6 +48,7 @@ return [
|
|||
'username' => env('DB_USERNAME', 'forge'),
|
||||
'password' => env('DB_PASSWORD', ''),
|
||||
'unix_socket' => env('DB_SOCKET', ''),
|
||||
'sticky' => true,
|
||||
'charset' => 'utf8mb4',
|
||||
'collation' => 'utf8mb4_unicode_ci',
|
||||
'prefix' => '',
|
||||
|
|
|
@ -1,114 +1,81 @@
|
|||
@extends('admin.partial.template-full')
|
||||
|
||||
@section('section')
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="d-flex justify-content-between align-items-center">
|
||||
</div>
|
||||
<div class="header bg-primary pb-3 mt-n4">
|
||||
<div class="container-fluid">
|
||||
<div class="header-body">
|
||||
<div class="row align-items-center py-4">
|
||||
<div class="col-lg-6 col-7">
|
||||
<p class="display-1 text-white mb-0">Newsroom - Edit</p>
|
||||
<p class="lead text-white my-0">Editing #{{$news->id}}</p>
|
||||
</div>
|
||||
|
||||
<div class="title">
|
||||
<p class="h1 font-weight-bold">Newsroom</p>
|
||||
<p class="lead mb-0">Edit Announcement</p>
|
||||
</div>
|
||||
<div>
|
||||
<a class="btn btn-outline-secondary px-2" style="font-size:13px;" href="{{route('admin.newsroom.home')}}"><i class="fas fa-chevron-left fa-sm text-lighter mr-1"></i> Back to Newsroom </a>
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
</div>
|
||||
<div class="col-md-7 border-right">
|
||||
<div>
|
||||
<form method="post">
|
||||
@csrf
|
||||
<div class="form-group">
|
||||
<label for="title" class="small font-weight-bold text-muted text-uppercase">Title</label>
|
||||
<input type="text" class="form-control" id="title" name="title" value="{{$news->title}}">
|
||||
<p class="help-text mb-0 small font-weight-bold text-lighter">We recommend titles shorter than 80 characters.</p>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="summary" class="small font-weight-bold text-muted text-uppercase">Summary</label>
|
||||
<textarea class="form-control" id="summary" name="summary" rows="3">{{$news->summary}}</textarea>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="body" class="small font-weight-bold text-muted text-uppercase">Body</label>
|
||||
<textarea class="form-control" id="body" name="body" rows="6">{{$news->body}}</textarea>
|
||||
<p class="help-text mb-0 small font-weight-bold text-lighter">Click <a href="#">here</a> to enable the rich text editor.</p>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="category" class="small font-weight-bold text-muted text-uppercase">Category</label>
|
||||
<input type="text" class="form-control" id="category" name="category" value="{{$news->category}}">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="col-md-5">
|
||||
<label class="small font-weight-bold text-muted text-uppercase">Preview</label>
|
||||
<div class="card border shadow-none mb-3">
|
||||
<div class="card-body">
|
||||
<div class="card-title mb-0">
|
||||
<span class="font-weight-bold" id="preview_title">{{$news->title}}</span>
|
||||
<span class="float-right cursor-pointer" title="Close"><i class="fas fa-times text-lighter"></i></span>
|
||||
</div>
|
||||
<p class="card-text">
|
||||
<span style="font-size:13px;" id="preview_summary">{{$news->summary}}</span>
|
||||
</p>
|
||||
<p class="d-flex align-items-center justify-content-between mb-0">
|
||||
<a href="#" class="small font-weight-bold mb-0">Read more</a>
|
||||
<span>
|
||||
<span class="btn btn-outline-secondary btn-sm py-0 disabled">
|
||||
<i class="fas fa-chevron-left fa-sm"></i>
|
||||
</span>
|
||||
<span class="btn btn-outline-success btn-sm py-0 mx-1" title="Mark as Read" data-toggle="tooltip" data-placement="bottom">
|
||||
<i class="fas fa-check fa-sm"></i>
|
||||
</span>
|
||||
<span class="btn btn-outline-secondary btn-sm py-0">
|
||||
<i class="fas fa-chevron-right fa-sm"></i>
|
||||
</span>
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
<p class="mt-3">
|
||||
<button type="submit" class="btn btn-primary btn-block font-weight-bold py-1 px-4">Save</button>
|
||||
</p>
|
||||
<div class="form-group">
|
||||
<div class="custom-control custom-switch">
|
||||
<input type="checkbox" class="custom-control-input" id="published" name="published" {{$news->published_at ? 'checked="checked"' : ''}}>
|
||||
<label class="custom-control-label font-weight-bold text-uppercase text-muted" for="published">Published</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="custom-control custom-switch">
|
||||
<input type="checkbox" class="custom-control-input" id="show_timeline" name="show_timeline" {{$news->show_timeline ? 'checked="checked"' : ''}}>
|
||||
<label class="custom-control-label font-weight-bold text-uppercase text-muted" for="show_timeline">Show On Timelines</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="custom-control custom-switch">
|
||||
<input type="checkbox" class="custom-control-input" id="auth_only" name="auth_only" {{$news->auth_only ? 'checked="checked"' : ''}}>
|
||||
<label class="custom-control-label font-weight-bold text-uppercase text-muted" for="auth_only">Logged in users only</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="custom-control custom-switch">
|
||||
<input type="checkbox" class="custom-control-input" id="show_link" name="show_link" {{$news->show_link ? 'checked="checked"' : ''}}>
|
||||
<label class="custom-control-label font-weight-bold text-uppercase text-muted" for="show_link">Show Read More Link</label>
|
||||
</div>
|
||||
</div>
|
||||
{{-- <div class="form-group">
|
||||
<div class="custom-control custom-switch">
|
||||
<input type="checkbox" class="custom-control-input" id="force_modal" name="force_modal" {{$news->force_modal ? 'checked="checked"' : ''}}>
|
||||
<label class="custom-control-label font-weight-bold text-uppercase text-muted" for="force_modal">Show Modal on timelines</label>
|
||||
</div>
|
||||
</div> --}}
|
||||
<hr>
|
||||
</form>
|
||||
<p class="mt-1 d-flex justify-content-between">
|
||||
<button type="button" class="btn btn-outline-secondary btn-sm font-weight-bold py-1 px-3">Preview</button>
|
||||
<button type="button" class="btn btn-outline-danger btn-sm font-weight-bold py-1 px-3" id="btn-delete">Delete</button>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
<div class="col-lg-6 col-5">
|
||||
<div class="text-right">
|
||||
<button class="btn btn-danger px-4 mr-3 mb-1" style="font-size:13px;" id="btn-delete">Delete</button>
|
||||
@if($news->published_at)
|
||||
<a class="btn btn-dark px-4 mr-3 mb-1" style="font-size:13px;" href="{{$news->permalink()}}">View</a>
|
||||
@endif
|
||||
<button class="btn btn-success px-5 mb-1" style="font-size:13px;" onclick="saveForm()">Save</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container-fluid mt-4">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-6 col-12">
|
||||
<div>
|
||||
<form method="post" id="editForm">
|
||||
@csrf
|
||||
<div class="form-group">
|
||||
<label for="title" class="small font-weight-bold text-muted text-uppercase">Title</label>
|
||||
<input type="text" class="form-control" id="title" name="title" value="{{$news->title}}">
|
||||
<p class="help-text mb-0 small font-weight-bold text-lighter">We recommend titles shorter than 80 characters.</p>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="summary" class="small font-weight-bold text-muted text-uppercase">Summary</label>
|
||||
<textarea class="form-control" id="summary" name="summary" rows="3">{{$news->summary}}</textarea>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="body" class="small font-weight-bold text-muted text-uppercase">Body</label>
|
||||
<textarea class="form-control" id="body" name="body" rows="6">{{$news->body}}</textarea>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="category" class="small font-weight-bold text-muted text-uppercase">Category</label>
|
||||
<input type="text" class="form-control" id="category" name="category" value="{{$news->category}}">
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<div class="custom-control custom-switch ml-5">
|
||||
<input type="checkbox" class="custom-control-input" id="published" name="published" {{$news->published_at ? 'checked="checked"' : ''}}>
|
||||
<label class="custom-control-label font-weight-bold text-uppercase text-muted" for="published">Published</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="custom-control custom-switch ml-5">
|
||||
<input type="checkbox" class="custom-control-input" id="show_timeline" name="show_timeline" {{$news->show_timeline ? 'checked="checked"' : ''}}>
|
||||
<label class="custom-control-label font-weight-bold text-uppercase text-muted" for="show_timeline">Show On Timelines</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="custom-control custom-switch ml-5">
|
||||
<input type="checkbox" class="custom-control-input" id="auth_only" name="auth_only" {{$news->auth_only ? 'checked="checked"' : ''}}>
|
||||
<label class="custom-control-label font-weight-bold text-uppercase text-muted" for="auth_only">Logged in users only</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="custom-control custom-switch ml-5">
|
||||
<input type="checkbox" class="custom-control-input" id="show_link" name="show_link" {{$news->show_link ? 'checked="checked"' : ''}}>
|
||||
<label class="custom-control-label font-weight-bold text-uppercase text-muted" for="show_link">Show Read More Link</label>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<form id="delete-form" method="post">
|
||||
@method('delete')
|
||||
|
@ -118,6 +85,12 @@
|
|||
|
||||
@push('scripts')
|
||||
<script type="text/javascript">
|
||||
function saveForm() {
|
||||
if(!window.confirm('Are you sure you want to save?')) {
|
||||
return;
|
||||
}
|
||||
document.getElementById('editForm').submit();
|
||||
}
|
||||
$('#title').on('change keyup paste',function(e) {
|
||||
let el = $(this);
|
||||
let title = el.val()
|
||||
|
@ -138,4 +111,4 @@
|
|||
})
|
||||
|
||||
</script>
|
||||
@endpush
|
||||
@endpush
|
||||
|
|
|
@ -1,62 +1,89 @@
|
|||
@extends('admin.partial.template-full')
|
||||
|
||||
@section('section')
|
||||
<div class="d-flex justify-content-between align-items-center">
|
||||
|
||||
<div class="title">
|
||||
<p class="h1 font-weight-bold">Newsroom</p>
|
||||
<p class="lead mb-0">Manage News and Platform Tips</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="header bg-primary pb-3 mt-n4">
|
||||
<div class="container-fluid">
|
||||
<div class="header-body">
|
||||
<div class="row align-items-center py-4">
|
||||
<div class="col-lg-6 col-7">
|
||||
<p class="display-1 text-white mb-0">Newsroom</p>
|
||||
<p class="lead text-white my-0">Manage News and Platform Tips</p>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<a class="btn btn-outline-success px-4" style="font-size:13px;" href="{{route('admin.newsroom.create')}}">New Announcement</a>
|
||||
<a class="btn btn-outline-secondary px-2 mr-3" style="font-size:13px;" href="/site/newsroom">View Newsroom <i class="fas fa-chevron-right fa-sm text-lighter ml-1"></i></a>
|
||||
</div>
|
||||
<div class="col-lg-6 col-5">
|
||||
<div class="text-right">
|
||||
<a class="btn btn-danger px-4" style="font-size:13px;" href="{{route('admin.newsroom.create')}}">New Announcement</a>
|
||||
<a class="btn btn-dark px-4 mr-3" style="font-size:13px;" href="/site/newsroom">View Newsroom <i class="fas fa-chevron-right fa-sm text-lighter ml-1"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="my-5 row">
|
||||
<div class="col-md-8 offset-md-2">
|
||||
<div class="card">
|
||||
<div class="card-header bg-light lead font-weight-bold">
|
||||
Announcements
|
||||
</div>
|
||||
@if($newsroom->count() > 0)
|
||||
<ul class="list-group list-group-flush">
|
||||
@foreach($newsroom as $news)
|
||||
<li class="list-group-item d-flex align-items-center justify-content-between">
|
||||
<div>
|
||||
<p class="mb-0 font-weight-bold">{{str_limit($news->title,30)}}</p>
|
||||
<p class="mb-0 small">{{str_limit($news->summary, 40)}}</p>
|
||||
</div>
|
||||
<div>
|
||||
@if($news->published_at != null)
|
||||
<span class="btn btn-success btn-sm px-2 py-0 font-weight-bold mr-3">PUBLISHED</span>
|
||||
@else
|
||||
<span class="btn btn-outline-secondary btn-sm px-2 py-0 font-weight-bold mr-3">DRAFT</span>
|
||||
@endif
|
||||
<a class="btn btn-outline-lighter btn-sm mr-2" title="Edit Post" data-toggle="tooltip" data-placement="bottom" href="{{$news->editUrl()}}">
|
||||
<i class="fas fa-edit"></i>
|
||||
</a>
|
||||
@if($news->published_at)
|
||||
<a class="btn btn-outline-lighter btn-sm" title="View Post" data-toggle="tooltip" data-placement="bottom" href="{{$news->permalink()}}">
|
||||
<i class="fas fa-eye"></i>
|
||||
</a>
|
||||
@endif
|
||||
</div>
|
||||
</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
@else
|
||||
<div class="card-body text-center">
|
||||
<p class="lead mb-0 p-5">No Announcements Found!</p>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
<div class="d-flex justify-content-center mt-4">
|
||||
{!!$newsroom->links()!!}
|
||||
</div>
|
||||
</div>
|
||||
<div class="container-fluid mt-4">
|
||||
<div class="row mb-3 justify-content-between">
|
||||
<div class="col-12">
|
||||
@if($newsroom->count() > 0)
|
||||
<div class="table-responsive">
|
||||
<table class="table table-dark">
|
||||
<thead class="thead-dark">
|
||||
<tr>
|
||||
<th scope="col">ID</th>
|
||||
<th scope="col">Title</th>
|
||||
<th scope="col">Slug</th>
|
||||
<th scope="col">Status</th>
|
||||
<th scope="col">Updated</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($newsroom as $news)
|
||||
<tr>
|
||||
<td class="font-weight-bold text-monospace text-muted">
|
||||
<a href="{{$news->editUrl()}}">
|
||||
{{ $news->id }}
|
||||
</a>
|
||||
</td>
|
||||
<td class="font-weight-bold">
|
||||
<div>
|
||||
<p class="mb-0 font-weight-bold">{{str_limit($news->title, 50)}}</p>
|
||||
{{-- <p class="mb-0 small">{{str_limit($news->summary, 80)}}</p> --}}
|
||||
</div>
|
||||
</td>
|
||||
<td class="text-muted">
|
||||
@if($news->published_at)
|
||||
<a href="{{$news->permalink()}}" class="font-weight-bold" target="_blank">{{$news->slug}}</a>
|
||||
@else
|
||||
{{ $news->slug }}
|
||||
@endif
|
||||
</td>
|
||||
<td class="font-weight-bold">
|
||||
@if($news->published_at != null)
|
||||
<span class="badge badge-success font-weight-bold mr-3">PUBLISHED</span>
|
||||
@else
|
||||
<span class="badge badge-dark font-weight-bold mr-3">DRAFT</span>
|
||||
@endif
|
||||
</td>
|
||||
|
||||
<td class="font-weight-bold">
|
||||
{{ $news->updated_at->diffForHumans() }}
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="d-flex justify-content-center mt-4">
|
||||
{!!$newsroom->links()!!}
|
||||
</div>
|
||||
@else
|
||||
<div class="card-body text-center">
|
||||
<p class="lead mb-0 p-5">No Announcements Found!</p>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@endsection
|
||||
|
|
Loading…
Reference in a new issue