Class: DcMenu

Inherits:
Object
  • Object
show all
Includes:
Mongoid::Document, Mongoid::Timestamps
Defined in:
app/models/dc_menu.rb

Overview

Schema information

Collection name: dc_menu : Menus

_id                  BSON::ObjectId       _id
created_at           Time                 created_at
updated_at           Time                 updated_at
name                 String               Menu name
description          String               Short description of menu
div_name             String               Div id name around menu area
link_prepend         String               Link field usually holds direct link to document. Prepand field holds data, that has to be prepanded to the link.
css                  String               CSS for this menu
active               Mongoid::Boolean     Active
created_by           BSON::ObjectId       created_by
updated_by           BSON::ObjectId       updated_by
dc_menu_items        Embedded:DcMenuItem  Menu items

Default menu system for DRG CMS. Model recursively embeds DcMenuItem documents which (theoretically) results in infinite level of sub menus. In practice reasonable maximum level of 4 is advised.

Class Method Summary collapse

Class Method Details

.choices4_menu(site) ⇒ Object

Will return all top level menu items of specified menu. Used in DcPage document for selecting top level selected menu, when document displayed in browser.

Called from DcApplicationHelper :dc_choices4_menu: method.

Parameters:

Site

DcSite document. Site for which menu belongs to. If site is not specified

all current menus in dc_menus collection will be returned.

Returns: Array. Of choices prepared for select input field.



81
82
83
84
85
86
87
88
89
90
91
# File 'app/models/dc_menu.rb', line 81

def self.choices4_menu(site)
  rez = []
  menus = (site.menu_name.blank? ? all : where(name: site.menu_name)).to_a
  menus.each do |menu|
    rez << [menu.name, nil]
    menu.dc_menu_items.where(active: true).order_by(order: 1).each do |menu_item|
      rez << ['-- ' + menu_item.caption, menu_item._id]
    end
  end
  rez
end

.choices4_menu_as_tree(site_id = nil) ⇒ Object

Will return menu structure for menus belonging to the site.

Parameters:

Site

DcSite document. Site for which menu belongs to. If site is not specified

all current menus in collection will be returned.

Returns: Array. Of choices prepared for tree:select input field.



117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# File 'app/models/dc_menu.rb', line 117

def self.choices4_menu_as_tree(site_id=nil)
  qry = where(active: true)
# 
  if site_id.class == BSON::ObjectId
    qry.in( dc_site_id: [nil, site_id] )
  elsif site_id.respond_to?(:id)
    qry.in( dc_site_id: [nil, site_id.id] )
  end
#
  result = []
  qry.each do |menu|
    result << [menu.name, menu.id, nil,0]
    sub_menus = menu.dc_menu_items.order_by(order: 1).to_a
    result += do_sub_menu(sub_menus, menu.id, menu.id.to_s) if sub_menus.size > 0
  end
  result
end

.do_sub_menu(menus, parent, ids) ⇒ Object

Subroutine of choices4_menu_as_tree



96
97
98
99
100
101
102
103
104
105
# File 'app/models/dc_menu.rb', line 96

def self.do_sub_menu(menus, parent, ids) #:nodoc:
  result = []
  menus.each do |item|
    long_id = "#{ids};#{item.id}"
    result << [item.caption, long_id, parent, item.order]
    sub_menus = item.dc_menu_items.order_by(order: 1).to_a
    result += do_sub_menu(sub_menus, long_id, long_id) if sub_menus.size > 0
  end
  result
end

Will update link value of selected menu_item

Parameters:

record

Array. Data of saved document.



141
142
143
144
145
146
147
148
149
150
151
152
153
154
# File 'app/models/dc_menu.rb', line 141

def self.update_menu_item_link(record)
  return unless record
# 
  ar = record.menu_id.split(';') 
  menu = find(ar.shift)
  while (item = ar.shift) do
    menu = menu.dc_menu_items.find(item)
  end
  return unless menu.respond_to?(:link) # top level selected
#  
  menu.page_id = record.id if menu.respond_to?(:page_id)
  menu.link    = record.subject_link if record.respond_to?(:subject_link)
  menu.save  
end