uploads: add /upload_media_assets index page.

This page shows each individual file you've uploaded. This is different
from the regular uploads page because files in multi-file uploads are
not grouped together.
This commit is contained in:
evazion
2022-02-13 16:09:45 -06:00
parent 53a3beee35
commit 229759cc72
7 changed files with 89 additions and 0 deletions

View File

@@ -0,0 +1,22 @@
# frozen_string_literal: true
class UploadMediaAssetsController < ApplicationController
respond_to :html, :xml, :json, :js
def index
@upload_media_assets = authorize UploadMediaAsset.visible(CurrentUser.user).includes(media_asset: :post, upload: :uploader).where(upload: { uploader: CurrentUser.user }).paginated_search(params, count_pages: true)
respond_with(@upload_media_assets)
end
def show
@upload_media_asset = authorize UploadMediaAsset.find(params[:id])
@media_asset = @upload_media_asset.media_asset
if request.format.html? && @media_asset&.post&.present?
flash[:notice] = "Duplicate of post ##{@media_asset.post.id}"
redirect_to @media_asset.post
else
respond_with(@upload_media_asset)
end
end
end

View File

@@ -11,6 +11,14 @@ class UploadMediaAsset < ApplicationRecord
failed: 300,
}
def self.visible(user)
if user.is_admin?
all
else
where(upload: { uploader: user })
end
end
def self.search(params)
q = search_attributes(params, :id, :created_at, :updated_at, :status, :source_url, :page_url, :error, :upload, :media_asset)
q.apply_default_order(params)

View File

@@ -0,0 +1,7 @@
# frozen_string_literal: true
class UploadMediaAssetPolicy < ApplicationPolicy
def show?
user.is_admin? || record.upload.uploader_id == user.id
end
end

View File

@@ -0,0 +1,7 @@
<%= render(MediaAssetGalleryComponent.new) do |gallery| %>
<% upload_media_assets.each do |upload_media_asset| %>
<% gallery.media_asset do %>
<%= render "upload_media_assets/preview", upload_media_asset: upload_media_asset, size: gallery.size %>
<% end %>
<% end %>
<% end %>

View File

@@ -0,0 +1,27 @@
<% media_asset = upload_media_asset.media_asset %>
<%= render MediaAssetPreviewComponent.new(media_asset: media_asset, size: size, link_target: [upload_media_asset.upload, upload_media_asset]) do |preview| %>
<% preview.missing_image do %>
<% if upload_media_asset.failed? %>
Failed
<% else %>
Loading
<% end %>
<% end %>
<% preview.footer do %>
<div class="text-center text-muted text-xs h-12">
<% if media_asset&.post.present? %>
<div class="leading-none">
<%= link_to "post ##{media_asset.post.id}", media_asset.post, class: "leading-none" %>
</div>
<% end %>
<% if upload_media_asset.source_url.present? %>
<%= external_link_to upload_media_asset.source_url, Addressable::URI.parse(upload_media_asset.source_url).domain %>
<% else %>
<em>No source</em>
<% end %>
</div>
<% end %>
<% end %>

View File

@@ -0,0 +1,16 @@
<div id="c-upload-media-assets">
<div id="a-index">
<div class="flex items-center mb-2">
<h1 class="flex-1">My Uploads</h1>
<span>
<strong>Gallery</strong> |
<%= link_to "Table", uploads_path(mode: "table") %>
</span>
</div>
<%= render "upload_media_assets/gallery", upload_media_assets: @upload_media_assets %>
<%= numbered_paginator(@upload_media_assets) %>
</div>
</div>

View File

@@ -252,7 +252,9 @@ Rails.application.routes.draw do
get :batch
get :image_proxy
end
resources :upload_media_assets, only: [:show, :index], path: "assets"
end
resources :upload_media_assets, only: [:show, :index]
resources :users do
resources :favorites, only: [:index, :create, :destroy]
resources :favorite_groups, controller: "favorite_groups", only: [:index], as: "favorite_groups"