Changeset 3342338
- Timestamp:
- 08/10/2025 02:15:24 PM (7 months ago)
- Location:
- wp-ulike/trunk
- Files:
-
- 98 added
- 16 edited
-
assets/js/wp-ulike.js (modified) (1 diff)
-
includes/classes/class-wp-ulike-activator.php (modified) (1 diff)
-
includes/classes/class-wp-ulike-cta-process.php (modified) (1 diff)
-
includes/classes/class-wp-ulike-cta-template.php (modified) (1 diff)
-
includes/classes/class-wp-ulike-entities-process.php (modified) (9 diffs)
-
includes/functions/queries.php (modified) (1 diff)
-
includes/functions/utilities.php (modified) (1 diff)
-
includes/plugin.php (modified) (1 diff)
-
readme.txt (modified) (2 diffs)
-
vendor/composer/autoload_classmap.php (modified) (1 diff)
-
vendor/composer/autoload_files.php (added)
-
vendor/composer/autoload_psr4.php (modified) (1 diff)
-
vendor/composer/autoload_real.php (modified) (1 diff)
-
vendor/composer/autoload_static.php (modified) (3 diffs)
-
vendor/composer/installed.json (modified) (1 diff)
-
vendor/composer/installed.php (modified) (2 diffs)
-
vendor/matomo (added)
-
vendor/matomo/device-detector (added)
-
vendor/matomo/device-detector/Cache (added)
-
vendor/matomo/device-detector/Cache/CacheInterface.php (added)
-
vendor/matomo/device-detector/Cache/DoctrineBridge.php (added)
-
vendor/matomo/device-detector/Cache/LaravelCache.php (added)
-
vendor/matomo/device-detector/Cache/PSR16Bridge.php (added)
-
vendor/matomo/device-detector/Cache/PSR6Bridge.php (added)
-
vendor/matomo/device-detector/Cache/StaticCache.php (added)
-
vendor/matomo/device-detector/ClientHints.php (added)
-
vendor/matomo/device-detector/DeviceDetector.php (added)
-
vendor/matomo/device-detector/LICENSE (added)
-
vendor/matomo/device-detector/Parser (added)
-
vendor/matomo/device-detector/Parser/AbstractBotParser.php (added)
-
vendor/matomo/device-detector/Parser/AbstractParser.php (added)
-
vendor/matomo/device-detector/Parser/Bot.php (added)
-
vendor/matomo/device-detector/Parser/Client (added)
-
vendor/matomo/device-detector/Parser/Client/AbstractClientParser.php (added)
-
vendor/matomo/device-detector/Parser/Client/Browser (added)
-
vendor/matomo/device-detector/Parser/Client/Browser.php (added)
-
vendor/matomo/device-detector/Parser/Client/Browser/Engine (added)
-
vendor/matomo/device-detector/Parser/Client/Browser/Engine.php (added)
-
vendor/matomo/device-detector/Parser/Client/Browser/Engine/Version.php (added)
-
vendor/matomo/device-detector/Parser/Client/FeedReader.php (added)
-
vendor/matomo/device-detector/Parser/Client/Hints (added)
-
vendor/matomo/device-detector/Parser/Client/Hints/AppHints.php (added)
-
vendor/matomo/device-detector/Parser/Client/Hints/BrowserHints.php (added)
-
vendor/matomo/device-detector/Parser/Client/Library.php (added)
-
vendor/matomo/device-detector/Parser/Client/MediaPlayer.php (added)
-
vendor/matomo/device-detector/Parser/Client/MobileApp.php (added)
-
vendor/matomo/device-detector/Parser/Client/PIM.php (added)
-
vendor/matomo/device-detector/Parser/Device (added)
-
vendor/matomo/device-detector/Parser/Device/AbstractDeviceParser.php (added)
-
vendor/matomo/device-detector/Parser/Device/Camera.php (added)
-
vendor/matomo/device-detector/Parser/Device/CarBrowser.php (added)
-
vendor/matomo/device-detector/Parser/Device/Console.php (added)
-
vendor/matomo/device-detector/Parser/Device/HbbTv.php (added)
-
vendor/matomo/device-detector/Parser/Device/Mobile.php (added)
-
vendor/matomo/device-detector/Parser/Device/Notebook.php (added)
-
vendor/matomo/device-detector/Parser/Device/PortableMediaPlayer.php (added)
-
vendor/matomo/device-detector/Parser/Device/ShellTv.php (added)
-
vendor/matomo/device-detector/Parser/OperatingSystem.php (added)
-
vendor/matomo/device-detector/Parser/VendorFragment.php (added)
-
vendor/matomo/device-detector/Yaml (added)
-
vendor/matomo/device-detector/Yaml/ParserInterface.php (added)
-
vendor/matomo/device-detector/Yaml/Pecl.php (added)
-
vendor/matomo/device-detector/Yaml/Spyc.php (added)
-
vendor/matomo/device-detector/Yaml/Symfony.php (added)
-
vendor/matomo/device-detector/autoload.php (added)
-
vendor/matomo/device-detector/phpcs.xml (added)
-
vendor/matomo/device-detector/regexes (added)
-
vendor/matomo/device-detector/regexes/bots.yml (added)
-
vendor/matomo/device-detector/regexes/client (added)
-
vendor/matomo/device-detector/regexes/client/browser_engine.yml (added)
-
vendor/matomo/device-detector/regexes/client/browsers.yml (added)
-
vendor/matomo/device-detector/regexes/client/feed_readers.yml (added)
-
vendor/matomo/device-detector/regexes/client/hints (added)
-
vendor/matomo/device-detector/regexes/client/hints/apps.yml (added)
-
vendor/matomo/device-detector/regexes/client/hints/browsers.yml (added)
-
vendor/matomo/device-detector/regexes/client/libraries.yml (added)
-
vendor/matomo/device-detector/regexes/client/mediaplayers.yml (added)
-
vendor/matomo/device-detector/regexes/client/mobile_apps.yml (added)
-
vendor/matomo/device-detector/regexes/client/pim.yml (added)
-
vendor/matomo/device-detector/regexes/device (added)
-
vendor/matomo/device-detector/regexes/device/cameras.yml (added)
-
vendor/matomo/device-detector/regexes/device/car_browsers.yml (added)
-
vendor/matomo/device-detector/regexes/device/consoles.yml (added)
-
vendor/matomo/device-detector/regexes/device/mobiles.yml (added)
-
vendor/matomo/device-detector/regexes/device/notebooks.yml (added)
-
vendor/matomo/device-detector/regexes/device/portable_media_player.yml (added)
-
vendor/matomo/device-detector/regexes/device/shell_tv.yml (added)
-
vendor/matomo/device-detector/regexes/device/televisions.yml (added)
-
vendor/matomo/device-detector/regexes/oss.yml (added)
-
vendor/matomo/device-detector/regexes/vendorfragments.yml (added)
-
vendor/mustangostang (added)
-
vendor/mustangostang/spyc (added)
-
vendor/mustangostang/spyc/COPYING (added)
-
vendor/mustangostang/spyc/Spyc.php (added)
-
vendor/mustangostang/spyc/examples (added)
-
vendor/mustangostang/spyc/examples/yaml-dump.php (added)
-
vendor/mustangostang/spyc/examples/yaml-load.php (added)
-
vendor/mustangostang/spyc/php4 (added)
-
vendor/mustangostang/spyc/php4/5to4.php (added)
-
vendor/mustangostang/spyc/php4/spyc.php4 (added)
-
vendor/mustangostang/spyc/php4/test.php4 (added)
-
vendor/mustangostang/spyc/phpunit.xml (added)
-
vendor/mustangostang/spyc/spyc.yaml (added)
-
vendor/mustangostang/spyc/tests (added)
-
vendor/mustangostang/spyc/tests/DumpTest.php (added)
-
vendor/mustangostang/spyc/tests/IndentTest.php (added)
-
vendor/mustangostang/spyc/tests/LoadTest.php (added)
-
vendor/mustangostang/spyc/tests/ParseTest.php (added)
-
vendor/mustangostang/spyc/tests/RoundTripTest.php (added)
-
vendor/mustangostang/spyc/tests/comments.yaml (added)
-
vendor/mustangostang/spyc/tests/failing1.yaml (added)
-
vendor/mustangostang/spyc/tests/indent_1.yaml (added)
-
vendor/mustangostang/spyc/tests/quotes.yaml (added)
-
wp-ulike.php (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
wp-ulike/trunk/assets/js/wp-ulike.js
r3251532 r3342338 1 /*! WP ULike - v4.7. 9.11 /*! WP ULike - v4.7.10 2 2 * https://wpulike.com 3 3 * TechnoWich 2025; -
wp-ulike/trunk/includes/classes/class-wp-ulike-activator.php
r3215648 r3342338 210 210 } 211 211 212 public function upgrade_3(){ 213 // Extract table names 214 extract( $this->tables ); 215 216 // Add 'fingerprint' column to posts table 217 $this->database->query( " 218 ALTER TABLE $posts 219 ADD COLUMN `fingerprint` VARCHAR(64) DEFAULT NULL AFTER `user_id`; 220 " ); 221 222 // Add 'fingerprint' column to comments table 223 $this->database->query( " 224 ALTER TABLE $comments 225 ADD COLUMN `fingerprint` VARCHAR(64) DEFAULT NULL AFTER `user_id`; 226 " ); 227 228 // Add 'fingerprint' column to activities table 229 $this->database->query( " 230 ALTER TABLE $activities 231 ADD COLUMN `fingerprint` VARCHAR(64) DEFAULT NULL AFTER `user_id`, 232 ADD INDEX (`fingerprint`); 233 " ); 234 235 // Add 'fingerprint' column to forums table 236 $this->database->query( " 237 ALTER TABLE $forums 238 ADD COLUMN `fingerprint` VARCHAR(64) DEFAULT NULL AFTER `user_id`; 239 " ); 240 241 // Update db version 242 update_option( 'wp_ulike_dbVersion', '2.4' ); 243 } 244 245 212 246 /** 213 247 * Return an instance of this class. -
wp-ulike/trunk/includes/classes/class-wp-ulike-cta-process.php
r3215648 r3342338 84 84 // Check permission 85 85 if( ! $this->hasPermission( array( 86 'item_id' => $this->parsedArgs['item_id'], 87 'type' => $this->settings->getType(), 88 'current_user' => $this->getCurrentUser(), 89 'current_status' => $this->getCurrentStatus(), 90 'prev_status' => $this->getPrevStatus(), 91 'method' => 'process' 86 'item_id' => $this->parsedArgs['item_id'], 87 'type' => $this->settings->getType(), 88 'current_user' => $this->getCurrentUser(), 89 'current_status' => $this->getCurrentStatus(), 90 'prev_status' => $this->getPrevStatus(), 91 'current_finger_print' => $this->getCurrentFingerPrint(), 92 'method' => 'process' 92 93 ), $this->settings ) ){ 93 94 return false; -
wp-ulike/trunk/includes/classes/class-wp-ulike-cta-template.php
r3215648 r3342338 52 52 53 53 if( ! $this->hasPermission( array( 54 'item_id' => $this->args['id'], 55 'type' => $this->args['slug'], 56 'current_user' => $this->getCurrentUser(), 57 'prev_status' => $this->getPrevStatus(), 58 'method' => 'lookup' 54 'item_id' => $this->args['id'], 55 'type' => $this->args['slug'], 56 'current_user' => $this->getCurrentUser(), 57 'prev_status' => $this->getPrevStatus(), 58 'current_finger_print' => $this->getCurrentFingerPrint(), 59 'method' => 'lookup' 59 60 ), $this->settings ) ){ 60 61 // If has prev status -
wp-ulike/trunk/includes/classes/class-wp-ulike-entities-process.php
r3250832 r3342338 22 22 protected $prevStatus; 23 23 protected $currentIP; 24 protected $currentFingerPrint; 24 25 protected $currentUser; 25 26 protected $typeSettings; … … 48 49 $this->setCurrentUser( $parsed_args['user_id'] ); 49 50 $this->setItemMethod( $parsed_args['item_method'] ); 51 $this->setCurrentFingerPrint(); 50 52 51 53 // Set type settings … … 60 62 protected function setCurrentIP( $user_ip ){ 61 63 $this->currentIP = $user_ip === NULL ? wp_ulike_get_user_ip() : $user_ip; 64 } 65 66 /** 67 * Set current user IP 68 * 69 * @return void 70 */ 71 protected function setCurrentFingerPrint(){ 72 $this->currentFingerPrint = wp_ulike_generate_fingerprint(); 62 73 } 63 74 … … 109 120 $this->currentUser = $user_id; 110 121 } 122 } 123 124 /** 125 * Get current user finger print 126 * 127 * @return string 128 */ 129 public function getCurrentFingerPrint(){ 130 return $this->currentFingerPrint; 111 131 } 112 132 … … 197 217 198 218 /** 199 * Check permission access 219 * Check permission access with bot + fingerprint protection 200 220 * 201 221 * @param array $args 222 * @param object $settings 202 223 * @return boolean 203 224 */ 204 225 public static function hasPermission( $args, $settings ){ 205 // Get loggin method 226 // Default status 227 $status = true; 228 229 // Check bot status first 230 if ( wp_ulike_is_bot_request() ) { 231 return false; 232 } 233 234 // Check for logging method 206 235 $method = wp_ulike_setting_repo::getMethod( $args['type'] ); 207 // Status check point 208 $status = true; 209 210 if ( in_array( $method, array( 'do_not_log' ) ) ) { 211 $user_item_count = wp_ulike_get_user_item_count_per_day( array( 212 "item_id" => $args['item_id'], 213 "current_user" => $args['current_user'], 214 "settings" => $settings 215 ) ); 216 217 if ( $user_item_count >= wp_ulike_setting_repo::getVoteLimitNumber( $args['type'] ) ) { 218 $status = false; 219 } 220 } 221 222 // Check cookie permission 223 if( in_array( $method, array( 'by_cookie', 'by_user_ip_cookie' ) ) ){ 224 $has_cookie = false; 236 237 // check cookie existense 238 $has_cookie = false; 239 240 if ( in_array( $method, array( 'by_cookie', 'by_user_ip_cookie' ) ) ) { 225 241 $cookie_key = sanitize_key( 'wp_ulike_' . md5( $args['type'] . '_logs' ) ); 226 242 $cookie_data = self::getDecodedCookieData( $cookie_key ); … … 235 251 $has_cookie = true; 236 252 } 237 // support old cookies238 253 } elseif ( isset( $_COOKIE[ $settings->getCookieName() . $args['item_id'] ] ) ) { 239 254 $status = false; … … 241 256 } 242 257 243 // Check user permission 244 if( $method === 'by_user_ip_cookie' ){ 245 $cookie_hash = array_keys( $cookie_data ); 246 247 foreach ($cookie_hash as $value) { 258 if ( $method === 'by_user_ip_cookie' ) { 259 $cookie_hash = array_keys( $cookie_data ); 260 foreach ( $cookie_hash as $value ) { 248 261 if ( ! empty( $cookie_data[ $value ][ $args['item_id'] ] ) ) { 249 262 if ( is_numeric( $cookie_data[ $value ][ $args['item_id'] ] ) && $current_time >= $cookie_data[ $value ][ $args['item_id'] ] ) { … … 259 272 } 260 273 261 // set cookie on process method 262 if( ! $has_cookie && $args['method'] === 'process' ){ 263 // Get current time 274 if ( ! $has_cookie && $args['method'] === 'process' ) { 264 275 $cookie_expire = wp_ulike_setting_repo::getCookieExpiration( $args['type'] ); 265 276 266 if ( empty( $cookie_data ) ){277 if ( empty( $cookie_data ) ) { 267 278 $cookie_data = array( $user_hash => array( 268 279 $args['item_id'] => $cookie_expire 269 280 ) ); 270 281 } else { 271 foreach ( $cookie_data as $hash => $info) {272 if ( ! isset( $info[$args['item_id']] ) && $hash != $user_hash ){282 foreach ( $cookie_data as $hash => $info ) { 283 if ( ! isset( $info[$args['item_id']] ) && $hash != $user_hash ) { 273 284 $cookie_data[ $user_hash ][ $args['item_id'] ] = $cookie_expire; 274 } elseif ( $hash == $user_hash ) {285 } elseif ( $hash == $user_hash ) { 275 286 $cookie_data[ $hash ][ $args['item_id'] ] = $cookie_expire; 276 287 } 277 288 } 278 289 } 290 279 291 wp_ulike_setcookie( $cookie_key, wp_json_encode( $cookie_data ), time() + 2147483647 ); 280 292 } 281 293 } 282 294 295 // Fingerprint check for guests or requests without cookies 296 if ( ! is_user_logged_in() && $args['method'] === 'process' && in_array( $method, ['do_not_log', 'by_cookie'] ) ) { 297 298 $fingerprint_count = wp_ulike_count_current_fingerprint( 299 $args['current_finger_print'], 300 $args['item_id'], 301 $args['type'] 302 ); 303 304 if ( ! empty( $fingerprint_count ) ) { 305 if ( $method === 'do_not_log' ) { 306 if ( $fingerprint_count >= wp_ulike_setting_repo::getVoteLimitNumber( $args['type'] ) ) { 307 $status = false; 308 } 309 } elseif ( ! $has_cookie && $method === 'by_cookie' ) { 310 if ( $fingerprint_count >= 1 ) { 311 $status = false; 312 } 313 } 314 } 315 } 316 317 283 318 return apply_filters( 'wp_ulike_permission_status', $status, $args, $settings ); 284 319 } 320 285 321 286 322 /** … … 314 350 $data = array( 315 351 $this->typeSettings->getColumnName() => $item_id, 316 'date_time' => current_time( 'mysql' ), 317 'ip' => $this->maybeAnonymiseIp( $this->currentIP ), 318 'user_id' => $this->currentUser, 319 'status' => $this->currentStatus 352 'date_time' => current_time( 'mysql' ), 353 'ip' => $this->maybeAnonymiseIp( $this->currentIP ), 354 'user_id' => $this->currentUser, 355 'fingerprint' => $this->currentFingerPrint, 356 'status' => $this->currentStatus 320 357 ); 321 $format = array( '%d', '%s', '%s', '%s', '%s' ); // Adjust format specifiers358 $format = array( '%d', '%s', '%s', '%s', '%s', '%s' ); // Adjust format specifiers 322 359 323 360 $row = $this->wpdb->insert( $table, $data, $format ); -
wp-ulike/trunk/includes/functions/queries.php
r3215648 r3342338 920 920 } 921 921 } 922 923 if( ! function_exists('wp_ulike_count_current_fingerprint') ){ 924 /** 925 * Check if user fingerprint has exceeded vote limit for the given item. 926 * 927 * Uses WordPress object caching to minimize DB queries. 928 * 929 * @param int $current_fingerprint 930 * @param int $item_id 931 * @param string $type 932 * @return integer 933 */ 934 function wp_ulike_count_current_fingerprint( $current_fingerprint, $item_id, $type ) { 935 global $wpdb; 936 // Sanitize key & prepare cache key 937 $cache_key = 'fingerprint_' . md5( $type . '_' . $item_id . '_' . $current_fingerprint ); 938 939 // Try to get from cache 940 $existing_count = wp_cache_get( $cache_key, WP_ULIKE_SLUG ); 941 $settings = new wp_ulike_setting_type( $type ); 942 943 if ( false === $existing_count ) { 944 $table = $wpdb->prefix . $settings->getTableName(); 945 946 $existing_count = (int) $wpdb->get_var( $wpdb->prepare( 947 "SELECT COUNT(*) FROM {$table} WHERE {$settings->getColumnName()} = %d AND fingerprint = %s", 948 $item_id, 949 $current_fingerprint 950 ) ); 951 952 // Store in cache to avoid repeated queries for same request 953 wp_cache_add( $cache_key, $existing_count, WP_ULIKE_SLUG, 10 ); // TTL = 10 seconds 954 } 955 956 return (int) $existing_count; 957 } 958 } -
wp-ulike/trunk/includes/functions/utilities.php
r3215648 r3342338 460 460 461 461 } 462 463 if( ! function_exists('wp_ulike_generate_fingerprint') ){ 464 /** 465 * Generate a secure fingerprint hash for the current user/device session. 466 * 467 * This function uses a combination of the real IP address, user agent, 468 * accept-language, and selected HTTP headers to generate a unique and consistent 469 * fingerprint per device. It also parses the user agent using DeviceDetector 470 * to extract client and OS information. If a bot is detected, the function returns false. 471 * 472 * @return string|false The hashed fingerprint string, or false if the client is a bot. 473 */ 474 function wp_ulike_generate_fingerprint() { 475 // Get real IP address (never trust spoofed headers) 476 $ip = $_SERVER['REMOTE_ADDR'] ?? '0.0.0.0'; 477 478 // Basic request headers 479 $user_agent = $_SERVER['HTTP_USER_AGENT'] ?? ''; 480 $accept_language = $_SERVER['HTTP_ACCEPT_LANGUAGE'] ?? ''; 481 482 if (empty($accept_language)) { 483 $accept_language = 'unknown-lang'; 484 } 485 486 // Initialize DeviceDetector to parse the User-Agent 487 $dd = new \DeviceDetector\DeviceDetector($user_agent); 488 $dd->parse(); 489 490 // Extract client and OS info 491 $client_info = $dd->getClient(); // ['name' => ..., 'version' => ...] 492 $os_info = $dd->getOs(); // ['name' => ..., 'version' => ...] 493 494 $client_name = $client_info['name'] ?? 'unknown-client'; 495 $client_version = $client_info['version'] ?? '0.0'; 496 $os_name = $os_info['name'] ?? 'unknown-os'; 497 $os_version = $os_info['version'] ?? '0.0'; 498 499 // Extra entropy from request headers (helps resist spoofing) 500 $header_signature = hash('sha256', json_encode([ 501 $_SERVER['HTTP_ACCEPT_ENCODING'] ?? '', 502 $_SERVER['HTTP_CONNECTION'] ?? '', 503 $_SERVER['HTTP_CACHE_CONTROL'] ?? '', 504 ])); 505 506 // Combine all parts into a unique source string 507 $fingerprint_source = implode('|', [ 508 $ip, 509 $client_name, 510 $client_version, 511 $os_name, 512 $os_version, 513 $accept_language, 514 $header_signature 515 ]); 516 517 // Return an md5 hash of the fingerprint source 518 return md5($fingerprint_source); 519 } 520 } 521 522 if( ! function_exists('wp_ulike_is_bot_request') ){ 523 /** 524 * Check if current request is a bot 525 * 526 * @return bool 527 */ 528 function wp_ulike_is_bot_request(){ 529 $user_agent = $_SERVER['HTTP_USER_AGENT'] ?? ''; 530 $device = new \DeviceDetector\DeviceDetector($user_agent); 531 $device->parse(); 532 return $device->isBot(); 533 } 534 } -
wp-ulike/trunk/includes/plugin.php
r3250832 r3342338 69 69 wp_ulike_activator::get_instance()->upgrade_2(); 70 70 } 71 if ( version_compare( $current_version, '2.4', '<' ) ) { 72 wp_ulike_activator::get_instance()->upgrade_3(); 73 } 71 74 } 72 75 -
wp-ulike/trunk/readme.txt
r3251532 r3342338 6 6 Requires PHP: 7.2.5 7 7 Requires at least: 6.0 8 Tested up to: 6. 79 Stable tag: 4.7. 9.18 Tested up to: 6.8 9 Stable tag: 4.7.10 10 10 License: GPLv2 or later 11 11 License URI: http://www.gnu.org/licenses/gpl-2.0.html … … 95 95 == Changelog == 96 96 97 = 4.7.10 = 98 * Improved: Added additional fingerprint + cookie presence check for 'cookie' & 'no limit' logging methods to further reduce the chance of automated/bot submissions without valid cookies. This was not a security vulnerability, but a preventive hardening measure to improve vote integrity. 99 97 100 = 4.7.9.1 = 98 101 Fixed: Critical HTML sanitization issue. -
wp-ulike/trunk/vendor/composer/autoload_classmap.php
r3052611 r3342338 8 8 return array( 9 9 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php', 10 'DeviceDetector\\Cache\\CacheInterface' => $vendorDir . '/matomo/device-detector/Cache/CacheInterface.php', 11 'DeviceDetector\\Cache\\DoctrineBridge' => $vendorDir . '/matomo/device-detector/Cache/DoctrineBridge.php', 12 'DeviceDetector\\Cache\\LaravelCache' => $vendorDir . '/matomo/device-detector/Cache/LaravelCache.php', 13 'DeviceDetector\\Cache\\PSR16Bridge' => $vendorDir . '/matomo/device-detector/Cache/PSR16Bridge.php', 14 'DeviceDetector\\Cache\\PSR6Bridge' => $vendorDir . '/matomo/device-detector/Cache/PSR6Bridge.php', 15 'DeviceDetector\\Cache\\StaticCache' => $vendorDir . '/matomo/device-detector/Cache/StaticCache.php', 16 'DeviceDetector\\ClientHints' => $vendorDir . '/matomo/device-detector/ClientHints.php', 17 'DeviceDetector\\DeviceDetector' => $vendorDir . '/matomo/device-detector/DeviceDetector.php', 18 'DeviceDetector\\Parser\\AbstractBotParser' => $vendorDir . '/matomo/device-detector/Parser/AbstractBotParser.php', 19 'DeviceDetector\\Parser\\AbstractParser' => $vendorDir . '/matomo/device-detector/Parser/AbstractParser.php', 20 'DeviceDetector\\Parser\\Bot' => $vendorDir . '/matomo/device-detector/Parser/Bot.php', 21 'DeviceDetector\\Parser\\Client\\AbstractClientParser' => $vendorDir . '/matomo/device-detector/Parser/Client/AbstractClientParser.php', 22 'DeviceDetector\\Parser\\Client\\Browser' => $vendorDir . '/matomo/device-detector/Parser/Client/Browser.php', 23 'DeviceDetector\\Parser\\Client\\Browser\\Engine' => $vendorDir . '/matomo/device-detector/Parser/Client/Browser/Engine.php', 24 'DeviceDetector\\Parser\\Client\\Browser\\Engine\\Version' => $vendorDir . '/matomo/device-detector/Parser/Client/Browser/Engine/Version.php', 25 'DeviceDetector\\Parser\\Client\\FeedReader' => $vendorDir . '/matomo/device-detector/Parser/Client/FeedReader.php', 26 'DeviceDetector\\Parser\\Client\\Hints\\AppHints' => $vendorDir . '/matomo/device-detector/Parser/Client/Hints/AppHints.php', 27 'DeviceDetector\\Parser\\Client\\Hints\\BrowserHints' => $vendorDir . '/matomo/device-detector/Parser/Client/Hints/BrowserHints.php', 28 'DeviceDetector\\Parser\\Client\\Library' => $vendorDir . '/matomo/device-detector/Parser/Client/Library.php', 29 'DeviceDetector\\Parser\\Client\\MediaPlayer' => $vendorDir . '/matomo/device-detector/Parser/Client/MediaPlayer.php', 30 'DeviceDetector\\Parser\\Client\\MobileApp' => $vendorDir . '/matomo/device-detector/Parser/Client/MobileApp.php', 31 'DeviceDetector\\Parser\\Client\\PIM' => $vendorDir . '/matomo/device-detector/Parser/Client/PIM.php', 32 'DeviceDetector\\Parser\\Device\\AbstractDeviceParser' => $vendorDir . '/matomo/device-detector/Parser/Device/AbstractDeviceParser.php', 33 'DeviceDetector\\Parser\\Device\\Camera' => $vendorDir . '/matomo/device-detector/Parser/Device/Camera.php', 34 'DeviceDetector\\Parser\\Device\\CarBrowser' => $vendorDir . '/matomo/device-detector/Parser/Device/CarBrowser.php', 35 'DeviceDetector\\Parser\\Device\\Console' => $vendorDir . '/matomo/device-detector/Parser/Device/Console.php', 36 'DeviceDetector\\Parser\\Device\\HbbTv' => $vendorDir . '/matomo/device-detector/Parser/Device/HbbTv.php', 37 'DeviceDetector\\Parser\\Device\\Mobile' => $vendorDir . '/matomo/device-detector/Parser/Device/Mobile.php', 38 'DeviceDetector\\Parser\\Device\\Notebook' => $vendorDir . '/matomo/device-detector/Parser/Device/Notebook.php', 39 'DeviceDetector\\Parser\\Device\\PortableMediaPlayer' => $vendorDir . '/matomo/device-detector/Parser/Device/PortableMediaPlayer.php', 40 'DeviceDetector\\Parser\\Device\\ShellTv' => $vendorDir . '/matomo/device-detector/Parser/Device/ShellTv.php', 41 'DeviceDetector\\Parser\\OperatingSystem' => $vendorDir . '/matomo/device-detector/Parser/OperatingSystem.php', 42 'DeviceDetector\\Parser\\VendorFragment' => $vendorDir . '/matomo/device-detector/Parser/VendorFragment.php', 43 'DeviceDetector\\Yaml\\ParserInterface' => $vendorDir . '/matomo/device-detector/Yaml/ParserInterface.php', 44 'DeviceDetector\\Yaml\\Pecl' => $vendorDir . '/matomo/device-detector/Yaml/Pecl.php', 45 'DeviceDetector\\Yaml\\Spyc' => $vendorDir . '/matomo/device-detector/Yaml/Spyc.php', 46 'DeviceDetector\\Yaml\\Symfony' => $vendorDir . '/matomo/device-detector/Yaml/Symfony.php', 10 47 'Psr\\Http\\Message\\MessageInterface' => $vendorDir . '/psr/http-message/src/MessageInterface.php', 11 48 'Psr\\Http\\Message\\RequestInterface' => $vendorDir . '/psr/http-message/src/RequestInterface.php', -
wp-ulike/trunk/vendor/composer/autoload_psr4.php
r3052611 r3342338 9 9 'Vectorface\\Whip\\' => array($vendorDir . '/vectorface/whip/src'), 10 10 'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src'), 11 'DeviceDetector\\' => array($vendorDir . '/matomo/device-detector'), 11 12 ); -
wp-ulike/trunk/vendor/composer/autoload_real.php
r3052611 r3342338 32 32 $loader->register(true); 33 33 34 $includeFiles = \Composer\Autoload\ComposerStaticInitc58ba4e8ae01fe624f24a47c3b1dc47f::$files; 35 foreach ($includeFiles as $fileIdentifier => $file) { 36 composerRequirec58ba4e8ae01fe624f24a47c3b1dc47f($fileIdentifier, $file); 37 } 38 34 39 return $loader; 35 40 } 36 41 } 42 43 /** 44 * @param string $fileIdentifier 45 * @param string $file 46 * @return void 47 */ 48 function composerRequirec58ba4e8ae01fe624f24a47c3b1dc47f($fileIdentifier, $file) 49 { 50 if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { 51 $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; 52 53 require $file; 54 } 55 } -
wp-ulike/trunk/vendor/composer/autoload_static.php
r2621001 r3342338 7 7 class ComposerStaticInitc58ba4e8ae01fe624f24a47c3b1dc47f 8 8 { 9 public static $files = array ( 10 '04c6c5c2f7095ccf6c481d3e53e1776f' => __DIR__ . '/..' . '/mustangostang/spyc/Spyc.php', 11 ); 12 9 13 public static $prefixLengthsPsr4 = array ( 10 14 'V' => … … 15 19 array ( 16 20 'Psr\\Http\\Message\\' => 17, 21 ), 22 'D' => 23 array ( 24 'DeviceDetector\\' => 15, 17 25 ), 18 26 ); … … 27 35 0 => __DIR__ . '/..' . '/psr/http-message/src', 28 36 ), 37 'DeviceDetector\\' => 38 array ( 39 0 => __DIR__ . '/..' . '/matomo/device-detector', 40 ), 29 41 ); 30 42 31 43 public static $classMap = array ( 32 44 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', 45 'DeviceDetector\\Cache\\CacheInterface' => __DIR__ . '/..' . '/matomo/device-detector/Cache/CacheInterface.php', 46 'DeviceDetector\\Cache\\DoctrineBridge' => __DIR__ . '/..' . '/matomo/device-detector/Cache/DoctrineBridge.php', 47 'DeviceDetector\\Cache\\LaravelCache' => __DIR__ . '/..' . '/matomo/device-detector/Cache/LaravelCache.php', 48 'DeviceDetector\\Cache\\PSR16Bridge' => __DIR__ . '/..' . '/matomo/device-detector/Cache/PSR16Bridge.php', 49 'DeviceDetector\\Cache\\PSR6Bridge' => __DIR__ . '/..' . '/matomo/device-detector/Cache/PSR6Bridge.php', 50 'DeviceDetector\\Cache\\StaticCache' => __DIR__ . '/..' . '/matomo/device-detector/Cache/StaticCache.php', 51 'DeviceDetector\\ClientHints' => __DIR__ . '/..' . '/matomo/device-detector/ClientHints.php', 52 'DeviceDetector\\DeviceDetector' => __DIR__ . '/..' . '/matomo/device-detector/DeviceDetector.php', 53 'DeviceDetector\\Parser\\AbstractBotParser' => __DIR__ . '/..' . '/matomo/device-detector/Parser/AbstractBotParser.php', 54 'DeviceDetector\\Parser\\AbstractParser' => __DIR__ . '/..' . '/matomo/device-detector/Parser/AbstractParser.php', 55 'DeviceDetector\\Parser\\Bot' => __DIR__ . '/..' . '/matomo/device-detector/Parser/Bot.php', 56 'DeviceDetector\\Parser\\Client\\AbstractClientParser' => __DIR__ . '/..' . '/matomo/device-detector/Parser/Client/AbstractClientParser.php', 57 'DeviceDetector\\Parser\\Client\\Browser' => __DIR__ . '/..' . '/matomo/device-detector/Parser/Client/Browser.php', 58 'DeviceDetector\\Parser\\Client\\Browser\\Engine' => __DIR__ . '/..' . '/matomo/device-detector/Parser/Client/Browser/Engine.php', 59 'DeviceDetector\\Parser\\Client\\Browser\\Engine\\Version' => __DIR__ . '/..' . '/matomo/device-detector/Parser/Client/Browser/Engine/Version.php', 60 'DeviceDetector\\Parser\\Client\\FeedReader' => __DIR__ . '/..' . '/matomo/device-detector/Parser/Client/FeedReader.php', 61 'DeviceDetector\\Parser\\Client\\Hints\\AppHints' => __DIR__ . '/..' . '/matomo/device-detector/Parser/Client/Hints/AppHints.php', 62 'DeviceDetector\\Parser\\Client\\Hints\\BrowserHints' => __DIR__ . '/..' . '/matomo/device-detector/Parser/Client/Hints/BrowserHints.php', 63 'DeviceDetector\\Parser\\Client\\Library' => __DIR__ . '/..' . '/matomo/device-detector/Parser/Client/Library.php', 64 'DeviceDetector\\Parser\\Client\\MediaPlayer' => __DIR__ . '/..' . '/matomo/device-detector/Parser/Client/MediaPlayer.php', 65 'DeviceDetector\\Parser\\Client\\MobileApp' => __DIR__ . '/..' . '/matomo/device-detector/Parser/Client/MobileApp.php', 66 'DeviceDetector\\Parser\\Client\\PIM' => __DIR__ . '/..' . '/matomo/device-detector/Parser/Client/PIM.php', 67 'DeviceDetector\\Parser\\Device\\AbstractDeviceParser' => __DIR__ . '/..' . '/matomo/device-detector/Parser/Device/AbstractDeviceParser.php', 68 'DeviceDetector\\Parser\\Device\\Camera' => __DIR__ . '/..' . '/matomo/device-detector/Parser/Device/Camera.php', 69 'DeviceDetector\\Parser\\Device\\CarBrowser' => __DIR__ . '/..' . '/matomo/device-detector/Parser/Device/CarBrowser.php', 70 'DeviceDetector\\Parser\\Device\\Console' => __DIR__ . '/..' . '/matomo/device-detector/Parser/Device/Console.php', 71 'DeviceDetector\\Parser\\Device\\HbbTv' => __DIR__ . '/..' . '/matomo/device-detector/Parser/Device/HbbTv.php', 72 'DeviceDetector\\Parser\\Device\\Mobile' => __DIR__ . '/..' . '/matomo/device-detector/Parser/Device/Mobile.php', 73 'DeviceDetector\\Parser\\Device\\Notebook' => __DIR__ . '/..' . '/matomo/device-detector/Parser/Device/Notebook.php', 74 'DeviceDetector\\Parser\\Device\\PortableMediaPlayer' => __DIR__ . '/..' . '/matomo/device-detector/Parser/Device/PortableMediaPlayer.php', 75 'DeviceDetector\\Parser\\Device\\ShellTv' => __DIR__ . '/..' . '/matomo/device-detector/Parser/Device/ShellTv.php', 76 'DeviceDetector\\Parser\\OperatingSystem' => __DIR__ . '/..' . '/matomo/device-detector/Parser/OperatingSystem.php', 77 'DeviceDetector\\Parser\\VendorFragment' => __DIR__ . '/..' . '/matomo/device-detector/Parser/VendorFragment.php', 78 'DeviceDetector\\Yaml\\ParserInterface' => __DIR__ . '/..' . '/matomo/device-detector/Yaml/ParserInterface.php', 79 'DeviceDetector\\Yaml\\Pecl' => __DIR__ . '/..' . '/matomo/device-detector/Yaml/Pecl.php', 80 'DeviceDetector\\Yaml\\Spyc' => __DIR__ . '/..' . '/matomo/device-detector/Yaml/Spyc.php', 81 'DeviceDetector\\Yaml\\Symfony' => __DIR__ . '/..' . '/matomo/device-detector/Yaml/Symfony.php', 33 82 'Psr\\Http\\Message\\MessageInterface' => __DIR__ . '/..' . '/psr/http-message/src/MessageInterface.php', 34 83 'Psr\\Http\\Message\\RequestInterface' => __DIR__ . '/..' . '/psr/http-message/src/RequestInterface.php', -
wp-ulike/trunk/vendor/composer/installed.json
r2621001 r3342338 1 1 { 2 2 "packages": [ 3 { 4 "name": "matomo/device-detector", 5 "version": "6.4.6", 6 "version_normalized": "6.4.6.0", 7 "source": { 8 "type": "git", 9 "url": "https://github.com/matomo-org/device-detector.git", 10 "reference": "6f07f615199851548db47a900815d2ea2cdcde08" 11 }, 12 "dist": { 13 "type": "zip", 14 "url": "https://api.github.com/repos/matomo-org/device-detector/zipball/6f07f615199851548db47a900815d2ea2cdcde08", 15 "reference": "6f07f615199851548db47a900815d2ea2cdcde08", 16 "shasum": "" 17 }, 18 "require": { 19 "mustangostang/spyc": "*", 20 "php": "^7.2|^8.0" 21 }, 22 "replace": { 23 "piwik/device-detector": "self.version" 24 }, 25 "require-dev": { 26 "matthiasmullie/scrapbook": "^1.4.7", 27 "mayflower/mo4-coding-standard": "^v9.0.0", 28 "phpstan/phpstan": "^1.10.44", 29 "phpunit/phpunit": "^8.5.8", 30 "psr/cache": "^1.0.1", 31 "psr/simple-cache": "^1.0.1", 32 "slevomat/coding-standard": "<8.16.0", 33 "symfony/yaml": "^5.1.7" 34 }, 35 "suggest": { 36 "doctrine/cache": "Can directly be used for caching purpose", 37 "ext-yaml": "Necessary for using the Pecl YAML parser" 38 }, 39 "time": "2025-06-10T10:00:59+00:00", 40 "type": "library", 41 "installation-source": "dist", 42 "autoload": { 43 "psr-4": { 44 "DeviceDetector\\": "" 45 }, 46 "exclude-from-classmap": [ 47 "Tests/" 48 ] 49 }, 50 "notification-url": "https://packagist.org/downloads/", 51 "license": [ 52 "LGPL-3.0-or-later" 53 ], 54 "authors": [ 55 { 56 "name": "The Matomo Team", 57 "email": "hello@matomo.org", 58 "homepage": "https://matomo.org/team/" 59 } 60 ], 61 "description": "The Universal Device Detection library, that parses User Agents and detects devices (desktop, tablet, mobile, tv, cars, console, etc.), clients (browsers, media players, mobile apps, feed readers, libraries, etc), operating systems, devices, brands and models.", 62 "homepage": "https://matomo.org", 63 "keywords": [ 64 "devicedetection", 65 "parser", 66 "useragent" 67 ], 68 "support": { 69 "forum": "https://forum.matomo.org/", 70 "issues": "https://github.com/matomo-org/device-detector/issues", 71 "source": "https://github.com/matomo-org/matomo", 72 "wiki": "https://dev.matomo.org/" 73 }, 74 "install-path": "../matomo/device-detector" 75 }, 76 { 77 "name": "mustangostang/spyc", 78 "version": "0.6.3", 79 "version_normalized": "0.6.3.0", 80 "source": { 81 "type": "git", 82 "url": "https://github.com/mustangostang/spyc.git", 83 "reference": "4627c838b16550b666d15aeae1e5289dd5b77da0" 84 }, 85 "dist": { 86 "type": "zip", 87 "url": "https://api.github.com/repos/mustangostang/spyc/zipball/4627c838b16550b666d15aeae1e5289dd5b77da0", 88 "reference": "4627c838b16550b666d15aeae1e5289dd5b77da0", 89 "shasum": "" 90 }, 91 "require": { 92 "php": ">=5.3.1" 93 }, 94 "require-dev": { 95 "phpunit/phpunit": "4.3.*@dev" 96 }, 97 "time": "2019-09-10T13:16:29+00:00", 98 "type": "library", 99 "extra": { 100 "branch-alias": { 101 "dev-master": "0.5.x-dev" 102 } 103 }, 104 "installation-source": "dist", 105 "autoload": { 106 "files": [ 107 "Spyc.php" 108 ] 109 }, 110 "notification-url": "https://packagist.org/downloads/", 111 "license": [ 112 "MIT" 113 ], 114 "authors": [ 115 { 116 "name": "mustangostang", 117 "email": "vlad.andersen@gmail.com" 118 } 119 ], 120 "description": "A simple YAML loader/dumper class for PHP", 121 "homepage": "https://github.com/mustangostang/spyc/", 122 "keywords": [ 123 "spyc", 124 "yaml", 125 "yml" 126 ], 127 "support": { 128 "issues": "https://github.com/mustangostang/spyc/issues", 129 "source": "https://github.com/mustangostang/spyc/tree/0.6.3" 130 }, 131 "install-path": "../mustangostang/spyc" 132 }, 3 133 { 4 134 "name": "psr/http-message", -
wp-ulike/trunk/vendor/composer/installed.php
r3052611 r3342338 2 2 'root' => array( 3 3 'name' => 'alimir/wp-ulike', 4 'pretty_version' => 'dev- develop',5 'version' => 'dev- develop',6 'reference' => ' c76435f4074ec7010a6e4a1b1a5e5e297390c1fe',4 'pretty_version' => 'dev-master', 5 'version' => 'dev-master', 6 'reference' => '80637c2b09cb04264809b7465eb774f3a56b06b8', 7 7 'type' => 'wordpress-plugin', 8 8 'install_path' => __DIR__ . '/../../', … … 12 12 'versions' => array( 13 13 'alimir/wp-ulike' => array( 14 'pretty_version' => 'dev- develop',15 'version' => 'dev- develop',16 'reference' => ' c76435f4074ec7010a6e4a1b1a5e5e297390c1fe',14 'pretty_version' => 'dev-master', 15 'version' => 'dev-master', 16 'reference' => '80637c2b09cb04264809b7465eb774f3a56b06b8', 17 17 'type' => 'wordpress-plugin', 18 18 'install_path' => __DIR__ . '/../../', 19 19 'aliases' => array(), 20 20 'dev_requirement' => false, 21 ), 22 'matomo/device-detector' => array( 23 'pretty_version' => '6.4.6', 24 'version' => '6.4.6.0', 25 'reference' => '6f07f615199851548db47a900815d2ea2cdcde08', 26 'type' => 'library', 27 'install_path' => __DIR__ . '/../matomo/device-detector', 28 'aliases' => array(), 29 'dev_requirement' => false, 30 ), 31 'mustangostang/spyc' => array( 32 'pretty_version' => '0.6.3', 33 'version' => '0.6.3.0', 34 'reference' => '4627c838b16550b666d15aeae1e5289dd5b77da0', 35 'type' => 'library', 36 'install_path' => __DIR__ . '/../mustangostang/spyc', 37 'aliases' => array(), 38 'dev_requirement' => false, 39 ), 40 'piwik/device-detector' => array( 41 'dev_requirement' => false, 42 'replaced' => array( 43 0 => '6.4.6', 44 ), 21 45 ), 22 46 'psr/http-message' => array( -
wp-ulike/trunk/wp-ulike.php
r3251532 r3342338 4 4 * Plugin URI: https://wpulike.com/?utm_source=wp-plugins&utm_campaign=plugin-uri&utm_medium=wp-dash 5 5 * Description: Looking to increase user engagement on your WordPress site? WP ULike plugin lets you easily add voting buttons to your content. With customizable settings and detailed analytics, you can track user engagement, optimize your content, and build a loyal following. 6 * Version: 4.7. 9.16 * Version: 4.7.10 7 7 * Author: TechnoWich 8 8 * Author URI: https://technowich.com/?utm_source=wp-plugins&utm_campaign=author-uri&utm_medium=wp-dash … … 31 31 // Do not change these values 32 32 define( 'WP_ULIKE_PLUGIN_URI' , 'https://wpulike.com/' ); 33 define( 'WP_ULIKE_VERSION' , '4.7. 9.1');33 define( 'WP_ULIKE_VERSION' , '4.7.10' ); 34 34 define( 'WP_ULIKE_DB_VERSION' , '2.3' ); 35 35 define( 'WP_ULIKE_SLUG' , 'wp-ulike' );
Note: See TracChangeset
for help on using the changeset viewer.