Class: Knitkit::ErpApp::Desktop::WebsiteSectionController

Inherits:
AppController
  • Object
show all
Defined in:
app/controllers/knitkit/erp_app/desktop/website_section_controller.rb

Constant Summary

Constants inherited from AppController

AppController::KNIT_KIT_ROOT

Instance Method Summary collapse

Methods inherited from AppController

#websites

Instance Method Details

#add_layoutObject



113
114
115
116
117
118
119
120
121
122
# File 'app/controllers/knitkit/erp_app/desktop/website_section_controller.rb', line 113

def add_layout
  begin
    current_user.with_capability('create', 'WebsiteSectionLayout') do
      @website_section.create_layout
      render :json => {:success => true}
    end
  rescue ErpTechSvcs::Utils::CompassAccessNegotiator::Errors::UserDoesNotHaveCapability=>ex
    render :json => {:success => false, :message => ex.message}
  end
end

#available_articlesObject



169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
# File 'app/controllers/knitkit/erp_app/desktop/website_section_controller.rb', line 169

def available_articles
  website_id = params[:website_id]
  current_articles = Article.joins(:website_section_contents).where("website_section_id = #{params[:section_id]}").all

  # Defaults to retrieving all articles
  available_articles = Article.order('LOWER(contents.internal_identifier) ASC')

  # Orphaned Articles
  if !website_id.blank? and website_id.to_i == -1
    available_articles = available_articles.includes(:website_section_contents).where( :website_section_contents => { :content_id => nil } )     
  end

  # Website Articles
  if !website_id.blank? and website_id.to_i > 0
    available_articles = available_articles.joins(:website_sections).where("website_sections.website_id = #{website_id}")
  end

  available_articles = available_articles.all - current_articles

  render :inline => "{\"articles\":#{available_articles.to_json(:only => [:title, :internal_identifier, :id], :methods => [:combobox_display_value])}}"
end

#available_articles_filterObject



153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
# File 'app/controllers/knitkit/erp_app/desktop/website_section_controller.rb', line 153

def available_articles_filter
  menu = []
  websites = Website.all
  all_articles = [{:name => 'All Articles', :id => 0}]
  orphaned_articles = [{:name => 'Orphaned Articles Only', :id => -1}]
  
  websites_array = []
  websites.each do |w| 
    websites_array << { :name => "Website: #{w.name}", :id => w.id } 
  end

  menu = all_articles + orphaned_articles + websites_array

  render :inline => "{\"websites\":#{menu.to_json(:only => [:name, :id])}}"
end

#deleteObject



56
57
58
59
60
61
62
63
64
# File 'app/controllers/knitkit/erp_app/desktop/website_section_controller.rb', line 56

def delete
  begin
    current_user.with_capability('delete', 'WebsiteSection') do
      render :json => WebsiteSection.destroy(params[:id]) ? {:success => true} : {:success => false}
    end
  rescue ErpTechSvcs::Utils::CompassAccessNegotiator::Errors::UserDoesNotHaveCapability=>ex
    render :json => {:success => false, :message => ex.message}
  end
end

#detach_articleObject



66
67
68
69
# File 'app/controllers/knitkit/erp_app/desktop/website_section_controller.rb', line 66

def detach_article
  success = WebsiteSectionContent.where(:website_section_id => @website_section.id, :content_id => params[:article_id]).first.destroy
  render :json => success ? {:success => true} : {:success => false}
end

#existing_sectionsObject



191
192
193
194
195
196
197
198
199
# File 'app/controllers/knitkit/erp_app/desktop/website_section_controller.rb', line 191

def existing_sections
  website = Website.find(params[:website_id])
  WebsiteSection.class_eval do
    def title_permalink
      "#{self.title} - #{self.path}"
    end
  end
  render :inline => website.sections.to_json(:only => [:id], :methods => [:title_permalink])
end

#get_layoutObject



124
125
126
127
128
129
130
131
132
# File 'app/controllers/knitkit/erp_app/desktop/website_section_controller.rb', line 124

def get_layout
  begin
    current_user.with_capability('edit', 'WebsiteSectionLayout') do
      render :text => @website_section.layout
    end
  rescue ErpTechSvcs::Utils::CompassAccessNegotiator::Errors::UserDoesNotHaveCapability=>ex
    render :json => {:success => false, :message => ex.message}
  end
