Completed
Push — develop-3.0 ( 360277...bd5ff0 )
by Mohamed
06:52
created

ActivityScopes::scopeLimitResultForUserRole()   A

Complexity

Conditions 3
Paths 2

Size

Total Lines 17
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 17
rs 9.4285
c 0
b 0
f 0
cc 3
eloc 11
nc 2
nop 1
1
<?php
2
3
/*
4
 * This file is part of the Tinyissue package.
5
 *
6
 * (c) Mohamed Alsharaf <[email protected]>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace Tinyissue\Model\User;
13
14
use Illuminate\Database\Eloquent\Builder;
15
use Tinyissue\Model\Project;
16
17
/**
18
 * ActivityScopes is trait class containing the model scope methods.
19
 *
20
 * @author Mohamed Alsharaf <[email protected]>
21
 *
22
 * @property static $this
23
 */
24
trait ActivityScopes
25
{
26
    /**
27
     * Include activity related details from comments, issue, users, note.
28
     *
29
     * @param Builder $query
30
     *
31
     * @return Builder
32
     */
33
    public function scopeLoadRelatedDetails(Builder $query)
34
    {
35
        return $query->with('activity', 'issue', 'user', 'assignTo', 'comment', 'note')
36
            ->orderBy('users_activity.created_at', 'DESC');
37
    }
38
39
    /**
40
     * For logged users with role User, show issues that are created by them in internal projects
41
     * of issue create by any for other project statuses.
42
     *
43
     * @param Builder $query
44
     *
45
     * @return Builder
46
     */
47
    public function scopeLimitResultForUserRole(Builder $query)
48
    {
49
        $user = $this->getLoggedUser();
50
        if (!is_null($user) && !$user->isUser()) {
51
            $query->join('projects_issues', 'projects_issues.id', '=', 'item_id');
52
            $query->join('projects', 'projects.id', '=', 'parent_id');
53
            $query->where(function (Builder $query) use ($user) {
54
                $query->where(function (Builder $query) use ($user) {
55
                    $query->where('created_by', '=', $user->id);
56
                    $query->where('private', '=', Project::INTERNAL_YES);
57
                });
58
                $query->orWhere('private', '<>', Project::INTERNAL_YES);
59
            });
60
        }
61
62
        return $query;
63
    }
64
65
    abstract public function getLoggedUser();
66
}
67