Class: Optimacms::Template

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
app/models/optimacms/template.rb

Constant Summary collapse

EXTENSION_DEFAULT =
'html'
EXTENSIONS =
{'blank'=>'', 'html'=>'html', 'erb'=>'html.erb', 'haml'=>'html.haml'}

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.base_dir ⇒ Object

settings



51
52
53
# File 'app/models/optimacms/template.rb', line 51

def self.base_dir
  Rails.root.to_s + '/app/views/'
end

.create_folders_tree(dirpath) ⇒ Object

create folders if necessary - NOT WORKING



346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
# File 'app/models/optimacms/template.rb', line 346

def self.create_folders_tree(dirpath)
  a = dirpath.split /\//

  d = ''
  parent_current = nil
  prev_d = d
  a.each do |s|
    d = d + (d=='' ? '' : '/') +s
    r = Template.where(is_folder: true, basepath: d).first
    if r
      parent_current = r
      next
    end
    # create missing folder
    path_new = File.basename(d)
    basedirpath_new = prev_d
    r = Template.create(is_folder: true, basename: path_new, basedirpath: basedirpath_new, title: path_new, parent: parent_current)
    parent_current = r

    prev_d = d
  end

  parent_current

end

.filename_ext(format) ⇒ Object



200
201
202
# File 'app/models/optimacms/template.rb', line 200

def self.filename_ext(format)
  EXTENSIONS[format]
end

.filename_ext_with_dot(format) ⇒ Object



204
205
206
207
208
# File 'app/models/optimacms/template.rb', line 204

def self.filename_ext_with_dot(format)
  ext = filename_ext(format)
  ext = '.'+ext unless ext.blank?
  ext
end

.filename_lang_postfix(lang) ⇒ Object



195
196
197
198
# File 'app/models/optimacms/template.rb', line 195

def self.filename_lang_postfix(lang)
  return '' if lang==''
  return '.'+lang
end

.where_parent(parent_id) ⇒ Object

search



90
91
92
93
94
95
96
# File 'app/models/optimacms/template.rb', line 90

def self.where_parent(parent_id)
  if parent_id==0
    roots
  elsif parent_id>0
    children_of(parent_id.to_s)
  end
end

Instance Method Details

#_before_create ⇒ Object



275
276
277
278
279
280
281
282
283
284
285
286
287
# File 'app/models/optimacms/template.rb', line 275

def _before_create
  if self.is_folder
    # create dir on disk
    Fileutils::Fileutils.create_dir_if_not_exists self.folder_fullpath
  else
    # add folders if needed
    if self.parent_id.nil? && !self.basedirpath.blank?
      self.parent = Template.create_folders_tree(self.basedirpath)
    end

  end

end

#_before_destroy ⇒ Object



323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
# File 'app/models/optimacms/template.rb', line 323

def _before_destroy
  if self.is_folder

    # cannot delete not empty dir
    if !self.folder_empty?
      return false
    end

    # delete dir
    folder_delete

  else
    # file


  end


  true
end

#_before_update ⇒ Object



289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
# File 'app/models/optimacms/template.rb', line 289

def _before_update
  if self.is_folder
    oldpath = self.folder_fullpath

    self.set_basepath

    # rename dir on disk
    if self.basename_changed?
      raise "cannot change folder path"

      require 'fileutils'
      newpath = self.folder_fullpath

      if Dir.exists?(newpath)
        errors.add(:basename, 'Folder already exists')
        return false
      end

      FileUtils.mv oldpath, newpath

      # TODO: change paths for child templates

    end

  else
    # file

    # TODO: rename file
    #self.make_basepath

  end

end

#_before_validation ⇒ Object

callbacks



261
262
263
264
265
266
267
268
269
270
271
272
# File 'app/models/optimacms/template.rb', line 261

def _before_validation
  fix_basedirpath

  # parent, basedirpath
  if self.parent_id.nil? && !self.basedirpath.blank?
    set_parent_from_basedirpath
  elsif self.basedirpath.nil? && !self.parent_id.nil?
    set_basedirpath_from_parent
  end

  set_basepath
end

#attach ⇒ Object

operations



102
103
104
105
106
107
108
109
110
# File 'app/models/optimacms/template.rb', line 102

def attach
  # check if file exists
  if !content_file_exists?
    errors.add(:attach, "file not found")
    return false
  end

  save
end

#check_parent_folder_exists ⇒ Object

validations



143
144
145
146
147
# File 'app/models/optimacms/template.rb', line 143

def check_parent_folder_exists
  if self.parent_id.nil? && !self.basedirpath.blank?
    errors.add(:basedirpath, "folder not exists. create it first")
  end
end

#content(lang = '') ⇒ Object

content



169
170
171
172
173
174
# File 'app/models/optimacms/template.rb', line 169

def content(lang='')
  filename =  fullpath(lang)
  return nil if filename.nil?
  return '' if !File.exists? filename
  File.read(filename)
end

#content=(v, lang = '') ⇒ Object



176
177
178
179
180
# File 'app/models/optimacms/template.rb', line 176

def content=(v, lang='')
  File.open(self.fullpath(lang), "w+") do |f|
    f.write(v)
  end
end

#content_file_exists?(lang = '') ⇒ Boolean

