store.rb 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. # Copyright (C) 2012-2013 Zammad Foundation, http://zammad-foundation.org/
  2. require 'digest/md5'
  3. class Store < ApplicationModel
  4. store :preferences
  5. belongs_to :store_object, :class_name => 'Store::Object'
  6. belongs_to :store_file, :class_name => 'Store::File'
  7. validates :filename, :presence => true
  8. def self.add(data)
  9. data = data.stringify_keys
  10. # lookup store_object.id
  11. store_object = Store::Object.create_if_not_exists( :name => data['object'] )
  12. data['store_object_id'] = store_object.id
  13. # check if record already exists
  14. # store = Store.where( :store_object_id => store_object.id, :o_id => data['o_id'], ).first
  15. # if store != nil
  16. # return store
  17. # end
  18. # check real store
  19. md5 = Digest::MD5.hexdigest( data['data'] )
  20. data['size'] = data['data'].to_s.bytesize
  21. file = Store::File.where( :md5 => md5 ).first
  22. # store attachment
  23. if file == nil
  24. file = Store::File.create(
  25. :data => data['data'],
  26. :md5 => md5
  27. )
  28. end
  29. data['store_file_id'] = file.id
  30. # not needed attributes
  31. data.delete('data')
  32. data.delete('object')
  33. # store meta data
  34. store = Store.create(data)
  35. return store
  36. end
  37. def self.list(data)
  38. # search
  39. store_object_id = Store::Object.lookup( :name => data[:object] )
  40. stores = Store.where( :store_object_id => store_object_id, :o_id => data[:o_id].to_i ).
  41. order('created_at ASC, id ASC')
  42. return stores
  43. end
  44. def self.remove(data)
  45. # search
  46. store_object_id = Store::Object.lookup( :name => data[:object] )
  47. stores = Store.where( :store_object_id => store_object_id ).
  48. where( :o_id => data[:o_id] ).
  49. order('created_at ASC, id ASC')
  50. stores.each do |store|
  51. store.destroy
  52. end
  53. return true
  54. end
  55. class Object < ApplicationModel
  56. validates :name, :presence => true
  57. end
  58. class File < ApplicationModel
  59. before_validation :add_md5
  60. private
  61. def add_md5
  62. self.md5 = Digest::MD5.hexdigest( self.data )
  63. end
  64. end
  65. end