Module: Dor::Governable

Extended by:
ActiveSupport::Concern
Includes:
ActiveFedora::Relationships
Included in:
AdminPolicyObject, BasicItem, Collection, Publishable, Set, WorkflowObject
Defined in:
lib/dor/models/governable.rb

Instance Method Summary collapse

Instance Method Details

#add_collection(collection_or_druid) ⇒ Object



65
66
67
68
69
70
71
72
73
74
# File 'lib/dor/models/governable.rb', line 65

def add_collection(collection_or_druid)
  collection = case collection_or_druid
    when String
      Dor::Collection.find(collection_or_druid)
    when Dor::Collection
      collection_or_druid
  end
  self.collections << collection
  self.sets << collection
end

#can_manage_content?(roles) ⇒ Boolean

Returns:

  • (Boolean)


146
147
148
# File 'lib/dor/models/governable.rb', line 146

def can_manage_content? roles
  intersect roles, groups_which_manage_content
end

#can_manage_desc_metadata?(roles) ⇒ Boolean

Returns:

  • (Boolean)


140
141
142
# File 'lib/dor/models/governable.rb', line 140

def can_manage_desc_metadata? roles
  intersect roles, 
end

#can_manage_embargo?(roles) ⇒ Boolean

Returns:

  • (Boolean)


152
153
154
# File 'lib/dor/models/governable.rb', line 152

def can_manage_embargo? roles
  intersect roles, groups_which_manage_embargo
end

#can_manage_item?(roles) ⇒ Boolean

Returns:

  • (Boolean)


137
138
139
# File 'lib/dor/models/governable.rb', line 137

def can_manage_item? roles
  intersect roles, groups_which_manage_item
end

#can_manage_rights?(roles) ⇒ Boolean

Returns:

  • (Boolean)


149
150
151
# File 'lib/dor/models/governable.rb', line 149

def can_manage_rights? roles
  intersect roles, groups_which_manage_rights
end

#can_manage_system_metadata?(roles) ⇒ Boolean

Returns:

  • (Boolean)


143
144
145
# File 'lib/dor/models/governable.rb', line 143

def can_manage_system_metadata? roles
  intersect roles, 
end

#can_view_content?(roles) ⇒ Boolean

Returns:

  • (Boolean)


155
156
157
# File 'lib/dor/models/governable.rb', line 155

def can_view_content? roles
  intersect roles, groups_which_view_content
end

#can_view_metadata?(roles) ⇒ Boolean

Returns:

  • (Boolean)


158
159
160
# File 'lib/dor/models/governable.rb', line 158

def can_view_metadata? roles
  intersect roles, 
end

#groups_which_manage_contentObject



119
120
121
# File 'lib/dor/models/governable.rb', line 119

def groups_which_manage_content
  ['dor-administrator','dor-apo-manager', 'dor-apo-depositor']    
end

#groups_which_manage_desc_metadataObject



113
114
115
# File 'lib/dor/models/governable.rb', line 113

def 
  ['dor-administrator','dor-apo-manager', 'dor-apo-depositor', 'dor-apo-metadata']
end

#groups_which_manage_embargoObject



125
126
127
# File 'lib/dor/models/governable.rb', line 125

def groups_which_manage_embargo
  ['dor-administrator','dor-apo-manager', 'dor-apo-depositor']    
end

#groups_which_manage_itemObject



110
111
112
# File 'lib/dor/models/governable.rb', line 110

def groups_which_manage_item
  ['dor-administrator','dor-apo-manager', 'dor-apo-depositor']
end

#groups_which_manage_rightsObject



122
123
124
# File 'lib/dor/models/governable.rb', line 122

def groups_which_manage_rights
  ['dor-administrator','dor-apo-manager', 'dor-apo-depositor']
end

#groups_which_manage_system_metadataObject



116
117
118
# File 'lib/dor/models/governable.rb', line 116

def 
  ['dor-administrator','dor-apo-manager', 'dor-apo-depositor']
end

#groups_which_view_contentObject



128
129
130
# File 'lib/dor/models/governable.rb', line 128

def groups_which_view_content
  ['dor-administrator','dor-apo-manager', 'dor-apo-depositor', 'dor-viewer']    