Returns:

  • (Boolean)


127
128
129
130
131
132
133
134
135
136
137
138
# File 'app/models/optimacms/template.rb', line 127

def content_file_exists?(lang='')
  postfixes = EXTENSIONS.map{|k,v| '.'+v}

  found = false
  postfixes.each do |p|
    if File.exists?(self.fullpath(lang))
      found = true
      break
    end
  end
  found
end

#filename_base ⇒ Object

base filename depending on type for page = name for partial = _name



188
189
190
191
192
# File 'app/models/optimacms/template.rb', line 188

def filename_base
  return '_'+self.basename if self.is_type_partial?

  self.basename
end

#fix_basedirpath ⇒ Object



225
226
227
228
229
230
# File 'app/models/optimacms/template.rb', line 225

def fix_basedirpath
  self.basedirpath ||= ''
  if !self.basedirpath.blank? && self.basedirpath[-1] !='/'
    self.basedirpath << '/'
  end
end

#folder_delete ⇒ Object

folders



375
376
377
378
# File 'app/models/optimacms/template.rb', line 375

def folder_delete
  dirpath = self.folder_fullpath
  FileUtils.remove_dir(dirpath) if Dir.exists? dirpath
end

#folder_empty? ⇒ Boolean

Returns:

  • (Boolean)


380
381
382
383
384
385
386
387
# File 'app/models/optimacms/template.rb', line 380

def folder_empty?
  dirpath = self.folder_fullpath
  if !Dir.exists? dirpath
    return true
  end

  return Dir.entries(dirpath).size == 2
end

#folder_fullpath ⇒ Object



159
160
161
162
163
# File 'app/models/optimacms/template.rb', line 159

def folder_fullpath
  f = self.folder_path
  return nil if f.nil?
  Template.base_dir + f
end

#folder_path ⇒ Object

folder



154
155
156
157
# File 'app/models/optimacms/template.rb', line 154

def folder_path
  return nil if self.basepath.nil?
  self.basepath+'/'
end

#fullpath(lang = '') ⇒ Object



121
122
123
124
125
# File 'app/models/optimacms/template.rb', line 121

def fullpath(lang='')
  f = self.path(lang)
  return nil if f.nil?
  Template.base_dir + f
end

#has_code? ⇒ Boolean

Returns:

  • (Boolean)


66
67
68
# File 'app/models/optimacms/template.rb', line 66

def has_code?
  ['haml', 'erb', 'blank'].include?(self.tpl_format)
end

#is_folder? ⇒ Boolean

Returns:

  • (Boolean)


70
71
72
# File 'app/models/optimacms/template.rb', line 70

def is_folder?
  self.is_folder
end

#is_layout? ⇒ Boolean

Returns:

  • (Boolean)


74
75
76
# File 'app/models/optimacms/template.rb', line 74

def is_layout?
  return self.type_id==TemplateType::TYPE_LAYOUT
end

#is_type_page? ⇒ Boolean

Returns:

  • (Boolean)


78
79
80
# File 'app/models/optimacms/template.rb', line 78

def is_type_page?
  return self.type_id==TemplateType::TYPE_PAGE
end

#is_type_partial? ⇒ Boolean

Returns:

  • (Boolean)


82
83
84
# File 'app/models/optimacms/template.rb', line 82

def is_type_partial?
  return self.type_id==TemplateType::TYPE_PARTIAL
end

#parent_title ⇒ Object

properties



61
62
63
# File 'app/models/optimacms/template.rb', line 61

def parent_title
  self.parent.title
end

#path(lang = '') ⇒ Object

path



116
117
118
119
# File 'app/models/optimacms/template.rb', line 116

def path(lang='')
  return nil if self.basename.nil?
  self.basedirpath + filename_base + Template.filename_lang_postfix(lang) + Template.filename_ext_with_dot(self.tpl_format)
end

#set_basedirpath_from_parent ⇒ Object



232
233
234
235
236
237
238
239
240
241
242
# File 'app/models/optimacms/template.rb', line 232

def set_basedirpath_from_parent
  v = ''
  if self.parent_id.nil?
    v = ''
  else
    v = self.parent.basepath+'/' if self.parent_id >0
  end

  self.basedirpath = v
  #v
end

#set_basepath ⇒ Object

operations with path



213
214
215
216
217
218
219
220
221
222
# File 'app/models/optimacms/template.rb', line 213

def set_basepath
  if self.parent.nil?
    self.basepath = self.basename
    self.basedirpath ||= ''
  else
    self.basepath = self.parent.basepath+'/'+self.basename
    self.basedirpath ||= self.parent.basepath+'/'
  end

end

#set_parent_from_basedirpath ⇒ Object



244
245
246
247
248
249
250
251
252
253
254
255
# File 'app/models/optimacms/template.rb', line 244

def set_parent_from_basedirpath
  v = self.basedirpath

  # set parent_id from dir
  d = v.chop
  r = Template.where(is_folder: true, basepath: d).first
  if r
    self.parent_id = r.id
  else
    self.parent_id = nil
  end
end

#to_s ⇒ Object



44
45
46
# File 'app/models/optimacms/template.rb', line 44

def to_s
  "#{title} (#{basepath})"
end