# Copyright (c) 2010-2011, Diaspora Inc. This file is # licensed under the Affero General Public License version 3 or later. See # the COPYRIGHT file. class UsersController < ApplicationController before_filter :authenticate_user!, :except => [:new, :create, :public, :user_photo] before_filter -> { @css_framework = :bootstrap }, only: [:privacy_settings, :edit] layout ->(c) { request.format == :mobile ? "application" : "with_header_with_footer" }, only: [:privacy_settings, :edit] use_bootstrap_for :getting_started respond_to :html def edit @aspect = :user_edit @user = current_user @email_prefs = Hash.new(true) @user.user_preferences.each do |pref| @email_prefs[pref.email_type] = false end end def privacy_settings @blocks = current_user.blocks.includes(:person) end def update password_changed = false @user = current_user if u = user_params u.delete(:password) if u[:password].blank? u.delete(:password_confirmation) if u[:password].blank? and u[:password_confirmation].blank? u.delete(:language) if u[:language].blank? # change email notifications if u[:email_preferences] @user.update_user_preferences(u[:email_preferences]) flash[:notice] = I18n.t 'users.update.email_notifications_changed' # change password elsif u[:current_password] && u[:password] && u[:password_confirmation] if @user.update_with_password(u) password_changed = true flash[:notice] = I18n.t 'users.update.password_changed' else flash[:error] = I18n.t 'users.update.password_not_changed' end elsif u[:show_community_spotlight_in_stream] || u[:getting_started] if @user.update_attributes(u) flash[:notice] = I18n.t 'users.update.settings_updated' else flash[:notice] = I18n.t 'users.update.settings_not_updated' end elsif u[:language] if @user.update_attributes(u) I18n.locale = @user.language flash[:notice] = I18n.t 'users.update.language_changed' else flash[:error] = I18n.t 'users.update.language_not_changed' end elsif u[:email] @user.unconfirmed_email = u[:email] if @user.save @user.mail_confirm_email == @user.email if @user.unconfirmed_email flash[:notice] = I18n.t 'users.update.unconfirmed_email_changed' end else flash[:error] = I18n.t 'users.update.unconfirmed_email_not_changed' end elsif u[:auto_follow_back] if @user.update_attributes(u) flash[:notice] = I18n.t 'users.update.follow_settings_changed' else flash[:error] = I18n.t 'users.update.follow_settings_not_changed' end end end respond_to do |format| format.js { render :nothing => true, :status => 204 } format.all { redirect_to password_changed ? new_user_session_path : edit_user_path } end end def destroy if params[:user] && params[:user][:current_password] && current_user.valid_password?(params[:user][:current_password]) current_user.close_account! sign_out current_user redirect_to(stream_path, :notice => I18n.t('users.destroy.success')) else if params[:user].present? && params[:user][:current_password].present? flash[:error] = t 'users.destroy.wrong_password' else flash[:error] = t 'users.destroy.no_password' end redirect_to :back end end def public if @user = User.find_by_username(params[:username]) respond_to do |format| format.atom do @posts = Post.where(author_id: @user.person_id, public: true) .order('created_at DESC') .limit(25) .map {|post| post.is_a?(Reshare) ? post.absolute_root : post } .compact end format.any { redirect_to person_path(@user.person) } end else redirect_to stream_path, :error => I18n.t('users.public.does_not_exist', :username => params[:username]) end end def getting_started @user = current_user @person = @user.person @profile = @user.profile respond_to do |format| format.mobile { render "users/getting_started" } format.all { render "users/getting_started", layout: "with_header_with_footer" } end end def getting_started_completed user = current_user user.getting_started = false user.save redirect_to stream_path end def export exporter = Diaspora::Exporter.new(Diaspora::Exporters::XML) send_data exporter.execute(current_user), :filename => "#{current_user.username}_diaspora_data.xml", :type => :xml end def export_photos tar_path = PhotoMover::move_photos(current_user) send_data( File.open(tar_path).read, :filename => "#{current_user.id}.tar" ) end def user_photo username = params[:username].split('@')[0] user = User.find_by_username(username) if user.present? redirect_to user.image_url else render :nothing => true, :status => 404 end end def confirm_email if current_user.confirm_email(params[:token]) flash[:notice] = I18n.t('users.confirm_email.email_confirmed', :email => current_user.email) elsif current_user.unconfirmed_email.present? flash[:error] = I18n.t('users.confirm_email.email_not_confirmed') end redirect_to edit_user_path end private def user_params params.fetch(:user).permit( :email, :current_password, :password, :password_confirmation, :language, :disable_mail, :invitation_service, :invitation_identifier, :show_community_spotlight_in_stream, :auto_follow_back, :auto_follow_back_aspect_id, :remember_me, :getting_started, email_preferences: [ :someone_reported, :also_commented, :mentioned, :comment_on_post, :private_message, :started_sharing, :liked, :reshared ] ) end end