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

SearchAssignedUsers   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 54
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 4
eloc 20
dl 0
loc 54
ccs 0
cts 39
cp 0
rs 10
c 1
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A searchById() 0 13 1
A searchByTerm() 0 16 1
A users() 0 7 2
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 SearchAssignedUsers extends AbstractSearch
10
{
11
    /**
12
     * @return array
13
     */
14
    public function users()
15
    {
16
        $users = [];
17
        foreach ($this->results as $result) {
18
            $users[] = get_user_by('ID', $result->id);
19
        }
20
        return $users;
21
    }
22
23
    /**
24
     * @param int $searchId
25
     * @return array
26
     */
27
    protected function searchById($searchId)
28
    {
29
        $assignedUsers = glsr(Query::class)->table('assigned_users');
30
        $sql = $this->db->prepare("
31
            SELECT u.ID AS id, u.user_login AS login, u.display_name AS name
32
            FROM {$this->db->users} u
33
            INNER JOIN {$assignedUsers} AS ap ON ap.user_id = u.ID
34
            WHERE 1=1
35
            AND ap.user_id = %d
36
            GROUP BY u.ID
37
        ", $searchId);
38
        return glsr(Database::class)->dbGetResults(
39
            glsr(Query::class)->sql($sql)
40
        );
41
    }
42
43
    /**
44
     * @param string $searchTerm
45
     * @return array
46
     */
47
    protected function searchByTerm($searchTerm)
48
    {
49
        $assignedUsers = glsr(Query::class)->table('assigned_users');
50
        $like = '%'.$this->db->esc_like($searchTerm).'%';
51
        $sql = $this->db->prepare("
52
            SELECT u.ID AS id, u.user_login AS login, u.display_name AS name
53
            FROM {$this->db->users} u
54
            INNER JOIN {$assignedUsers} AS ap ON ap.user_id = u.ID
55
            WHERE 1=1
56
            AND (u.user_login LIKE %s OR u.display_name LIKE %s)
57
            GROUP BY u.ID
58
            ORDER BY u.display_name LIKE %s DESC
59
            LIMIT 20
60
        ", $like, $like, $like);
61
        return glsr(Database::class)->dbGetResults(
62
            glsr(Query::class)->sql($sql)
63
        );
64
    }
65
}
66