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



341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
# File 'app/models/optimacms/template.rb', line 341

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



318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
# File 'app/models/optimacms/template.rb', line 318

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
# File 'app/models/optimacms/template.rb', line 289

def _before_update
  if self.is_folder
    oldpath = self.folder_fullpath

    self.make_basepath

    # rename dir on disk
    if self.basename_changed?
      require 'fileutils'
      newpath = self.folder_fullpath

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

      FileUtils.mv oldpath, newpath
    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



370
371
372
373
# File 'app/models/optimacms/template.rb', line 370

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

#folder_empty? ⇒ Boolean

Returns:

  • (Boolean)


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

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