5
0
Fork 0
mirror of https://0xacab.org/sutty/sutty synced 2024-10-04 23:06:57 +00:00

Merge branch 'panel.sutty.nl' of https://0xacab.org/sutty/sutty into panel.sutty.nl

This commit is contained in:
Sutty 2023-04-26 18:30:44 +00:00
commit 73575439ac
5 changed files with 107 additions and 31 deletions

View file

@ -36,6 +36,15 @@ class IndexedPost < ApplicationRecord
belongs_to :site belongs_to :site
# Encuentra el post original
#
# @return [nil,Post]
def post
return if post_id.blank?
@post ||= site.posts(lang: locale).find(post_id, uuid: true)
end
# Convertir locale a direccionario de PG # Convertir locale a direccionario de PG
# #
# @param [String,Symbol] # @param [String,Symbol]

View file

@ -0,0 +1,66 @@
# frozen_string_literal: true
# Política de acceso a artículos
class IndexedPostPolicy
attr_reader :indexed_post, :usuarie, :site
def initialize(usuarie, indexed_post)
@usuarie = usuarie
@indexed_post = indexed_post
@site = indexed_post.site
end
def index?
true
end
# Les invitades solo pueden ver sus propios posts
def show?
site.usuarie?(usuarie) || site.indexed_posts.by_usuarie(usuarie.id).find_by_post_id(indexed_post.post_id).present?
end
def preview?
show?
end
def new?
create?
end
def create?
true
end
def edit?
update?
end
# Les invitades solo pueden modificar sus propios artículos
def update?
show?
end
# Solo las usuarias pueden eliminar artículos. Les invitades pueden
# borrar sus propios artículos
def destroy?
update?
end
# Las usuarias pueden ver todos los posts
#
# Les invitades solo pueden ver sus propios posts
class Scope
attr_reader :usuarie, :scope
def initialize(usuarie, scope)
@usuarie = usuarie
@scope = scope
end
def resolve
return scope if scope&.first&.site&.usuarie? usuarie
scope.by_usuarie(usuarie.id)
end
end
end

View file

@ -46,36 +46,37 @@
.invalid-feedback= site.errors.messages[:description].join(', ') .invalid-feedback= site.errors.messages[:description].join(', ')
%hr/ %hr/
.form-group#design_id - unless site.persisted?
%h2= t('.design.title') .form-group#design_id
%p.lead= t('.help.design') %h2= t('.design.title')
- if invalid? site, :design_id %p.lead= t('.help.design')
= render 'bootstrap/alert' do - if invalid? site, :design_id
= t('activerecord.errors.models.site.attributes.design_id.layout_incompatible.help', = render 'bootstrap/alert' do
layouts: site.incompatible_layouts.to_sentence) = t('activerecord.errors.models.site.attributes.design_id.layout_incompatible.help',
.row.row-cols-1.row-cols-md-2.designs layouts: site.incompatible_layouts.to_sentence)
-# Demasiado complejo para un f.collection_radio_buttons .row.row-cols-1.row-cols-md-2.designs
- Design.all.order(priority: :desc).each do |design| -# Demasiado complejo para un f.collection_radio_buttons
.design.col.d-flex.flex-column - Design.all.order(priority: :desc).each do |design|
.custom-control.custom-radio .design.col.d-flex.flex-column
= f.radio_button :design_id, design.id, .custom-control.custom-radio
checked: design.id == site.design_id, = f.radio_button :design_id, design.id,
disabled: design.disabled, checked: design.id == site.design_id,
required: true, class: 'custom-control-input' disabled: design.disabled,
= f.label "design_id_#{design.id}", design.name, required: true, class: 'custom-control-input'
class: 'custom-control-label' = f.label "design_id_#{design.id}", design.name,
.flex-fill class: 'custom-control-label'
= sanitize_markdown design.description, .flex-fill
tags: %w[p a strong em] = sanitize_markdown design.description,
tags: %w[p a strong em]
.btn-group{ role: 'group', 'aria-label': t('.design.actions') } .btn-group{ role: 'group', 'aria-label': t('.design.actions') }
- if design.url - if design.url
= link_to t('.design.url'), design.url, = link_to t('.design.url'), design.url,
target: '_blank', class: 'btn' target: '_blank', class: 'btn'
- if design.license - if design.license
= link_to t('.design.license'), design.license, = link_to t('.design.license'), design.license,
target: '_blank', class: 'btn' target: '_blank', class: 'btn'
%hr/ %hr/
.form-group.licenses#license_id .form-group.licenses#license_id
%h2= t('.licencia.title') %h2= t('.licencia.title')

View file

@ -414,7 +414,7 @@ en:
name: "This will be the host name for your site, ie. **example**.sutty.nl. Choose an expression up to 63 characters. It can contain only lowercase letters, numbers and dashes, **and no spaces**. It can't start or end with a dash, or be entirely composed of numbers." name: "This will be the host name for your site, ie. **example**.sutty.nl. Choose an expression up to 63 characters. It can contain only lowercase letters, numbers and dashes, **and no spaces**. It can't start or end with a dash, or be entirely composed of numbers."
title: 'The title can be anything you want.' title: 'The title can be anything you want.'
description: 'You site description that appears in search engines. Between 10 and 160 characters.' description: 'You site description that appears in search engines. Between 10 and 160 characters.'
design: 'Select the design for your site. You can change it later. We add more designs from time to time!' design: 'Select the design for your site. We add more designs from time to time!'
licencia: 'Everything we publish has automatic copyright. This licencia: 'Everything we publish has automatic copyright. This
means nobody can use our works without explicit permission. By means nobody can use our works without explicit permission. By
using licenses, we stablish conditions by which we want to share using licenses, we stablish conditions by which we want to share

View file

@ -420,7 +420,7 @@ es:
name: 'El nombre de tu sitio que formará parte de la dirección (**ejemplo**.sutty.nl). Solo puede contener hasta 63 letras minúsculas, números y guiones, pero **sin espacios**. No puede empezar ni terminar con guión, ni estar compuesto enteramente por números.' name: 'El nombre de tu sitio que formará parte de la dirección (**ejemplo**.sutty.nl). Solo puede contener hasta 63 letras minúsculas, números y guiones, pero **sin espacios**. No puede empezar ni terminar con guión, ni estar compuesto enteramente por números.'
title: 'El título de tu sitio puede ser lo que quieras.' title: 'El título de tu sitio puede ser lo que quieras.'
description: 'La descripción del sitio, que saldrá en buscadores. Entre 10 y 160 caracteres.' description: 'La descripción del sitio, que saldrá en buscadores. Entre 10 y 160 caracteres.'
design: 'Elegí el diseño que va a tener tu sitio aquí. Podés cambiarlo luego. De tanto en tanto vamos sumando diseños nuevos.' design: 'Elegí el diseño que va a tener tu sitio aquí. De tanto en tanto vamos sumando diseños nuevos.'
licencia: 'Todo lo que publicamos posee automáticamente derechos licencia: 'Todo lo que publicamos posee automáticamente derechos
de autore. Esto significa que nadie puede hacer uso de nuestras de autore. Esto significa que nadie puede hacer uso de nuestras
obras sin permiso explícito. Con las licencias establecemos obras sin permiso explícito. Con las licencias establecemos