Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
| Total | |
50.00% |
6 / 12 |
|
50.00% |
1 / 2 |
CRAP | |
0.00% |
0 / 1 |
| Validator | |
50.00% |
6 / 12 |
|
50.00% |
1 / 2 |
6.00 | |
0.00% |
0 / 1 |
| validateParams | |
100.00% |
6 / 6 |
|
100.00% |
1 / 1 |
3 | |||
| getValidParams | |
0.00% |
0 / 6 |
|
0.00% |
0 / 1 |
2 | |||
| 1 | <?php |
| 2 | /** |
| 3 | * This program is free software; you can redistribute it and/or modify |
| 4 | * it under the terms of the GNU General Public License as published by |
| 5 | * the Free Software Foundation; either version 2 of the License, or |
| 6 | * (at your option) any later version. |
| 7 | * |
| 8 | * This program is distributed in the hope that it will be useful, |
| 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 11 | * GNU General Public License for more details. |
| 12 | * |
| 13 | * You should have received a copy of the GNU General Public License along |
| 14 | * with this program; if not, write to the Free Software Foundation, Inc., |
| 15 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
| 16 | * |
| 17 | * @file |
| 18 | */ |
| 19 | |
| 20 | declare( strict_types=1 ); |
| 21 | |
| 22 | namespace MediaWiki\Extension\WikiSEO; |
| 23 | |
| 24 | /** |
| 25 | * Class Validator |
| 26 | * |
| 27 | * @package MediaWiki\Extension\WikiSEO |
| 28 | */ |
| 29 | class Validator { |
| 30 | /** |
| 31 | * Valid parameter names across all generators |
| 32 | * @see WikiSEO::mergeValidTags() |
| 33 | * |
| 34 | * @var string[] |
| 35 | */ |
| 36 | public static $validParameterNames = [ |
| 37 | // This needs to be the first entry see getValidParams() |
| 38 | 'hreflang_%', |
| 39 | |
| 40 | 'title', |
| 41 | 'title_mode', |
| 42 | 'title_separator', |
| 43 | |
| 44 | 'keywords', |
| 45 | 'description', |
| 46 | 'canonical', |
| 47 | |
| 48 | 'robots', |
| 49 | 'googlebot', |
| 50 | |
| 51 | 'image', 'image_width', 'image_height', 'image_alt', |
| 52 | |
| 53 | 'type', |
| 54 | 'site_name', |
| 55 | 'locale', |
| 56 | 'section', |
| 57 | 'author', |
| 58 | |
| 59 | 'published_time', |
| 60 | |
| 61 | 'twitter_site', |
| 62 | ]; |
| 63 | |
| 64 | /** |
| 65 | * https://stackoverflow.com/a/3191729 |
| 66 | * |
| 67 | * @var array Language codes |
| 68 | */ |
| 69 | public static $isoLanguageCodes = [ |
| 70 | 'af-za', |
| 71 | 'am-et', |
| 72 | 'ar-ae', |
| 73 | 'ar-bh', |
| 74 | 'ar-dz', |
| 75 | 'ar-eg', |
| 76 | 'ar-iq', |
| 77 | 'ar-jo', |
| 78 | 'ar-kw', |
| 79 | 'ar-lb', |
| 80 | 'ar-ly', |
| 81 | 'ar-ma', |
| 82 | 'arn-cl', |
| 83 | 'ar-om', |
| 84 | 'ar-qa', |
| 85 | 'ar-sa', |
| 86 | 'ar-sy', |
| 87 | 'ar-tn', |
| 88 | 'ar-ye', |
| 89 | 'as-in', |
| 90 | 'az-cyrl-az', |
| 91 | 'az-latn-az', |
| 92 | 'ba-ru', |
| 93 | 'be-by', |
| 94 | 'bg-bg', |
| 95 | 'bn-bd', |
| 96 | 'bn-in', |
| 97 | 'bo-cn', |
| 98 | 'br-fr', |
| 99 | 'bs-cyrl-ba', |
| 100 | 'bs-latn-ba', |
| 101 | 'ca-es', |
| 102 | 'co-fr', |
| 103 | 'cs-cz', |
| 104 | 'cy-gb', |
| 105 | 'da-dk', |
| 106 | 'de-at', |
| 107 | 'de-ch', |
| 108 | 'de-de', |
| 109 | 'de-li', |
| 110 | 'de-lu', |
| 111 | 'dsb-de', |
| 112 | 'dv-mv', |
| 113 | 'el-gr', |
| 114 | 'en-029', |
| 115 | 'en-au', |
| 116 | 'en-bz', |
| 117 | 'en-ca', |
| 118 | 'en-gb', |
| 119 | 'en-ie', |
| 120 | 'en-in', |
| 121 | 'en-jm', |
| 122 | 'en-my', |
| 123 | 'en-nz', |
| 124 | 'en-ph', |
| 125 | 'en-sg', |
| 126 | 'en-tt', |
| 127 | 'en-us', |
| 128 | 'en-za', |
| 129 | 'en-zw', |
| 130 | 'es-ar', |
| 131 | 'es-bo', |
| 132 | 'es-cl', |
| 133 | 'es-co', |
| 134 | 'es-cr', |
| 135 | 'es-do', |
| 136 | 'es-ec', |
| 137 | 'es-es', |
| 138 | 'es-gt', |
| 139 | 'es-hn', |
| 140 | 'es-mx', |
| 141 | 'es-ni', |
| 142 | 'es-pa', |
| 143 | 'es-pe', |
| 144 | 'es-pr', |
| 145 | 'es-py', |
| 146 | 'es-sv', |
| 147 | 'es-us', |
| 148 | 'es-uy', |
| 149 | 'es-ve', |
| 150 | 'et-ee', |
| 151 | 'eu-es', |
| 152 | 'fa-ir', |
| 153 | 'fi-fi', |
| 154 | 'fil-ph', |
| 155 | 'fo-fo', |
| 156 | 'fr-be', |
| 157 | 'fr-ca', |
| 158 | 'fr-ch', |
| 159 | 'fr-fr', |
| 160 | 'fr-lu', |
| 161 | 'fr-mc', |
| 162 | 'fy-nl', |
| 163 | 'ga-ie', |
| 164 | 'gd-gb', |
| 165 | 'gl-es', |
| 166 | 'gsw-fr', |
| 167 | 'gu-in', |
| 168 | 'ha-latn-ng', |
| 169 | 'he-il', |
| 170 | 'hi-in', |
| 171 | 'hr-ba', |
| 172 | 'hr-hr', |
| 173 | 'hsb-de', |
| 174 | 'hu-hu', |
| 175 | 'hy-am', |
| 176 | 'id-id', |
| 177 | 'ig-ng', |
| 178 | 'ii-cn', |
| 179 | 'is-is', |
| 180 | 'it-ch', |
| 181 | 'it-it', |
| 182 | 'iu-cans-ca', |
| 183 | 'iu-latn-ca', |
| 184 | 'ja-jp', |
| 185 | 'ka-ge', |
| 186 | 'kk-kz', |
| 187 | 'kl-gl', |
| 188 | 'km-kh', |
| 189 | 'kn-in', |
| 190 | 'kok-in', |
| 191 | 'ko-kr', |
| 192 | 'ky-kg', |
| 193 | 'lb-lu', |
| 194 | 'lo-la', |
| 195 | 'lt-lt', |
| 196 | 'lv-lv', |
| 197 | 'mi-nz', |
| 198 | 'mk-mk', |
| 199 | 'ml-in', |
| 200 | 'mn-mn', |
| 201 | 'mn-mong-cn', |
| 202 | 'moh-ca', |
| 203 | 'mr-in', |
| 204 | 'ms-bn', |
| 205 | 'ms-my', |
| 206 | 'mt-mt', |
| 207 | 'nb-no', |
| 208 | 'ne-np', |
| 209 | 'nl-be', |
| 210 | 'nl-nl', |
| 211 | 'nn-no', |
| 212 | 'nso-za', |
| 213 | 'oc-fr', |
| 214 | 'or-in', |
| 215 | 'pa-in', |
| 216 | 'pl-pl', |
| 217 | 'prs-af', |
| 218 | 'ps-af', |
| 219 | 'pt-br', |
| 220 | 'pt-pt', |
| 221 | 'qut-gt', |
| 222 | 'quz-bo', |
| 223 | 'quz-ec', |
| 224 | 'quz-pe', |
| 225 | 'rm-ch', |
| 226 | 'ro-ro', |
| 227 | 'ru-ru', |
| 228 | 'rw-rw', |
| 229 | 'sah-ru', |
| 230 | 'sa-in', |
| 231 | 'se-fi', |
| 232 | 'se-no', |
| 233 | 'se-se', |
| 234 | 'si-lk', |
| 235 | 'sk-sk', |
| 236 | 'sl-si', |
| 237 | 'sma-no', |
| 238 | 'sma-se', |
| 239 | 'smj-no', |
| 240 | 'smj-se', |
| 241 | 'smn-fi', |
| 242 | 'sms-fi', |
| 243 | 'sq-al', |
| 244 | 'sr-cyrl-ba', |
| 245 | 'sr-cyrl-cs', |
| 246 | 'sr-cyrl-me', |
| 247 | 'sr-cyrl-rs', |
| 248 | 'sr-latn-ba', |
| 249 | 'sr-latn-cs', |
| 250 | 'sr-latn-me', |
| 251 | 'sr-latn-rs', |
| 252 | 'sv-fi', |
| 253 | 'sv-se', |
| 254 | 'sw-ke', |
| 255 | 'syr-sy', |
| 256 | 'ta-in', |
| 257 | 'te-in', |
| 258 | 'tg-cyrl-tj', |
| 259 | 'th-th', |
| 260 | 'tk-tm', |
| 261 | 'tn-za', |
| 262 | 'tr-tr', |
| 263 | 'tt-ru', |
| 264 | 'tzm-latn-dz', |
| 265 | 'ug-cn', |
| 266 | 'uk-ua', |
| 267 | 'ur-pk', |
| 268 | 'uz-cyrl-uz', |
| 269 | 'uz-latn-uz', |
| 270 | 'vi-vn', |
| 271 | 'wo-sn', |
| 272 | 'xh-za', |
| 273 | 'yo-ng', |
| 274 | 'zh-cn', |
| 275 | 'zh-hk', |
| 276 | 'zh-mo', |
| 277 | 'zh-sg', |
| 278 | 'zh-tw', |
| 279 | 'zu-za', |
| 280 | ]; |
| 281 | |
| 282 | /** |
| 283 | * Removes all params that are not in $validParameterNames |
| 284 | * |
| 285 | * @param array $params Raw params |
| 286 | * @return array Validated params |
| 287 | */ |
| 288 | public static function validateParams( array $params ): array { |
| 289 | $validatedParams = []; |
| 290 | $validParams = static::getValidParams(); |
| 291 | |
| 292 | foreach ( $params as $paramKey => $paramData ) { |
| 293 | if ( in_array( $paramKey, $validParams, true ) ) { |
| 294 | $validatedParams[$paramKey] = $paramData; |
| 295 | } |
| 296 | } |
| 297 | |
| 298 | return $validatedParams; |
| 299 | } |
| 300 | |
| 301 | /** |
| 302 | * Returns an array containing valid parameter names for use in WikiSEO |
| 303 | * |
| 304 | * @return string[] |
| 305 | */ |
| 306 | public static function getValidParams(): array { |
| 307 | $params = self::$validParameterNames; |
| 308 | |
| 309 | $hreflang = array_shift( $params ); |
| 310 | $params += array_map( static function ( $langCode ) use ( $hreflang ) { |
| 311 | return sprintf( $hreflang . 's', $langCode ); |
| 312 | }, self::$isoLanguageCodes ); |
| 313 | |
| 314 | return $params; |
| 315 | } |
| 316 | } |