Commit 7e52faf11476404aaad8c93ba36926c5db69dacf

Authored by Adhidarma Hadiwinoto
1 parent ccac09bb3e
Exists in master

debug

Showing 1 changed file with 1 additions and 0 deletions Inline Diff

sinkronisasi.include.php
1 <?php 1 <?php
2 2
3 function sinkronisasi_get_terms($vocabulary) { 3 function sinkronisasi_get_terms($vocabulary) {
4 $entity_type = "taxonomy_term"; 4 $entity_type = "taxonomy_term";
5 5
6 $query = new EntityFieldQuery(); 6 $query = new EntityFieldQuery();
7 $query->entityCondition('entity_type', $entity_type); 7 $query->entityCondition('entity_type', $entity_type);
8 $query->propertyCondition('vid', $vocabulary->vid); 8 $query->propertyCondition('vid', $vocabulary->vid);
9 9
10 $result = $query->execute(); 10 $result = $query->execute();
11 if (!$result) { 11 if (!$result) {
12 return; 12 return;
13 } 13 }
14 14
15 $tids = array_keys($result[$entity_type]); 15 $tids = array_keys($result[$entity_type]);
16 $terms = taxonomy_term_load_multiple($tids); 16 $terms = taxonomy_term_load_multiple($tids);
17 return $terms; 17 return $terms;
18 } 18 }
19 19
20 function sinkronisasi_export_iterate($terms) { 20 function sinkronisasi_export_iterate($terms) {
21 foreach ($terms as $tid => $term) { 21 foreach ($terms as $tid => $term) {
22 unset($term->rdf_mapping); 22 unset($term->rdf_mapping);
23 $term = sinkronisasi_taxonomy_term_denormalization($term); 23 $term = sinkronisasi_taxonomy_term_denormalization($term);
24 $term = sinkronisasi_export_set_parent($term); 24 $term = sinkronisasi_export_set_parent($term);
25 25
26 $terms[$tid] = $term; 26 $terms[$tid] = $term;
27 } 27 }
28 return $terms; 28 return $terms;
29 } 29 }
30 30
31 function sinkronisasi_export_set_parent($term) { 31 function sinkronisasi_export_set_parent($term) {
32 $parent_terms = taxonomy_get_parents($term->tid); 32 $parent_terms = taxonomy_get_parents($term->tid);
33 $parent_term = array_shift($parent_terms); 33 $parent_term = array_shift($parent_terms);
34 $term->_parent = $parent_term->tid; 34 $term->_parent = $parent_term->tid;
35 35
36 return $term; 36 return $term;
37 } 37 }
38 38
39 function sinkronisasi_taxonomy_term_denormalization($term) { 39 function sinkronisasi_taxonomy_term_denormalization($term) {
40 foreach ($term as $field_name => $field_value) { 40 foreach ($term as $field_name => $field_value) {
41 41
42 $field = field_info_field($field_name); 42 $field = field_info_field($field_name);
43 43
44 44
45 if (!$field) continue; 45 if (!$field) continue;
46 46
47 if ($field['type'] == "taxonomy_term_reference") { 47 if ($field['type'] == "taxonomy_term_reference") {
48 48
49 foreach ($field_value as $language => $values_per_language) { 49 foreach ($field_value as $language => $values_per_language) {
50 foreach ($values_per_language as $idx => $value) { 50 foreach ($values_per_language as $idx => $value) {
51 51
52 if (empty($value['tid'])) { 52 if (empty($value['tid'])) {
53 continue; 53 continue;
54 } 54 }
55 55
56 $foreign_term = taxonomy_term_load($value['tid']); 56 $foreign_term = taxonomy_term_load($value['tid']);
57 if (isset($foreign_term->name)) { 57 if (isset($foreign_term->name)) {
58 $term->{"$field_name"}[$language][$idx]['_name'] = $foreign_term->name; 58 $term->{"$field_name"}[$language][$idx]['_name'] = $foreign_term->name;
59 } 59 }
60 } 60 }
61 } 61 }
62 } 62 }
63 63
64 } 64 }
65 return $term; 65 return $term;
66 } 66 }
67 67
68 function sinkronisasi_delete_taxonomy_term_field_type($term) { 68 function sinkronisasi_delete_taxonomy_term_field_type($term) {
69 foreach ($term as $field_name => $field_value) { 69 foreach ($term as $field_name => $field_value) {
70 70
71 $field = field_info_field($field_name); 71 $field = field_info_field($field_name);
72 72
73 73
74 if (!$field) continue; 74 if (!$field) continue;
75 75
76 if ($field['type'] == "taxonomy_term_reference") { 76 if ($field['type'] == "taxonomy_term_reference") {
77 unset($term->{"$field_name"}); 77 unset($term->{"$field_name"});
78 } 78 }
79 } 79 }
80 return $term; 80 return $term;
81 } 81 }
82 82
83 function sinkronisasi_taxonomy_term_normalization($term) { 83 function sinkronisasi_taxonomy_term_normalization($term) {
84 foreach ($term as $field_name => $field_value) { 84 foreach ($term as $field_name => $field_value) {
85 85
86 $field = field_info_field($field_name); 86 $field = field_info_field($field_name);
87 87
88 88
89 if (!$field) continue; 89 if (!$field) continue;
90 90
91 if ($field['type'] == "taxonomy_term_reference") { 91 if ($field['type'] == "taxonomy_term_reference") {
92 92
93 foreach ($field_value as $language => $values_per_language) { 93 foreach ($field_value as $language => $values_per_language) {
94 foreach ($values_per_language as $idx => $value) { 94 foreach ($values_per_language as $idx => $value) {
95 95
96 if (empty($value['_name'])) { 96 if (empty($value['_name'])) {
97 continue; 97 continue;
98 } 98 }
99 99
100 $foreign_terms = taxonomy_get_term_by_name($value['_name']); 100 $foreign_terms = taxonomy_get_term_by_name($value['_name']);
101 $foreign_terms = taxonomy_term_load_multiple(array_keys($foreign_terms)); 101 $foreign_terms = taxonomy_term_load_multiple(array_keys($foreign_terms));
102 $foreign_term = array_shift($foreign_terms); 102 $foreign_term = array_shift($foreign_terms);
103 103
104 if (isset($foreign_term->name)) { 104 if (isset($foreign_term->name)) {
105 if ($foreign_term->name != $value['_name']) { 105 if ($foreign_term->name != $value['_name']) {
106 drush_die("213AB2 foreign term name is not match!"); 106 drush_die("213AB2 foreign term name is not match!");
107 } 107 }
108 108
109 $term->{"$field_name"}[$language][$idx]['tid'] = $foreign_term->tid; 109 $term->{"$field_name"}[$language][$idx]['tid'] = $foreign_term->tid;
110 } 110 }
111 } 111 }
112 } 112 }
113 } 113 }
114 114
115 } 115 }
116 return $term; 116 return $term;
117 } 117 }
118 118
119 119
120 function sinkronisasi_fix_vid($term) { 120 function sinkronisasi_fix_vid($term) {
121 $vocabulary = taxonomy_vocabulary_machine_name_load($term->vocabulary_machine_name); 121 $vocabulary = taxonomy_vocabulary_machine_name_load($term->vocabulary_machine_name);
122 if (!$vocabulary) { 122 if (!$vocabulary) {
123 drush_die("CD231A vocabulary not found!"); 123 drush_die("CD231A vocabulary not found!");
124 } 124 }
125 125
126 $term->vid = $vocabulary->vid; 126 $term->vid = $vocabulary->vid;
127 return $term; 127 return $term;
128 } 128 }
129 129
130 function sinkronisasi_import($terms) { 130 function sinkronisasi_import($terms) {
131 $terms1 = $terms; 131 $terms1 = $terms;
132 $terms2 = $terms; 132 $terms2 = $terms;
133 sinkronisasi_import_iterate_insert($terms1); 133 sinkronisasi_import_iterate_insert($terms1);
134 sinkronisasi_import_iterate_update($terms2); 134 sinkronisasi_import_iterate_update($terms2);
135 } 135 }
136 136
137 function sinkronisasi_import_iterate_insert($terms) { 137 function sinkronisasi_import_iterate_insert($terms) {
138 foreach ($terms as $tid => $term) { 138 foreach ($terms as $tid => $term) {
139 $term = sinkronisasi_fix_vid($term); 139 $term = sinkronisasi_fix_vid($term);
140 $term = sinkronisasi_delete_taxonomy_term_field_type($term); 140 $term = sinkronisasi_delete_taxonomy_term_field_type($term);
141 $term = sinkronisasi_set_field_original_tid($term); 141 $term = sinkronisasi_set_field_original_tid($term);
142 142
143 unset($term->tid); 143 unset($term->tid);
144 taxonomy_term_save($term); 144 taxonomy_term_save($term);
145 echo $term->tid . " inserted";
145 } 146 }
146 } 147 }
147 148
148 function sinkronisasi_import_iterate_update($terms) { 149 function sinkronisasi_import_iterate_update($terms) {
149 foreach ($terms as $tid => $term) { 150 foreach ($terms as $tid => $term) {
150 $term = sinkronisasi_fix_vid($term); 151 $term = sinkronisasi_fix_vid($term);
151 $term = sinkronisasi_taxonomy_term_normalization($term); 152 $term = sinkronisasi_taxonomy_term_normalization($term);
152 $term = sinkronisasi_set_field_original_tid($term); 153 $term = sinkronisasi_set_field_original_tid($term);
153 $term = sinkronisasi_pair_with_original($term); 154 $term = sinkronisasi_pair_with_original($term);
154 $term = sinkronisasi_pair_with_parent($term); 155 $term = sinkronisasi_pair_with_parent($term);
155 156
156 taxonomy_term_save($term); 157 taxonomy_term_save($term);
157 } 158 }
158 } 159 }
159 160
160 function sinkronisasi_pair_with_original($term) { 161 function sinkronisasi_pair_with_original($term) {
161 echo $term->tid . "\n"; 162 echo $term->tid . "\n";
162 $original_term = sinkronisasi_get_term_by_field_original_tid($term->tid); 163 $original_term = sinkronisasi_get_term_by_field_original_tid($term->tid);
163 if (!$original_term) { 164 if (!$original_term) {
164 drush_die("ED0129 Error getting original term!"); 165 drush_die("ED0129 Error getting original term!");
165 } 166 }
166 167
167 if (!$original_term->tid) { 168 if (!$original_term->tid) {
168 drush_die("ED0130 Error getting original term tid!"); 169 drush_die("ED0130 Error getting original term tid!");
169 } 170 }
170 171
171 $term->tid = $original_term->tid; 172 $term->tid = $original_term->tid;
172 return $term; 173 return $term;
173 } 174 }
174 175
175 function sinkronisasi_pair_with_parent($term) { 176 function sinkronisasi_pair_with_parent($term) {
176 if ($term->_parent) { 177 if ($term->_parent) {
177 $term->parent = $term->_parent; 178 $term->parent = $term->_parent;
178 unset($term->_parent); 179 unset($term->_parent);
179 } 180 }
180 181
181 return $term; 182 return $term;
182 } 183 }
183 184
184 function sinkronisasi_get_term_by_field_original_tid($tid) { 185 function sinkronisasi_get_term_by_field_original_tid($tid) {
185 $entity_type = "taxonomy_term"; 186 $entity_type = "taxonomy_term";
186 187
187 $query = new EntityFieldQuery(); 188 $query = new EntityFieldQuery();
188 $query->entityCondition('entity_type', $entity_type); 189 $query->entityCondition('entity_type', $entity_type);
189 $query->fieldCondition('field_original_tid', 'value', $tid); 190 $query->fieldCondition('field_original_tid', 'value', $tid);
190 191
191 $result = $query->execute(); 192 $result = $query->execute();
192 if (!$result) { 193 if (!$result) {
193 return; 194 return;
194 } 195 }
195 196
196 $tids = array_keys($result[$entity_type]); 197 $tids = array_keys($result[$entity_type]);
197 $terms = taxonomy_term_load_multiple($tids); 198 $terms = taxonomy_term_load_multiple($tids);
198 199
199 $term = array_shift($terms); 200 $term = array_shift($terms);
200 return $term; 201 return $term;
201 } 202 }
202 203
203 function sinkronisasi_set_field_original_tid($term) { 204 function sinkronisasi_set_field_original_tid($term) {
204 $term->field_original_tid['und'][0]['value'] = $term->tid; 205 $term->field_original_tid['und'][0]['value'] = $term->tid;
205 return $term; 206 return $term;
206 } 207 }
207 208
208 function sinkronisasi_export($vocabulary_machine_name) { 209 function sinkronisasi_export($vocabulary_machine_name) {
209 $vocabulary = taxonomy_vocabulary_machine_name_load($vocabulary_machine_name); 210 $vocabulary = taxonomy_vocabulary_machine_name_load($vocabulary_machine_name);
210 $terms = sinkronisasi_get_terms($vocabulary); 211 $terms = sinkronisasi_get_terms($vocabulary);
211 $terms = sinkronisasi_export_iterate($terms); 212 $terms = sinkronisasi_export_iterate($terms);
212 213
213 return $terms; 214 return $terms;
214 } 215 }
215 216
216 function delete_all_terms_by_vid($vid) { 217 function delete_all_terms_by_vid($vid) {
217 218
218 $query = new EntityFieldQuery(); 219 $query = new EntityFieldQuery();
219 $query->entityCondition('entity_type', 'taxonomy_term'); 220 $query->entityCondition('entity_type', 'taxonomy_term');
220 221
221 if (!$vid) { 222 if (!$vid) {
222 drush_die("Unknown vid"); 223 drush_die("Unknown vid");
223 } 224 }
224 225
225 $query->propertyCondition('vid', $vid); 226 $query->propertyCondition('vid', $vid);
226 $result = $query->execute(); 227 $result = $query->execute();
227 if (!$result) { 228 if (!$result) {
228 return; 229 return;
229 } 230 }
230 231
231 foreach ($result['taxonomy_term'] as $term) { 232 foreach ($result['taxonomy_term'] as $term) {
232 echo "Deleting "; 233 echo "Deleting ";
233 echo $term->tid; 234 echo $term->tid;
234 echo "-> "; 235 echo "-> ";
235 echo taxonomy_term_delete($term->tid); 236 echo taxonomy_term_delete($term->tid);
236 echo "\n"; 237 echo "\n";
237 } 238 }
238 } 239 }
239 240