core->db ->start( 'aioseo_crawl_cleanup_blocked_args' ) ->where( 'key_value_hash', sha1( $keyValue ) ) ->run() ->model( 'AIOSEO\\Plugin\\Common\\Models\\CrawlCleanupBlockedArg' ); } /** * Get Blocked row using Regex Value. * * @since 4.5.8 * * @param string $regex The regex value to search. * @return CrawlCleanupBlockedArg The CrawlCleanupBlockedArg object. */ public static function getByRegex( $regex ) { return aioseo()->core->db ->start( 'aioseo_crawl_cleanup_blocked_args' ) ->where( 'regex', $regex ) ->run() ->model( 'AIOSEO\\Plugin\\Common\\Models\\CrawlCleanupBlockedArg' ); } /** * Look for regex match by key and value. * * @since 4.5.8 * * @param string $key The key to search. * @param string $value The value to search. * @return CrawlCleanupBlockedArg The CrawlCleanupBlockedArg object. */ public static function matchRegex( $key, $value ) { $keyValue = self::getKeyValueString( $key, $value ); $regexBlockedArgs = self::getRegexBlockedArgs(); foreach ( $regexBlockedArgs as $regexQueryArg ) { $escapedRegex = str_replace( '@', '\@', $regexQueryArg->regex ); if ( preg_match( "@{$escapedRegex}@", (string) $keyValue ) ) { return new CrawlCleanupBlockedArg( $regexQueryArg->id ); } } return new CrawlCleanupBlockedArg(); } /** * Get Regex rows. * * @since 4.5.8 * * @return CrawlCleanupBlockedArg The CrawlCleanupBlockedArg object. */ public static function getRegexBlockedArgs() { if ( null === self::$regexBlockedArgs ) { self::$regexBlockedArgs = aioseo()->core->db ->start( 'aioseo_crawl_cleanup_blocked_args' ) ->select( 'id, regex' ) ->where( 'regex IS NOT', null ) ->run() ->result(); } return self::$regexBlockedArgs; } /** * Transforms data as needed. * * @since 4.5.8 * * @param array $data The data array to transform. * @return array The transformed data. */ protected function transform( $data, $set = false ) { $data = parent::transform( $data, $set ); // Create key+value hash. if ( ! empty( $data['key'] ) ) { $keyValue = self::getKeyValueString( $data['key'], $data['value'] ); $data['key_value_hash'] = sha1( $keyValue ); } // Case hits number are empty start with 0. if ( empty( $data['hits'] ) ) { $data['hits'] = 0; } return $data; } /** * Increase hits and save. * * @since 4.5.8 * */ public function addHit() { if ( $this->id ) { $this->hits++; parent::save(); } } /** * Return string with key and value with pattern model defined. * * @since 4.5.8 * * @param string $key The key to merge. * @param string $value The value to merge. * @return string The result string merging key and value (case not empty). */ public static function getKeyValueString( $key, $value ) { return $key . ( $value ? self::getKeyValueSeparator() . $value : '' ); } /** * Return string to separate key and value. * * @since 4.5.8 * * @return string The separator for key and value. */ public static function getKeyValueSeparator() { return self::$keyValueSeparator; } }