end

#newObject



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'app/controllers/knitkit/erp_app/desktop/website_section_controller.rb', line 7

def new
  begin
    current_user.with_capability('create', 'WebsiteSection') do
      website = Website.find(params[:website_id])
      website_section = nil

      if params[:title].to_s.downcase == 'blog' && params[:type] == 'Blog'
        result = {:success => false, :message => 'Blog can not be the title of a Blog'}
      else
        website_section = WebsiteSection.new
        website_section.website_id = website.id
        website_section.in_menu = params[:in_menu] == 'yes'
        website_section.title = params[:title]
        website_section.render_base_layout = params[:render_with_base_layout] == 'yes'
        website_section.type = params[:type] unless params[:type] == 'Page'
        website_section.internal_identifier = params[:internal_identifier]
        website_section.position = 0 # explicitly set position null, MS SQL doesn't always honor column default

        if website_section.save
          if params[:website_section_id]
            parent_website_section = WebsiteSection.find(params[:website_section_id])
            website_section.move_to_child_of(parent_website_section)
          end
          
          if params[:type] == "OnlineDocumentSection"
            documented_content = DocumentedContent.create(:title => website_section.title, :created_by => current_user, :body_html => website_section.title)
            DocumentedItem.create(:documented_content_id => documented_content.id, :online_document_section_id => website_section.id)
          end
          
          website_section.update_path!
          result = {:success => true, :node => build_section_hash(website_section, website_section.website)}
        else
          message = "<ul>"
          website_section.errors.collect do |e, m|
            message << "<li>#{e} #{m}</li>"
          end
          message << "</ul>"
          result = {:success => false, :message => message}
        end

      end

      render :json => result
    end
  rescue ErpTechSvcs::Utils::CompassAccessNegotiator::Errors::UserDoesNotHaveCapability=>ex
    render :json => {:success => false, :message => ex.message}
  end
end

#save_layoutObject



134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
# File 'app/controllers/knitkit/erp_app/desktop/website_section_controller.rb', line 134

def save_layout
  begin
    current_user.with_capability('edit', 'WebsiteSectionLayout') do
    result = Knitkit::SyntaxValidator.validate_content(:erb, params[:content])
      unless result
        website = @website_section.website
        @website_section.layout = params[:content]
        saved = @website_section.save
        @website_section.publish(website, 'Auto Publish', @website_section.version, current_user) if saved and website.publish_on_save?
        render :json => saved ? {:success => true} : {:success => false}
      else
        render :json => {:success => false, :message => result}
      end
    end
  rescue ErpTechSvcs::Utils::CompassAccessNegotiator::Errors::UserDoesNotHaveCapability=>ex
    render :json => {:success => false, :message => ex.message}
  end
end

#updateObject



91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'app/controllers/knitkit/erp_app/desktop/website_section_controller.rb', line 91

def update
  begin
    current_user.with_capability('edit', 'WebsiteSection') do
      @website_section.in_menu = params[:in_menu] == 'yes'
      @website_section.title = params[:title]
      @website_section.render_base_layout = params[:render_with_base_layout] == 'yes'
      @website_section.internal_identifier = params[:internal_identifier]

      website = @website_section.website
      if @website_section.save
        @website_section.publish(website, 'Auto Publish', @website_section.version, current_user) if website.publish_on_save?

        render :json => {:success => true}
      else
        render :json => {:success => false}
      end
    end
  rescue ErpTechSvcs::Utils::CompassAccessNegotiator::Errors::UserDoesNotHaveCapability=>ex
    render :json => {:success => false, :message => ex.message}
  end
end

#update_securityObject



71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'app/controllers/knitkit/erp_app/desktop/website_section_controller.rb', line 71

def update_security
  if current_user.has_capability?('secure', 'WebsiteSection') or current_user.has_capability?('unsecure', 'WebsiteSection')

    if params[:secure] == 'true'
      c = @website_section.add_capability(:view)
      roles = ['admin', 'website_author', @website_section.website.website_role_iid]
      roles.each do |r|
        role = SecurityRole.find_by_internal_identifier(r)
        role.add_capability(c)
      end
    else
      @website_section.remove_capability(:view)
    end

    render :json => {:success => true}
  else
    render :json => {:success => false, :message => "User does not have capability."}
  end
end