end

#groups_which_view_metadataObject



131
132
133
# File 'lib/dor/models/governable.rb', line 131

def 
  ['dor-administrator','dor-apo-manager', 'dor-apo-depositor', 'dor-viewer']    
end

#initiate_apo_workflow(name) ⇒ Object



12
13
14
# File 'lib/dor/models/governable.rb', line 12

def initiate_apo_workflow(name)
  self.initialize_workflow(name, 'dor', !self.new_object?)
end

#intersect(arr1, arr2) ⇒ Object



134
135
136
# File 'lib/dor/models/governable.rb', line 134

def intersect arr1, arr2
  return (arr1 & arr2).length > 0
end

#reapplyAdminPolicyObjectDefaultsObject

set the rights metadata datastream to the content of the APO’s default object rights



89
90
91
# File 'lib/dor/models/governable.rb', line 89

def reapplyAdminPolicyObjectDefaults
  .content=admin_policy_object.datastreams['defaultObjectRights'].content
end

#remove_collection(collection_or_druid) ⇒ Object



76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/dor/models/governable.rb', line 76

def remove_collection(collection_or_druid)

  collection = case collection_or_druid
    when String
      Dor::Collection.find(collection_or_druid)
    when Dor::Collection
      collection_or_druid
  end

  self.collections.delete(collection)
  self.sets.delete(collection)
end

#reset_to_apo_defaultObject



16
17
18
19
20
21
22
# File 'lib/dor/models/governable.rb', line 16

def reset_to_apo_default()
   = self.
  #get the apo for this object
  apo_druid=obj..adminPolicy.first
  apo_obj=Dor::Item.find(apo_druid, :lightweight => true)
  .content=apo_obj..ng_xml
end

#rightsObject



92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/dor/models/governable.rb', line 92

def rights
    return nil unless self.respond_to? :rightsMetadata
    xml=self..ng_xml
    return nil if xml.search('//rightsMetadata').length != 1
    if xml.search('//rightsMetadata/access[@type=\'read\']/machine/group').length == 1
      'Stanford'
    else
      if xml.search('//rightsMetadata/access[@type=\'read\']/machine/world').length ==1
        'World'
      else
        if xml.search('//rightsMetadata/access[@type=\'discover\']/machine/none').length == 1
          'Dark'
        else
          'None'
        end
      end
  end
end

#set_read_rights(rights) ⇒ Object



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
55
56
57
58
59
60
61
62
63
# File 'lib/dor/models/governable.rb', line 24

def set_read_rights(rights)
  return if not ['world','stanford','none', 'dark'].include? rights
   = self.
  rights_xml=.ng_xml
  if(rights_xml.search('//rightsMetadata/access[@type=\'read\']').length==0)
    raise ('The rights metadata stream doesnt contain an entry for machine read permissions. Consider populating it from the APO before trying to change it.')
  end
  rights_xml.search('//rightsMetadata/access[@type=\'discover\']/machine').each do |node|
    node.children.remove
    if rights=='dark'
        world_node=Nokogiri::XML::Node.new('none',rights_xml)
        node.add_child(world_node)
    else
        world_node=Nokogiri::XML::Node.new('world',rights_xml)
      node.add_child(world_node)
    end
  end
  rights_xml.search('//rightsMetadata/access[@type=\'read\']').each do |node|
    node.children.remove
    machine_node=Nokogiri::XML::Node.new('machine',rights_xml)
    if(rights=='world')
      world_node=Nokogiri::XML::Node.new(rights,rights_xml)
      node.add_child(machine_node)
      machine_node.add_child(world_node)
    end
    if rights=='stanford'
      world_node=Nokogiri::XML::Node.new(rights,rights_xml)
      node.add_child(machine_node)
      group_node=Nokogiri::XML::Node.new('group',rights_xml)
      group_node.content="Stanford"
      node.add_child(machine_node)
      machine_node.add_child(group_node)
    end
    if rights=='none' or rights == 'dark'
      none_node=Nokogiri::XML::Node.new('none',rights_xml)
      node.add_child(machine_node)
      machine_node.add_child(none_node)
    end
  end 
end