Issues (32)

src/Compiler/CompilesTaxonomies.php (2 issues)

1
<?php
2
3
namespace Sanderdekroon\Parlant\Compiler;
4
5
use Sanderdekroon\Parlant\Builder\NestedTaxonomy;
6
7
trait CompilesTaxonomies
8
{
9
10
    /**
11
     * Compile the meta query to valid query arguments
12
     * @param  array $wheres
13
     */
14 4
    protected function compileWhereTaxonomies($wheres)
15
    {
16 4
        if (empty($wheres) || !is_array($wheres)) {
17
            return;
18
        }
19
20 4
        $compiled = [];
21
22 4
        foreach ($wheres as $where) {
23 4
            if ($where instanceof NestedTaxonomy) {
24 1
                $compiled[] = $this->compileNestedTaxonomy($where);
25 1
                continue;
26
            }
27
28 4
            $compiled[] = $this->prepareTaxonomyArguments($where);
29
        }
30
31 4
        $this->addArgument('tax_query', $compiled, true);
0 ignored issues
show
The call to Sanderdekroon\Parlant\Co...xonomies::addArgument() has too many arguments starting with 'tax_query'. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

31
        $this->/** @scrutinizer ignore-call */ 
32
               addArgument('tax_query', $compiled, true);

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress. Please note the @ignore annotation hint above.

Loading history...
32 4
    }
33
34
    /**
35
     * Complie nested meta query arguments to valid query arguments. If a meta query
36
     * contains another nested meta, we'll resolve that recursively.
37
     * @param  NestedTaxonomy  $nestedMeta
38
     * @param  integer $level
39
     * @return array
40
     */
41 1
    protected function compileNestedTaxonomy($nestedTaxonomy, $level = 2)
42
    {
43 1
        $query = $nestedTaxonomy->getQuery();
44 1
        foreach ($query as $key => $taxonomy) {
45 1
            if ($taxonomy instanceof NestedTaxonomy) {
46
                $query[$key] = $this->compileNestedTaxonomy($taxonomy, $level++);
47
                continue;
48
            }
49
            
50 1
            $query[$key] = $this->prepareTaxonomyArguments($taxonomy);
51
        }
52 1
        $query['relation'] = $nestedTaxonomy->getRelation();
53
        
54 1
        return $query;
55
    }
56
57
    /**
58
     * Format the supplied arguments to WordPress arguments
59
     * @param  array $meta
60
     * @return array
61
     */
62 4
    private function prepareTaxonomyArguments($taxonomy)
63
    {
64
        return [
65 4
            'taxonomy'          => $taxonomy['taxonomy'],
66 4
            'field'             => $taxonomy['field'],
67 4
            'terms'             => $taxonomy['value'],
68 4
            'include_children'  => $taxonomy['includeChildren'],
69 4
            'operator'          => $taxonomy['operator'],
70
        ];
71
    }
72
73
    /**
74
     * Compile the relation(s) between meta queries and add it to the arguments.
75
     * @param  array $relations  The index of the array is used as the level.
76
     */
77 4
    protected function compileWhereTaxonomyRelation($relations)
78
    {
79 4
        return $this->addArgument('tax_query', ['relation' => reset($relations)], true);
0 ignored issues
show
The call to Sanderdekroon\Parlant\Co...xonomies::addArgument() has too many arguments starting with 'tax_query'. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

79
        return $this->/** @scrutinizer ignore-call */ addArgument('tax_query', ['relation' => reset($relations)], true);

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress. Please note the @ignore annotation hint above.

Loading history...
80
    }
81
82
    protected abstract function addArgument();
83
}
84