Code Duplication    Length = 54-59 lines in 2 locations

src/wordlift/widgets/navigator/class-navigator-data.php 2 locations

@@ 21-79 (lines=59) @@
18
		return implode( ',', $post_types );
19
	}
20
21
	public static function post_navigator_get_results(
22
		$post_id, $fields = array(
23
		'ID',
24
		'post_title',
25
	), $order_by = 'ID DESC', $limit = 10, $offset = 0, $post_types = array()
26
	) {
27
28
		$post_types = self::get_post_types_as_string( $post_types );
29
		global $wpdb;
30
31
		$select = implode( ', ', array_map( function ( $item ) {
32
			return "p.$item AS $item";
33
		}, (array) $fields ) );
34
35
		$order_by = implode( ', ', array_map( function ( $item ) {
36
			return "p.$item";
37
		}, (array) $order_by ) );
38
39
40
		/** @noinspection SqlNoDataSourceInspection */
41
		return $wpdb->get_results(
42
			$wpdb->prepare( <<<EOF
43
SELECT %4\$s, p2.ID as entity_id
44
 FROM {$wpdb->prefix}wl_relation_instances r1
45
    INNER JOIN {$wpdb->prefix}wl_relation_instances r2
46
        ON r2.object_id = r1.object_id
47
            AND r2.subject_id != %1\$d
48
	-- get the ID of the post entity in common between the object and the subject 2. 
49
    INNER JOIN {$wpdb->posts} p2
50
        ON p2.ID = r2.object_id
51
            AND p2.post_status = 'publish'
52
            AND p2.post_type IN ($post_types)
53
    INNER JOIN {$wpdb->posts} p
54
        ON p.ID = r2.subject_id
55
            AND p.post_status = 'publish'
56
            AND p.post_type IN ($post_types)
57
    INNER JOIN {$wpdb->term_relationships} tr
58
     	ON tr.object_id = p.ID
59
    INNER JOIN {$wpdb->term_taxonomy} tt
60
     	ON tt.term_taxonomy_id = tr.term_taxonomy_id
61
      	    AND tt.taxonomy = 'wl_entity_type'
62
    INNER JOIN {$wpdb->terms} t
63
        ON t.term_id = tt.term_id
64
            AND t.slug = 'article'
65
    -- select only posts with featured images.
66
    INNER JOIN {$wpdb->postmeta} m
67
        ON m.post_id = p.ID
68
            AND m.meta_key = '_thumbnail_id'
69
 WHERE r1.subject_id = %1\$d
70
 -- avoid duplicates.
71
 GROUP BY p.ID
72
 ORDER BY %5\$s
73
 LIMIT %2\$d
74
 OFFSET %3\$d
75
EOF
76
				, $post_id, $limit, $offset, $select, $order_by )
77
		);
78
79
	}
80
81
82
	public static function entity_navigator_get_results(
@@ 82-135 (lines=54) @@
79
	}
80
81
82
	public static function entity_navigator_get_results(
83
		$post_id, $fields = array(
84
		'ID',
85
		'post_title',
86
	), $order_by = 'ID DESC', $limit = 10, $offset = 0, $post_types = array()
87
	) {
88
		global $wpdb;
89
90
		$select = implode( ', ', array_map( function ( $item ) {
91
			return "p.$item AS $item";
92
		}, (array) $fields ) );
93
94
		$order_by = implode( ', ', array_map( function ( $item ) {
95
			return "p.$item";
96
		}, (array) $order_by ) );
97
98
		$post_types = self::get_post_types_as_string( $post_types );
99
100
		/** @noinspection SqlNoDataSourceInspection */
101
		return $wpdb->get_results(
102
			$wpdb->prepare( <<<EOF
103
SELECT %4\$s, p2.ID as entity_id
104
 FROM {$wpdb->prefix}wl_relation_instances r1
105
	-- get the ID of the post entity in common between the object and the subject 2. 
106
    INNER JOIN {$wpdb->posts} p2
107
        ON p2.ID = r1.object_id
108
            AND p2.post_status = 'publish'
109
             AND p2.post_type IN ($post_types)
110
    INNER JOIN {$wpdb->posts} p
111
        ON p.ID = r1.subject_id
112
            AND p.post_status = 'publish'
113
             AND p.post_type IN ($post_types)
114
    INNER JOIN {$wpdb->term_relationships} tr
115
     	ON tr.object_id = p.ID
116
    INNER JOIN {$wpdb->term_taxonomy} tt
117
     	ON tt.term_taxonomy_id = tr.term_taxonomy_id
118
      	    AND tt.taxonomy = 'wl_entity_type'
119
    INNER JOIN {$wpdb->terms} t
120
        ON t.term_id = tt.term_id
121
            AND t.slug = 'article'
122
    -- select only posts with featured images.
123
    INNER JOIN {$wpdb->postmeta} m
124
        ON m.post_id = p.ID
125
            AND m.meta_key = '_thumbnail_id'
126
 WHERE r1.object_id = %1\$d
127
 -- avoid duplicates.
128
 GROUP BY p.ID
129
 ORDER BY %5\$s
130
 LIMIT %2\$d
131
 OFFSET %3\$d
132
EOF
133
				, $post_id, $limit, $offset, $select, $order_by )
134
		);
135
	}
136
137
138
}