Conditions | 36 |
Paths | 1202 |
Total Lines | 166 |
Lines | 0 |
Ratio | 0 % |
Changes | 0 |
Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.
For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.
Commonly applied refactorings include:
If many parameters/temporary variables are present:
1 | <?php |
||
21 | public static function ao_ccss_enqueue( $hash ) { |
||
22 | $self = new self(); |
||
23 | // Get key status. |
||
24 | $key = autoptimizeCriticalCSSCore::ao_ccss_key_status( false ); |
||
25 | |||
26 | // Queue is available to anyone... |
||
27 | $enqueue = true; |
||
28 | |||
29 | // ... which are not the ones below. |
||
30 | if ( is_user_logged_in() || is_feed() || is_404() || ( defined( 'DOING_AJAX' ) && DOING_AJAX ) || $self->ao_ccss_ua() || 'nokey' == $key['status'] || 'invalid' == $key['status'] ) { |
||
31 | $enqueue = false; |
||
32 | autoptimizeCriticalCSSCore::ao_ccss_log( "Job queuing is not available for WordPress's logged in users, feeds, error pages, ajax calls, to criticalcss.com itself or when a valid API key is not found", 3 ); |
||
33 | } |
||
34 | |||
35 | if ( $enqueue ) { |
||
36 | // Continue if queue is available |
||
37 | // Attach required arrays/ vars. |
||
38 | global $ao_ccss_rules; |
||
39 | global $ao_ccss_queue_raw; |
||
40 | global $ao_ccss_queue; |
||
41 | global $ao_ccss_forcepath; |
||
42 | |||
43 | // Get request path and page type, and initialize the queue update flag. |
||
44 | $req_path = strtok( $_SERVER['REQUEST_URI'], '?' ); |
||
45 | $req_type = $self->ao_ccss_get_type(); |
||
46 | $job_qualify = false; |
||
47 | $target_rule = false; |
||
48 | $rule_properties = false; |
||
49 | $queue_update = false; |
||
50 | |||
51 | // Match for paths in rules. |
||
52 | foreach ( $ao_ccss_rules['paths'] as $path => $props ) { |
||
53 | |||
54 | // Prepare rule target and log. |
||
55 | $target_rule = 'paths|' . $path; |
||
56 | autoptimizeCriticalCSSCore::ao_ccss_log( 'Qualifying path <' . $req_path . '> for job submission by rule <' . $target_rule . '>', 3 ); |
||
57 | |||
58 | // Path match |
||
59 | // -> exact match needed for AUTO rules |
||
60 | // -> partial match OK for MANUAL rules (which have empty hash and a file with CCSS). |
||
61 | if ( $path === $req_path || ( false == $props['hash'] && false != $props['file'] && preg_match( '|' . $path . '|', $req_path ) ) ) { |
||
62 | |||
63 | // There's a path match in the rule, so job QUALIFIES with a path rule match. |
||
64 | $job_qualify = true; |
||
65 | $rule_properties = $props; |
||
66 | autoptimizeCriticalCSSCore::ao_ccss_log( 'Path <' . $req_path . '> QUALIFIED for job submission by rule <' . $target_rule . '>', 3 ); |
||
67 | |||
68 | // Stop processing other path rules. |
||
69 | break; |
||
70 | } |
||
71 | } |
||
72 | |||
73 | // Match for types in rules if no path rule matches and if we're not enforcing paths. |
||
74 | if ( ! $job_qualify && ( ! $ao_ccss_forcepath || ! in_array( $req_type, apply_filters( 'autoptimize_filter_ccss_coreenqueue_forcepathfortype', array( 'is_page' ) ) ) ) ) { |
||
75 | foreach ( $ao_ccss_rules['types'] as $type => $props ) { |
||
76 | |||
77 | // Prepare rule target and log. |
||
78 | $target_rule = 'types|' . $type; |
||
79 | autoptimizeCriticalCSSCore::ao_ccss_log( 'Qualifying page type <' . $req_type . '> on path <' . $req_path . '> for job submission by rule <' . $target_rule . '>', 3 ); |
||
80 | |||
81 | if ( $req_type == $type ) { |
||
82 | // Type match. |
||
83 | // There's a type match in the rule, so job QUALIFIES with a type rule match. |
||
84 | $job_qualify = true; |
||
85 | $rule_properties = $props; |
||
86 | autoptimizeCriticalCSSCore::ao_ccss_log( 'Page type <' . $req_type . '> on path <' . $req_path . '> QUALIFIED for job submission by rule <' . $target_rule . '>', 3 ); |
||
87 | |||
88 | // Stop processing other type rules. |
||
89 | break; |
||
90 | } |
||
91 | } |
||
92 | } |
||
93 | |||
94 | if ( $job_qualify && false == $rule_properties['hash'] && false != $rule_properties['file'] ) { |
||
95 | // If job qualifies but rule hash is false and file isn't false (MANUAL rule), job does not qualify despite what previous evaluations says. |
||
96 | $job_qualify = false; |
||
97 | autoptimizeCriticalCSSCore::ao_ccss_log( 'Job submission DISQUALIFIED by MANUAL rule <' . $target_rule . '> with hash <' . $rule_properties['hash'] . '> and file <' . $rule_properties['file'] . '>', 3 ); |
||
98 | } elseif ( ! $job_qualify && empty( $rule_properties ) ) { |
||
99 | // But if job does not qualify and rule properties are set, job qualifies as there is no matching rule for it yet |
||
100 | // Fill-in the new target rule. |
||
101 | $job_qualify = true; |
||
102 | |||
103 | // Should we switch to path-base AUTO-rules? Conditions: |
||
104 | // 1. forcepath option has to be enabled (off by default) |
||
105 | // 2. request type should be (by default, but filterable) one of is_page (removed for now: woo_is_product or woo_is_product_category). |
||
106 | if ( $ao_ccss_forcepath && in_array( $req_type, apply_filters( 'autoptimize_filter_ccss_coreenqueue_forcepathfortype', array( 'is_page' ) ) ) ) { |
||
107 | if ( '/' !== $req_path ) { |
||
108 | $target_rule = 'paths|' . $req_path; |
||
109 | } else { |
||
110 | // Exception; we don't want a path-based rule for "/" as that messes things up, hard-switch this to a type-based is_front_page rule. |
||
111 | $target_rule = 'types|' . 'is_front_page'; |
||
112 | } |
||
113 | } else { |
||
114 | $target_rule = 'types|' . $req_type; |
||
115 | } |
||
116 | autoptimizeCriticalCSSCore::ao_ccss_log( 'Job submission QUALIFIED by MISSING rule for page type <' . $req_type . '> on path <' . $req_path . '>, new rule target is <' . $target_rule . '>', 3 ); |
||
117 | } else { |
||
118 | // Or just log a job qualified by a matching rule. |
||
119 | autoptimizeCriticalCSSCore::ao_ccss_log( 'Job submission QUALIFIED by AUTO rule <' . $target_rule . '> with hash <' . $rule_properties['hash'] . '> and file <' . $rule_properties['file'] . '>', 3 ); |
||
120 | } |
||
121 | |||
122 | // Submit job. |
||
123 | if ( $job_qualify ) { |
||
124 | if ( ! array_key_exists( $req_path, $ao_ccss_queue ) ) { |
||
125 | // This is a NEW job |
||
126 | // Merge job into the queue. |
||
127 | $ao_ccss_queue[ $req_path ] = $self->ao_ccss_define_job( |
||
128 | $req_path, |
||
129 | $target_rule, |
||
130 | $req_type, |
||
131 | $hash, |
||
132 | null, |
||
133 | null, |
||
134 | null, |
||
135 | null, |
||
136 | true |
||
137 | ); |
||
138 | // Set update flag. |
||
139 | $queue_update = true; |
||
140 | } else { |
||
141 | // This is an existing job |
||
142 | // The job is still NEW, most likely this is extra CSS file for the same page that needs a hash. |
||
143 | if ( 'NEW' == $ao_ccss_queue[ $req_path ]['jqstat'] ) { |
||
144 | // Add hash if it's not already in the job. |
||
145 | if ( ! in_array( $hash, $ao_ccss_queue[ $req_path ]['hashes'] ) ) { |
||
146 | // Push new hash to its array and update flag. |
||
147 | $queue_update = array_push( $ao_ccss_queue[ $req_path ]['hashes'], $hash ); |
||
|
|||
148 | |||
149 | // Log job update. |
||
150 | autoptimizeCriticalCSSCore::ao_ccss_log( 'Hashes UPDATED on local job id <' . $ao_ccss_queue[ $req_path ]['ljid'] . '>, job status NEW, target rule <' . $ao_ccss_queue[ $req_path ]['rtarget'] . '>, hash added: ' . $hash, 3 ); |
||
151 | |||
152 | // Return from here as the hash array is already updated. |
||
153 | return true; |
||
154 | } |
||
155 | } elseif ( 'NEW' != $ao_ccss_queue[ $req_path ]['jqstat'] && 'JOB_QUEUED' != $ao_ccss_queue[ $req_path ]['jqstat'] && 'JOB_ONGOING' != $ao_ccss_queue[ $req_path ]['jqstat'] ) { |
||
156 | // Allow requeuing jobs that are not NEW, JOB_QUEUED or JOB_ONGOING |
||
157 | // Merge new job keeping some previous job values. |
||
158 | $ao_ccss_queue[ $req_path ] = $self->ao_ccss_define_job( |
||
159 | $req_path, |
||
160 | $target_rule, |
||
161 | $req_type, |
||
162 | $hash, |
||
163 | $ao_ccss_queue[ $req_path ]['file'], |
||
164 | $ao_ccss_queue[ $req_path ]['jid'], |
||
165 | $ao_ccss_queue[ $req_path ]['jrstat'], |
||
166 | $ao_ccss_queue[ $req_path ]['jvstat'], |
||
167 | false |
||
168 | ); |
||
169 | // Set update flag. |
||
170 | $queue_update = true; |
||
171 | } |
||
172 | } |
||
173 | |||
174 | if ( $queue_update ) { |
||
175 | // Persist the job to the queue and return. |
||
176 | $ao_ccss_queue_raw = json_encode( $ao_ccss_queue ); |
||
177 | update_option( 'autoptimize_ccss_queue', $ao_ccss_queue_raw, false ); |
||
178 | return true; |
||
179 | } else { |
||
180 | // Or just return false if no job was added. |
||
181 | autoptimizeCriticalCSSCore::ao_ccss_log( 'A job for path <' . $req_path . '> already exist with NEW or PENDING status, skipping job creation', 3 ); |
||
182 | return false; |
||
183 | } |
||
184 | } |
||
185 | } |
||
186 | } |
||
187 | |||
283 |
This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.
Both the
$myVar
assignment in line 1 and the$higher
assignment in line 2 are dead. The first because$myVar
is never used and the second because$higher
is always overwritten for every possible time line.