HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux vmi1674223.contaboserver.net 5.4.0-182-generic #202-Ubuntu SMP Fri Apr 26 12:29:36 UTC 2024 x86_64
User: root (0)
PHP: 7.4.3-4ubuntu2.22
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: //opt/openproject/db/migrate/20190301122554_remove_hierarchy_paths.rb
require_relative './20180116065518_add_hierarchy_paths'

class RemoveHierarchyPaths < ActiveRecord::Migration[5.2]
  def up
    AddHierarchyPaths.new.migrate :down

    # Set sort to id, asc where parent sort was used
    Query
      .where("sort_criteria LIKE '%parent%'")
      .find_each do |query|
      # Use update_column to ensure that value is saved regardless
      # of the overall state of the query
      query.update_column(:sort_criteria, query.sort_criteria.map { |criteria| map_parent_to_id(criteria) })
    rescue StandardError => e
      warn "Failed to migrate parent sort_criteria for query #{query.id}: #{e}"
    end
  end

  def down
    # Will fail to #rebuild_hierarchy_paths! unless restored to correct version
    AddHierarchyPaths.new.migrate :up

    # Set sort to parent, asc where query.show_hierarchies is set
    # because that is what is implied by the frontend.
    Query
      .where(show_hierarchies: true)
      .update_all(sort_criteria: [%w(parent asc)])
  end

  private

  ##
  # Map parent sort_criteria to id asc.
  def map_parent_to_id(criteria)
    if criteria.first.to_s == 'parent'
      %w[id asc]
    else
      criteria
    end
  end
end