dawarich/app/controllers/families_controller.rb

90 lines
2.1 KiB
Ruby
Raw Normal View History

2025-09-27 07:23:33 -04:00
# frozen_string_literal: true
class FamiliesController < ApplicationController
before_action :authenticate_user!
2025-09-28 07:10:07 -04:00
before_action :ensure_family_feature_enabled!
0.36.0 (#1952) * Implement OmniAuth GitHub authentication * Fix omniauth GitHub scope to include user email access * Remove margin-bottom * Implement Google OAuth2 authentication * Implement OIDC authentication for Dawarich using omniauth_openid_connect gem. * Add patreon account linking and patron checking service * Update docker-compose.yml to use boolean values instead of strings * Add support for KML files * Add tests * Update changelog * Remove patreon OAuth integration * Move omniauthable to a concern * Update an icon in integrations * Update changelog * Update app version * Fix family location sharing toggle * Move family location sharing to its own controller * Update changelog * Implement basic tagging functionality for places, allowing users to categorize and label places with custom tags. * Add places management API and tags feature * Add some changes related to places management feature * Fix some tests * Fix sometests * Add places layer * Update places layer to use Leaflet.Control.Layers.Tree for hierarchical layer control * Rework tag form * Add hashtag * Add privacy zones to tags * Add notes to places and manage place tags * Update changelog * Update e2e tests * Extract tag serializer to its own file * Fix some tests * Fix tags request specs * Fix some tests * Fix rest of the tests * Revert some changes * Add missing specs * Revert changes in place export/import code * Fix some specs * Fix PlaceFinder to only consider global places when finding existing places * Fix few more specs * Fix visits creator spec * Fix last tests * Update place creating modal * Add home location based on "Home" tagged place * Save enabled tag layers * Some fixes * Fix bug where enabling place tag layers would trigger saving enabled layers, overwriting with incomplete data * Update migration to use disable_ddl_transaction! and add up/down methods * Fix tag layers restoration and filtering logic * Update OIDC auto-registration and email/password registration settings * Fix potential xss
2025-11-24 13:45:09 -05:00
before_action :set_family, only: %i[show edit update destroy]
2025-09-27 07:23:33 -04:00
def show
authorize @family
2025-09-28 07:10:07 -04:00
@members = @family.members.includes(:family_membership).order(:email)
@pending_invitations = @family.active_invitations.order(:created_at)
@member_count = @family.member_count
@can_invite = @family.can_add_members?
2025-09-27 07:23:33 -04:00
end
def new
2025-10-04 16:39:47 -04:00
redirect_to family_path and return if current_user.in_family?
2025-09-27 07:23:33 -04:00
@family = Family.new
2025-10-04 16:39:47 -04:00
authorize @family
2025-09-27 07:23:33 -04:00
end
def create
2025-10-04 16:39:47 -04:00
@family = Family.new(family_params)
authorize @family
2025-09-27 07:23:33 -04:00
service = Families::Create.new(
user: current_user,
name: family_params[:name]
)
if service.call
2025-10-04 16:39:47 -04:00
redirect_to family_path, notice: 'Family created successfully!'
2025-09-27 07:23:33 -04:00
else
@family = Family.new(family_params)
2025-09-28 07:10:07 -04:00
if service.errors.any?
service.errors.each do |error|
@family.errors.add(error.attribute, error.message)
2025-09-28 07:10:07 -04:00
end
end
if service.error_message.present?
@family.errors.add(:base, service.error_message)
2025-09-27 07:23:33 -04:00
end
2025-09-28 07:10:07 -04:00
flash.now[:alert] = service.error_message || 'Failed to create family'
2025-09-27 08:04:10 -04:00
render :new, status: :unprocessable_content
2025-09-27 07:23:33 -04:00
end
end
def edit
authorize @family
end
def update
authorize @family
if @family.update(family_params)
2025-10-04 16:39:47 -04:00
redirect_to family_path, notice: 'Family updated successfully!'
2025-09-27 07:23:33 -04:00
else
2025-09-27 08:04:10 -04:00
render :edit, status: :unprocessable_content
2025-09-27 07:23:33 -04:00
end
end
def destroy
authorize @family
if @family.members.count > 1
2025-10-04 16:39:47 -04:00
redirect_to family_path, alert: 'Cannot delete family with members. Remove all members first.'
2025-09-27 07:23:33 -04:00
else
@family.destroy
2025-10-04 16:39:47 -04:00
redirect_to new_family_path, notice: 'Family deleted successfully!'
2025-09-27 15:14:40 -04:00
end
2025-09-27 07:23:33 -04:00
end
private
def set_family
@family = current_user.family
2025-10-04 16:39:47 -04:00
redirect_to new_family_path, alert: 'You are not in a family' unless @family
2025-09-27 07:23:33 -04:00
end
def family_params
params.require(:family).permit(:name)
end
end