danielebarchiesi@4
|
1 <?php
|
danielebarchiesi@4
|
2
|
danielebarchiesi@4
|
3 /**
|
danielebarchiesi@4
|
4 * Implements hook_features_api().
|
danielebarchiesi@4
|
5 */
|
danielebarchiesi@4
|
6 function taxonomy_features_api() {
|
danielebarchiesi@4
|
7 return array(
|
danielebarchiesi@4
|
8 'taxonomy' => array(
|
danielebarchiesi@4
|
9 'name' => t('Taxonomy'),
|
danielebarchiesi@4
|
10 'feature_source' => TRUE,
|
danielebarchiesi@4
|
11 'default_hook' => 'taxonomy_default_vocabularies',
|
danielebarchiesi@4
|
12 'default_file' => FEATURES_DEFAULTS_INCLUDED,
|
danielebarchiesi@4
|
13 ),
|
danielebarchiesi@4
|
14 );
|
danielebarchiesi@4
|
15 }
|
danielebarchiesi@4
|
16
|
danielebarchiesi@4
|
17 /**
|
danielebarchiesi@4
|
18 * Implements hook_features_export_options().
|
danielebarchiesi@4
|
19 */
|
danielebarchiesi@4
|
20 function taxonomy_features_export_options() {
|
danielebarchiesi@4
|
21 $vocabularies = array();
|
danielebarchiesi@4
|
22 foreach (taxonomy_get_vocabularies() as $vocabulary) {
|
danielebarchiesi@4
|
23 $vocabularies[$vocabulary->machine_name] = $vocabulary->name;
|
danielebarchiesi@4
|
24 }
|
danielebarchiesi@4
|
25 return $vocabularies;
|
danielebarchiesi@4
|
26 }
|
danielebarchiesi@4
|
27
|
danielebarchiesi@4
|
28 /**
|
danielebarchiesi@4
|
29 * Implements hook_features_export().
|
danielebarchiesi@4
|
30 *
|
danielebarchiesi@4
|
31 * @todo Test adding existing dependencies.
|
danielebarchiesi@4
|
32 */
|
danielebarchiesi@4
|
33 function taxonomy_features_export($data, &$export, $module_name = '') {
|
danielebarchiesi@4
|
34 $pipe = array();
|
danielebarchiesi@4
|
35
|
danielebarchiesi@4
|
36 // taxonomy_default_vocabularies integration is provided by Features.
|
danielebarchiesi@4
|
37 $export['dependencies']['features'] = 'features';
|
danielebarchiesi@4
|
38 $export['dependencies']['taxonomy'] = 'taxonomy';
|
danielebarchiesi@4
|
39
|
danielebarchiesi@4
|
40 // Add dependencies for each vocabulary.
|
danielebarchiesi@4
|
41 $map = features_get_default_map('taxonomy');
|
danielebarchiesi@4
|
42 foreach ($data as $machine_name) {
|
danielebarchiesi@4
|
43 if (isset($map[$machine_name]) && $map[$machine_name] != $module_name) {
|
danielebarchiesi@4
|
44 $export['dependencies'][$map[$machine_name]] = $map[$machine_name];
|
danielebarchiesi@4
|
45 }
|
danielebarchiesi@4
|
46 else {
|
danielebarchiesi@4
|
47 $export['features']['taxonomy'][$machine_name] = $machine_name;
|
danielebarchiesi@4
|
48
|
danielebarchiesi@4
|
49 $fields = field_info_instances('taxonomy_term', $machine_name);
|
danielebarchiesi@4
|
50 foreach ($fields as $name => $field) {
|
danielebarchiesi@4
|
51 $pipe['field'][] = "taxonomy_term-{$field['bundle']}-{$field['field_name']}";
|
danielebarchiesi@4
|
52 $pipe['field_instance'][] = "taxonomy_term-{$field['bundle']}-{$field['field_name']}";
|
danielebarchiesi@4
|
53 }
|
danielebarchiesi@4
|
54 }
|
danielebarchiesi@4
|
55 }
|
danielebarchiesi@4
|
56 return $pipe;
|
danielebarchiesi@4
|
57 }
|
danielebarchiesi@4
|
58
|
danielebarchiesi@4
|
59 /**
|
danielebarchiesi@4
|
60 * Implements hook_features_export_render().
|
danielebarchiesi@4
|
61 */
|
danielebarchiesi@4
|
62 function taxonomy_features_export_render($module, $data) {
|
danielebarchiesi@4
|
63 $vocabularies = taxonomy_get_vocabularies();
|
danielebarchiesi@4
|
64 $code = array();
|
danielebarchiesi@4
|
65 foreach ($data as $machine_name) {
|
danielebarchiesi@4
|
66 foreach ($vocabularies as $vocabulary) {
|
danielebarchiesi@4
|
67 if ($vocabulary->machine_name == $machine_name) {
|
danielebarchiesi@4
|
68 // We don't want to break the entity cache, so we need to clone the
|
danielebarchiesi@4
|
69 // vocabulary before unsetting the id.
|
danielebarchiesi@4
|
70 $vocabulary = clone $vocabulary;
|
danielebarchiesi@4
|
71 unset($vocabulary->vid);
|
danielebarchiesi@4
|
72 $code[$machine_name] = $vocabulary;
|
danielebarchiesi@4
|
73 }
|
danielebarchiesi@4
|
74 }
|
danielebarchiesi@4
|
75 }
|
danielebarchiesi@4
|
76 $code = " return ". features_var_export($code, ' ') .";";
|
danielebarchiesi@4
|
77 return array('taxonomy_default_vocabularies' => $code);
|
danielebarchiesi@4
|
78 }
|
danielebarchiesi@4
|
79
|
danielebarchiesi@4
|
80 /**
|
danielebarchiesi@4
|
81 * Implements hook_features_revert().
|
danielebarchiesi@4
|
82 */
|
danielebarchiesi@4
|
83 function taxonomy_features_revert($module) {
|
danielebarchiesi@4
|
84 taxonomy_features_rebuild($module);
|
danielebarchiesi@4
|
85 }
|
danielebarchiesi@4
|
86
|
danielebarchiesi@4
|
87 /**
|
danielebarchiesi@4
|
88 * Implements hook_features_rebuild().
|
danielebarchiesi@4
|
89 *
|
danielebarchiesi@4
|
90 * Rebuilds Taxonomy vocabularies from code defaults.
|
danielebarchiesi@4
|
91 */
|
danielebarchiesi@4
|
92 function taxonomy_features_rebuild($module) {
|
danielebarchiesi@4
|
93 if ($vocabularies = features_get_default('taxonomy', $module)) {
|
danielebarchiesi@4
|
94 $existing = taxonomy_get_vocabularies();
|
danielebarchiesi@4
|
95 foreach ($vocabularies as $vocabulary) {
|
danielebarchiesi@4
|
96 $vocabulary = (object) $vocabulary;
|
danielebarchiesi@4
|
97 foreach ($existing as $existing_vocab) {
|
danielebarchiesi@4
|
98 if ($existing_vocab->machine_name === $vocabulary->machine_name) {
|
danielebarchiesi@4
|
99 $vocabulary->vid = $existing_vocab->vid;
|
danielebarchiesi@4
|
100 }
|
danielebarchiesi@4
|
101 }
|
danielebarchiesi@4
|
102 taxonomy_vocabulary_save($vocabulary);
|
danielebarchiesi@4
|
103 }
|
danielebarchiesi@4
|
104 }
|
danielebarchiesi@4
|
105 }
|