Code Coverage
 
Lines
Branches
Paths
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
48 / 48
100.00% covered (success)
100.00%
44 / 44
7.60% covered (danger)
7.60%
13 / 171
100.00% covered (success)
100.00%
4 / 4
CRAP
100.00% covered (success)
100.00%
1 / 1
Query
100.00% covered (success)
100.00%
48 / 48
100.00% covered (success)
100.00%
44 / 44
7.60% covered (danger)
7.60%
13 / 171
100.00% covered (success)
100.00%
4 / 4
646.44
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 find
100.00% covered (success)
100.00%
15 / 15
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
6
 find_callbacks
100.00% covered (success)
100.00%
27 / 27
100.00% covered (success)
100.00%
35 / 35
4.88% covered (danger)
4.88%
8 / 164
100.00% covered (success)
100.00%
1 / 1
296.86
 add_to_wp_filter_structure
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
5 / 5
50.00% covered (danger)
50.00%
2 / 4
100.00% covered (success)
100.00%
1 / 1
4.12
1<?php namespace GorillaClaw;
2
3class Query {
4    private $wp_filter;
5
6    function __construct(array &$wp_filter) {
7        $this->wp_filter = &$wp_filter;
8    }
9    
10    /**
11     * find
12     *
13     * @param  mixed $hook_names
14     * @param  mixed $target_callback
15     * @return HookCollection
16     */
17    
18    public function find(string | array $hook_names, string | \Closure | array | false $target_callback = false): HookCollection {
19        $results = [];
20        
21        if(is_string($hook_names)) {
22            $hook_names = explode(" ", $hook_names);
23        }
24
25        array_walk($this->wp_filter, function($entry, $hook_name) use ($hook_names, $target_callback, &$results) {
26            if(in_array($hook_name, $hook_names)) {
27                // We have found a matching hook name
28  
29                foreach($entry->callbacks as $priority => $callbacks) {
30
31                    if($target_callback === false) {
32                        $this->add_to_wp_filter_structure($results, $hook_name, $callbacks, $priority);
33                        continue;
34                    }
35
36                    $found = $this->find_callbacks($target_callback, $callbacks);
37
38                    if(count($found) > 0) {
39                        $this->add_to_wp_filter_structure($results, $hook_name, $found, $priority);
40                    }
41
42                }
43            }
44            
45            return;
46        });
47
48        return new HookCollection($results);
49    }
50    
51    /**
52     * find_callbacks
53     *
54     * @param  mixed $needle
55     * @param  mixed $haystack
56     * @return array
57     */
58    
59    private function find_callbacks(string | \Closure | array $needle, $haystack): array {
60
61        $ret = [];
62        $is_static = false;
63
64        if(is_string($needle) && strpos($needle, "::")) {
65            $is_static = true;
66        }
67
68        foreach($haystack as $function_key => $callback_definition) {
69
70            if(is_array($needle)) {
71                // We are looking for an object only.
72
73                if($callback_definition['function'] instanceof \Closure) {
74                    continue;
75                }
76
77                $obj = $callback_definition['function'][0];
78                $method = $callback_definition['function'][1];
79
80                if(is_string($obj) ? $obj === $needle[0] : get_class($obj) === $needle[0]) {
81                    if($method === $needle[1] || $needle[1] === false) {
82                        $ret[$function_key] = $callback_definition;
83                    }
84                } 
85
86            } elseif(is_string($needle) && $is_static) {
87                // We are looking for a static method
88                
89                if(is_string($callback_definition['function'])) {
90                    $callback_definition['function'] = explode("::", $callback_definition['function']);
91                }
92
93                if($callback_definition['function'] instanceof \Closure) {
94                    continue;
95                }
96
97                $obj = $callback_definition['function'][0];
98                $method = $callback_definition['function'][1];
99                list($find_obj, $find_method) = explode("::", $needle);
100
101                if($obj === $find_obj) {
102                    if($method === $find_method || empty($find_method)) {
103                        $ret[$function_key] = $callback_definition;
104                    }
105                } 
106
107            } else {
108                // We are looking for a function name or a closure
109
110                if($callback_definition['function'] === $needle) {
111                    $ret[$function_key] = $callback_definition;
112                }
113            }
114
115        }
116
117        return $ret;
118    }
119    
120    /**
121     * add_to_wp_filter_structure
122     *
123     * @param  mixed $wp_filter
124     * @param  mixed $hook_name
125     * @param  mixed $callbacks
126     * @param  mixed $priority
127     * @return void
128     */
129
130    private function add_to_wp_filter_structure(array &$wp_filter, string $hook_name, array $callbacks, int $priority) {
131        if(!isset($wp_filter[$hook_name])) {
132            $wp_filter[$hook_name] = [$priority => []];
133        }
134
135        if(!isset($wp_filter[$hook_name][$priority])) {
136            $wp_filter[$hook_name][$priority] = [];
137        }
138
139        $wp_filter[$hook_name][$priority] += $callbacks;
140    } 
141}

Paths

