{ "translations": { "Please select a file." : "Por favor selecciona un archivo.", "File is too big" : "El archivo es demasiado grande.", "The selected file is not an image." : "El archivo seleccionado no es una imagen.", "The selected file cannot be read." : "El archivo seleccionado no se puede leer.", "The file was uploaded" : "El archivo fue cargado", "The uploaded file exceeds the upload_max_filesize directive in php.ini" : "El archivo cargado excede el valor establecido en la directiva upload_max_filesize en el archivo php.ini", "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "El archivo cargado excede el valor especificado de la directiva MAX_FILE_SIZE en la forma de HTML", "The file was only partially uploaded" : "El archivo sólo fue cargado parcialmente", "No file was uploaded" : "No se cargó el archivo", "Missing a temporary folder" : "Falta una carpeta temporal", "Could not write file to disk" : "No fue posible escribir a disco", "A PHP extension stopped the file upload" : "Una extensión de PHP detuvo la carga del archivo", "Invalid file provided" : "Archivo proporcionado inválido", "No image or file provided" : "No se especificó un archivo o imagen", "Unknown filetype" : "Tipo de archivo desconocido", "An error occurred. Please contact your admin." : "Se presentó un error. Por favor contacta a tu adminsitrador. ", "Invalid image" : "Imagen inválida", "No temporary profile picture available, try again" : "No hay una imagen de perfil temporal disponible, por favor inténtalo de nuevo", "No crop data provided" : "No se han proporcionado datos del recorte", "No valid crop data provided" : "No se han proporcionado datos válidos del recorte", "Crop is not square" : "El recorte no es cuadrado", "State token does not match" : "La ficha de estado no corresponde", "Login" : "Iniciar sesión", "Password reset is disabled" : "Restablecer contraseña se encuentra deshabilitado", "%s password reset" : "%s restablecer la contraseña", "Password reset" : "Restablecer contraseña", "Click the following button to reset your password. If you have not requested the password reset, then ignore this email." : "Haz click en el siguiente botón para restablecer tu contraseña. Si no has solicitado restablecer su contraseña, por favor ignora este correo. ", "Click the following link to reset your password. If you have not requested the password reset, then ignore this email." : "Haz click en la siguiente liga para restablecer su contraseña. Si no has solicitado restablecer la contraseña, por favor ignora este mensaje. ", "Reset your password" : "Restablecer tu contraseña", "Preparing update" : "Preparando actualización", "[%d / %d]: %s" : "[%d / %d]: %s ", "Please use the command line updater because automatic updating is disabled in the config.php." : "Por favor usa el actualizador de línea de comandos ya que el actualizador automático se encuentra deshabilitado en config.php.", "Turned on maintenance mode" : "Modo mantenimiento activado", "Turned off maintenance mode" : "Modo mantenimiento desactivado", "Maintenance mode is kept active" : "El modo mantenimiento sigue activo", "Updating database schema" : "Actualizando esquema de base de datos", "Updated database" : "Base de datos actualizada", "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "Verificando si el esquema de la base de datos para %s puede ser actualizado (esto puede tomar mucho tiempo dependiendo del tamaño de la base de datos)", "Set log level to debug" : "Establecer nivel de bitacora a depurar", "Reset log level" : "Restablecer nivel de bitácora", "Starting code integrity check" : "Comenzando verificación de integridad del código", "Finished code integrity check" : "Terminó la verificación de integridad del código ", "%s (incompatible)" : "%s (incompatible)", "Already up to date" : "Ya está actualizado", "Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Tu servidor web aún no esta correctamente configurado para permitir la sincronización de archivos porque la interfaz WebDAV parece estar rota. ", "PHP does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP no parece estar configurado correctamente para consultar las variables de ambiente. La prueba con getenv(\"PATH\") sólo regresa una respuesta vacía.", "Your database does not run with \"READ COMMITTED\" transaction isolation level. This can cause problems when multiple actions are executed in parallel." : "Tu base de datos no puede correr con el nivel de aislamiento de transacción de \"READ COMMITTED\". Puede causar problemas cuando mútiples acciones sean ejecutadas en paralelo.", "It was not possible to execute the cron job via CLI. The following technical errors have appeared:" : "No fue posible ejecutar el trabajo de cron via CLI. Se presentaron los siguientes errores técnicos:", "The PHP function \"set_time_limit\" is not available. This could result in scripts being halted mid-execution, breaking your installation. Enabling this function is strongly recommended." : "La función de PHP \"set_time_limit\" no está disponible. Esto podría generar que la ejecución de scripts se detenga, rompiendo su instalación. Se recomienda ámpliamente habilitar esta función. ", "Your PHP does not have FreeType support, resulting in breakage of profile pictures and the settings interface." : "Tu PHP no cuenta con soporte FreeType, lo que resulta en fallas en la imagen de perfil y la interface de configuraciones. ", "SQLite is currently being used as the backend database. For larger installations we recommend that you switch to a different database backend." : "Actualmente estás usando SQLite como el backend de base de datos. Para instalaciones más grandes te recomendamos cambiar a un backend de base de datos diferente.", "This is particularly recommended when using the desktop client for file synchronisation." : "Esto es particularmente recomendado cuando se usa el cliente de escritorio para sincronización de archivos. ", "Error occurred while checking server setup" : "Se presentó un error al verificar la configuración del servidor", "The \"{header}\" HTTP header is not set to \"{expected}\". This is a potential security or privacy risk, as it is recommended to adjust this setting accordingly." : "El encabezado HTTP \"{header}\" está establecido a \"{expected}\". Esto representa un riesgo potencial de seguridad o privacidad, y que se recomienda ajustar esta configuración. ", "The \"{header}\" HTTP header is not set to \"{expected}\". Some features might not work correctly, as it is recommended to adjust this setting accordingly." : "El encabezado HT
# Redmine - project management software
# Copyright (C) 2006-2012  Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

class ActivitiesController < ApplicationController
  menu_item :activity
  before_filter :find_optional_project
  accept_rss_auth :index

  def index
    @days = Setting.activity_days_default.to_i

    if params[:from]
      begin; @date_to = params[:from].to_date + 1; rescue; end
    end

    @date_to ||= Date.today + 1
    @date_from = @date_to - @days
    @with_subprojects = params[:with_subprojects].nil? ? Setting.display_subprojects_issues? : (params[:with_subprojects] == '1')
    @author = (params[:user_id].blank? ? nil : User.active.find(params[:user_id]))

    @activity = Redmine::Activity::Fetcher.new(User.current, :project => @project,
                                                             :with_subprojects => @with_subprojects,
                                                             :author => @author)
    @activity.scope_select {|t| !params["show_#{t}"].nil?}
    @activity.scope = (@author.nil? ? :default : :all) if @activity.scope.empty?

    events = @activity.events(@date_from, @date_to)

    if events.empty? || stale?(:etag => [@activity.scope, @date_to, @date_from, @with_subprojects, @author, events.first, events.size, User.current, current_language])
      respond_to do |format|
        format.html {
          @events_by_day = events.group_by {|event| User.current.time_to_date(event.event_datetime)}
          render :layout => false if request.xhr?
        }
        format.atom {
          title = l(:label_activity)
          if @author
            title = @author.name
          elsif @activity.scope.size == 1
            title = l("label_#{@activity.scope.first.singularize}_plural")
          end
          render_feed(events, :title => "#{@project || Setting.app_title}: #{title}")
        }
      end
    end

  rescue ActiveRecord::RecordNotFound
    render_404
  end

  private

  # TODO: refactor, duplicated in projects_controller
  def find_optional_project
    return true unless params[:id]
    @project = Project.find(params[:id])
    authorize
  rescue ActiveRecord::RecordNotFound
    render_404
  end
end