1 | <?php |
||
6 | abstract class Jetpack_Sync_Module { |
||
7 | const ARRAY_CHUNK_SIZE = 10; |
||
8 | |||
9 | abstract public function name(); |
||
10 | |||
11 | public function get_object_by_id( $object_type, $id ) { |
||
14 | |||
15 | // override these to set up listeners and set/reset data/defaults |
||
16 | public function init_listeners( $callable ) { |
||
18 | |||
19 | public function init_full_sync_listeners( $callable ) { |
||
20 | } |
||
21 | |||
22 | public function init_before_send() { |
||
24 | |||
25 | public function set_defaults() { |
||
27 | |||
28 | public function reset_data() { |
||
30 | |||
31 | public function enqueue_full_sync_actions( $config ) { |
||
35 | |||
36 | public function estimate_full_sync_actions( $config ) { |
||
37 | // in subclasses, return the number of items yet to be enqueued |
||
38 | return 0; |
||
39 | } |
||
40 | |||
41 | public function get_full_sync_actions() { |
||
44 | |||
45 | protected function count_actions( $action_names, $actions_to_count ) { |
||
48 | |||
49 | protected function get_check_sum( $values ) { |
||
52 | |||
53 | protected function still_valid_checksum( $sums_to_check, $name, $new_sum ) { |
||
60 | |||
61 | protected function enqueue_all_ids_as_action( $action_name, $table_name, $id_field, $where_sql ) { |
||
62 | global $wpdb; |
||
63 | |||
64 | if ( ! $where_sql ) { |
||
65 | $where_sql = '1 = 1'; |
||
66 | } |
||
67 | |||
68 | $items_per_page = 1000; |
||
69 | $page = 1; |
||
70 | $chunk_count = 0; |
||
71 | $previous_id = 0; |
||
72 | $listener = Jetpack_Sync_Listener::get_instance(); |
||
73 | while ( $ids = $wpdb->get_col( "SELECT {$id_field} FROM {$table_name} WHERE {$where_sql} AND {$id_field} > {$previous_id} ORDER BY {$id_field} ASC LIMIT {$items_per_page}" ) ) { |
||
74 | // Request posts in groups of N for efficiency |
||
75 | $chunked_ids = array_chunk( $ids, self::ARRAY_CHUNK_SIZE ); |
||
76 | |||
77 | $listener->bulk_enqueue_full_sync_actions( $action_name, $chunked_ids ); |
||
78 | |||
79 | $chunk_count += count( $chunked_ids ); |
||
80 | $page += 1; |
||
81 | $previous_id = end( $ids ); |
||
82 | } |
||
83 | |||
84 | return $chunk_count; |
||
85 | } |
||
86 | |||
87 | protected function get_metadata( $ids, $meta_type ) { |
||
88 | global $wpdb; |
||
89 | $table = _get_meta_table( $meta_type ); |
||
90 | $id = $meta_type . '_id'; |
||
91 | if ( ! $table ) { |
||
92 | return array(); |
||
93 | } |
||
94 | |||
95 | return array_map( |
||
96 | array( $this, 'unserialize_meta' ), |
||
97 | $wpdb->get_results( "SELECT $id, meta_key, meta_value, meta_id FROM $table WHERE $id IN ( " . implode( ',', wp_parse_id_list( $ids ) ) . ' )', OBJECT ) |
||
98 | ); |
||
99 | } |
||
100 | |||
101 | protected function get_term_relationships( $ids ) { |
||
106 | |||
107 | public function unserialize_meta( $meta ) { |
||
108 | $meta->meta_value = maybe_unserialize( $meta->meta_value ); |
||
109 | return $meta; |
||
111 | |||
112 | public function get_objects_by_id( $object_type, $ids ) { |
||
129 | } |
||
130 |