Below are the source code lines that represent each code path as identified by Xdebug. Please note a path is not necessarily coterminous with a line, a line may contain multiple paths and therefore show up more than once. Please also be aware that some paths may include implicit rather than explicit branches, e.g. an if statement always has an else as part of its logical flow even if you didn't write one.

Query->__construct
6    function __construct(array &$wp_filter) {
7        $this->wp_filter = &$wp_filter;
8    }
Query->add_to_wp_filter_structure
130    private function add_to_wp_filter_structure(array &$wp_filter, string $hook_name, array $callbacks, int $priority) {
131        if(!isset($wp_filter[$hook_name])) {
 
132            $wp_filter[$hook_name] = [$priority => []];
133        }
134
135        if(!isset($wp_filter[$hook_name][$priority])) {
 
135        if(!isset($wp_filter[$hook_name][$priority])) {
 
136            $wp_filter[$hook_name][$priority] = [];
137        }
138
139        $wp_filter[$hook_name][$priority] += $callbacks;
 
139        $wp_filter[$hook_name][$priority] += $callbacks;
140    } 
130    private function add_to_wp_filter_structure(array &$wp_filter, string $hook_name, array $callbacks, int $priority) {
131        if(!isset($wp_filter[$hook_name])) {
 
132            $wp_filter[$hook_name] = [$priority => []];
133        }
134
135        if(!isset($wp_filter[$hook_name][$priority])) {
 
135        if(!isset($wp_filter[$hook_name][$priority])) {
 
139        $wp_filter[$hook_name][$priority] += $callbacks;
140    } 
130    private function add_to_wp_filter_structure(array &$wp_filter, string $hook_name, array $callbacks, int $priority) {
131        if(!isset($wp_filter[$hook_name])) {
 
135        if(!isset($wp_filter[$hook_name][$priority])) {
 
136            $wp_filter[$hook_name][$priority] = [];
137        }
138
139        $wp_filter[$hook_name][$priority] += $callbacks;
 
139        $wp_filter[$hook_name][$priority] += $callbacks;
140    } 
130    private function add_to_wp_filter_structure(array &$wp_filter, string $hook_name, array $callbacks, int $priority) {
131        if(!isset($wp_filter[$hook_name])) {
 
135        if(!isset($wp_filter[$hook_name][$priority])) {
 
139        $wp_filter[$hook_name][$priority] += $callbacks;
140    } 
Query->find
18    public function find(string | array $hook_names, string | \Closure | array | false $target_callback = false): HookCollection {
19        $results = [];
20        
21        if(is_string($hook_names)) {
 
22            $hook_names = explode(" ", $hook_names);
23        }
24
25        array_walk($this->wp_filter, function($entry, $hook_name) use ($hook_names, $target_callback, &$results) {
 
25        array_walk($this->wp_filter, function($entry, $hook_name) use ($hook_names, $target_callback, &$results) {
26            if(in_array($hook_name, $hook_names)) {
27                // We have found a matching hook name
28  
29                foreach($entry->callbacks as $priority => $callbacks) {
30
31                    if($target_callback === false) {
32                        $this->add_to_wp_filter_structure($results, $hook_name, $callbacks, $priority);
33                        continue;
34                    }
35
36                    $found = $this->find_callbacks($target_callback, $callbacks);
37
38                    if(count($found) > 0) {
39                        $this->add_to_wp_filter_structure($results, $hook_name, $found, $priority);
40                    }
41
42                }
43            }
44            
45            return;
46        });
47
48        return new HookCollection($results);
49    }
18    public function find(string | array $hook_names, string | \Closure | array | false $target_callback = false): HookCollection {
19        $results = [];
20        
21        if(is_string($hook_names)) {
 
25        array_walk($this->wp_filter, function($entry, $hook_name) use ($hook_names, $target_callback, &$results) {
26            if(in_array($hook_name, $hook_names)) {
27                // We have found a matching hook name
28  
29                foreach($entry->callbacks as $priority => $callbacks) {
30
31                    if($target_callback === false) {
32                        $this->add_to_wp_filter_structure($results, $hook_name, $callbacks, $priority);
33                        continue;
34                    }
35
36                    $found = $this->find_callbacks($target_callback, $callbacks);
37
38                    if(count($found) > 0) {
39                        $this->add_to_wp_filter_structure($results, $hook_name, $found, $priority);
40                    }
41
42                }
43            }
44            
45            return;
46        });
47
48        return new HookCollection($results);
49    }
GorillaClaw\{closure:/home/runner/work/gorilla-claw/gorilla-claw/src/class/Query.php:25-46}
25        array_walk($this->wp_filter, function($entry, $hook_name) use ($hook_names, $target_callback, &$results) {
26            if(in_array($hook_name, $hook_names)) {
 
29                foreach($entry->callbacks as $priority => $callbacks) {
 
29                foreach($entry->callbacks as $priority => $callbacks) {
 
29                foreach($entry->callbacks as $priority => $callbacks) {
30
31                    if($target_callback === false) {
 
32                        $this->add_to_wp_filter_structure($results, $hook_name, $callbacks, $priority);
33                        continue;
 
29                foreach($entry->callbacks as $priority => $callbacks) {
 
29                foreach($entry->callbacks as $priority => $callbacks) {
30
31                    if($target_callback === false) {
32                        $this->add_to_wp_filter_structure($results, $hook_name, $callbacks, $priority);
33                        continue;
34                    }
35
36                    $found = $this->find_callbacks($target_callback, $callbacks);
37
38                    if(count($found) > 0) {
39                        $this->add_to_wp_filter_structure($results, $hook_name, $found, $priority);
40                    }
41
42                }
43            }
44            
45            return;
 
45            return;
46        });
25        array_walk($this->wp_filter, function($entry, $hook_name) use ($hook_names, $target_callback, &$results) {
26            if(in_array($hook_name, $hook_names)) {
 
29                foreach($entry->callbacks as $priority => $callbacks) {
 
29                foreach($entry->callbacks as $priority => $callbacks) {
 
29                foreach($entry->callbacks as $priority => $callbacks) {
30
31                    if($target_callback === false) {
 
36                    $found = $this->find_callbacks($target_callback, $callbacks);
37
38                    if(count($found) > 0) {
 
29                foreach($entry->callbacks as $priority => $callbacks) {
30
31                    if($target_callback === false) {
32                        $this->add_to_wp_filter_structure($results, $hook_name, $callbacks, $priority);
33                        continue;
34                    }
35
36                    $found = $this->find_callbacks($target_callback, $callbacks);
37
38                    if(count($found) > 0) {
39                        $this->add_to_wp_filter_structure($results, $hook_name, $found, $priority);
 
29                foreach($entry->callbacks as $priority => $callbacks) {
 
29                foreach($entry->callbacks as $priority => $callbacks) {
 
29                foreach($entry->callbacks as $priority => $callbacks) {
30
31                    if($target_callback === false) {
32                        $this->add_to_wp_filter_structure($results, $hook_name, $callbacks, $priority);
33                        continue;
34                    }
35
36                    $found = $this->find_callbacks($target_callback, $callbacks);
37
38                    if(count($found) > 0) {
39                        $this->add_to_wp_filter_structure($results, $hook_name, $found, $priority);
40                    }
41
42                }
43            }
44            
45            return;
 
45            return;
46        });
25        array_walk($this->wp_filter, function($entry, $hook_name) use ($hook_names, $target_callback, &$results) {
26            if(in_array($hook_name, $hook_names)) {
 
29                foreach($entry->callbacks as $priority => $callbacks) {
 
29                foreach($entry->callbacks as $priority => $callbacks) {
 
29                foreach($entry->callbacks as $priority => $callbacks) {
30
31                    if($target_callback === false) {
 
36                    $found = $this->find_callbacks($target_callback, $callbacks);
37
38                    if(count($found) > 0) {
 
29                foreach($entry->callbacks as $priority => $callbacks) {
 
29                foreach($entry->callbacks as $priority => $callbacks) {
 
29                foreach($entry->callbacks as $priority => $callbacks) {
30
31                    if($target_callback === false) {
32                        $this->add_to_wp_filter_structure($results, $hook_name, $callbacks, $priority);
33                        continue;
34                    }
35
36                    $found = $this->find_callbacks($target_callback, $callbacks);
37
38                    if(count($found) > 0) {
39                        $this->add_to_wp_filter_structure($results, $hook_name, $found, $priority);
40                    }
41
42                }
43            }
44            
45            return;
 
45            return;
46        });
25        array_walk($this->wp_filter, function($entry, $hook_name) use ($hook_names, $target_callback, &$results) {
26            if(in_array($hook_name, $hook_names)) {
 
29                foreach($entry->callbacks as $priority => $callbacks) {
 
29                foreach($entry->callbacks as $priority => $callbacks) {
 
29                foreach($entry->callbacks as $priority => $callbacks) {
30
31                    if($target_callback === false) {
32                        $this->add_to_wp_filter_structure($results, $hook_name, $callbacks, $priority);
33                        continue;
34                    }
35
36                    $found = $this->find_callbacks($target_callback, $callbacks);
37
38                    if(count($found) > 0) {
39                        $this->add_to_wp_filter_structure($results, $hook_name, $found, $priority);
40                    }
41
42                }
43            }
44            
45            return;
 
45            return;
46        });
25        array_walk($this->wp_filter, function($entry, $hook_name) use ($hook_names, $target_callback, &$results) {
26            if(in_array($hook_name, $hook_names)) {
 
29                foreach($entry->callbacks as $priority => $callbacks) {
 
29                foreach($entry->callbacks as $priority => $callbacks) {
30
31                    if($target_callback === false) {
32                        $this->add_to_wp_filter_structure($results, $hook_name, $callbacks, $priority);
33                        continue;
34                    }
35
36                    $found = $this->find_callbacks($target_callback, $callbacks);
37
38                    if(count($found) > 0) {
39                        $this->add_to_wp_filter_structure($results, $hook_name, $found, $priority);
40                    }
41
42                }
43            }
44            
45            return;
 
45            return;
46        });
25        array_walk($this->wp_filter, function($entry, $hook_name) use ($hook_names, $target_callback, &$results) {
26            if(in_array($hook_name, $hook_names)) {
 
45            return;
46        });