Passed
Push — master ( f510e9...9822a2 )
by Paul
10:29
created

SearchUsers   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 62
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 2
Bugs 0 Features 0
Metric Value
wmc 5
eloc 21
c 2
b 0
f 0
dl 0
loc 62
ccs 0
cts 42
cp 0
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A render() 0 7 1
A searchById() 0 10 1
A users() 0 7 2
A searchByTerm() 0 13 1
1
<?php
2
3
namespace GeminiLabs\SiteReviews\Database\Search;
4
5
use GeminiLabs\SiteReviews\Database;
6
use GeminiLabs\SiteReviews\Database\Query;
7
use GeminiLabs\SiteReviews\Helpers\Str;
8
9
class SearchUsers extends AbstractSearch
10
{
11
    /**
12
     * @return string
13
     */
14
    public function render()
15
    {
16
        return array_reduce($this->results, function ($carry, $result) {
17
            return $carry.glsr()->build('partials/editor/search-result', [
18
                'ID' => $result->id,
19
                'permalink' => esc_url(get_author_posts_url($result->id)),
20
                'title' => esc_attr($result->name.' ('.$result->login.')'),
21
            ]);
22
        });
23
    }
24
25
    /**
26
     * @return array
27
     */
28
    public function users()
29
    {
30
        $users = [];
31
        foreach ($this->results as $result) {
32
            $users[] = get_user_by('ID', $result->id);
33
        }
34
        return $users;
35
    }
36
37
    /**
38
     * @param int $searchId
39
     * @return array
40
     */
41
    protected function searchById($searchId)
42
    {
43
        $sql = $this->db->prepare("
44
            SELECT u.ID AS id, u.user_login AS login, u.display_name AS name
45
            FROM {$this->db->users} u
46
            WHERE 1=1
47
            AND u.ID = %d
48
        ", $searchId);
49
        return glsr(Database::class)->dbGetResults(
50
            glsr(Query::class)->sql($sql)
51
        );
52
    }
53
54
    /**
55
     * @param string $searchTerm
56
     * @return array
57
     */
58
    protected function searchByTerm($searchTerm)
59
    {
60
        $like = '%'.$this->db->esc_like($searchTerm).'%';
61
        $sql = $this->db->prepare("
62
            SELECT u.ID AS id, u.user_login AS login, u.display_name AS name
63
            FROM {$this->db->users} u
64
            WHERE 1=1
65
            AND (u.user_login LIKE %s OR u.display_name LIKE %s)
66
            ORDER BY u.display_name LIKE %s DESC
67
            LIMIT 0, 25
68
        ", $like, $like, $like);
69
        return glsr(Database::class)->dbGetResults(
70
            glsr(Query::class)->sql($sql)
71
        );
72
    }
73
}
74