continue; } if ( ! is_array( $value ) ) { continue; } $keys[] = $key; $values[ $key ] = $this->addValueToValuesArray( $defaults, $value, $keys, $sanitize ); array_pop( $keys ); } return $values; } /** * Our options array has values (or defaults). * This method converts them to how we would store them in the DB. * * @since 1.0.0 * * @param array $options The options array. * @return array The converted options array. */ public function convertOptionsToValues( $options, $optionKey = 'type' ) { foreach ( $options as $key => $value ) { if ( ! is_array( $value ) ) { continue; } if ( ! isset( $value[ $optionKey ] ) ) { $options[ $key ] = $this->convertOptionsToValues( $value, $optionKey ); continue; } $options[ $key ] = null; if ( isset( $value['value'] ) ) { $preserveHtml = ! empty( $value['preserveHtml'] ); if ( $preserveHtml ) { if ( is_array( $value['value'] ) ) { foreach ( $value['value'] as $k => $v ) { $value['value'][ $k ] = aioseoBrokenLinkChecker()->helpers->decodeHtmlEntities( $v ); } } else { $value['value'] = aioseoBrokenLinkChecker()->helpers->decodeHtmlEntities( $value['value'] ); } } $options[ $key ] = $value['value']; continue; } if ( isset( $value['default'] ) ) { $options[ $key ] = $value['default']; } } return $options; } /** * This checks to see if the current array/option is really an option * and not just another parent with a subgroup. * * @since 1.0.0 * * @param string $key The current array key we are working with. * @param array $defaults The defaults array to check against. * @param array $keys The parent keys to loop through. * @return bool Whether or not this is an option. */ private function isAnOption( $key, $defaults, $keys ) { if ( ! empty( $keys ) ) { foreach ( $keys as $k ) { $defaults = isset( $defaults[ $k ] ) ? $defaults[ $k ] : []; } } if ( isset( $defaults[ $key ]['type'] ) ) { return $defaults[ $key ]; } return false; } /** * Refreshes the options from the database. * * We need this during the migration to update through clones. * * @since 1.0.0 * * @return void */ public function refresh() { // Reset DB options to clear the cache. aioseoBrokenLinkChecker()->core->optionsCache->resetDb(); $this->init(); } /** * Returns the DB options. * * @since 1.0.0 * * @param string $optionsName The options name. * @return array The options. */ public function getDbOptions( $optionsName ) { $cache = aioseoBrokenLinkChecker()->core->optionsCache->getDb( $optionsName ); if ( empty( $cache ) ) { // NOTE: get_option() can return a non-string (e.g. an array from a row stored // unencoded), which fatals in json_decode() on PHP 8+. $dbOptions = get_option( $optionsName ); if ( is_string( $dbOptions ) ) { $options = json_decode( $dbOptions, true ); } else { // Row holds a non-string value (typically a serialized array left by an // external tool: WP-CLI `--format=json`, site migration plugin, etc.). // Use the data as-is and mark the instance dirty so the shutdown save // rewrites the row as JSON — self-heals the corrupted storage. $options = is_array( $dbOptions ) ? $dbOptions : []; $this->shouldSave = true; } $options = ! empty( $options ) ? $options : []; // Set the cache. aioseoBrokenLinkChecker()->core->optionsCache->setDb( $optionsName, $options ); } return aioseoBrokenLinkChecker()->core->optionsCache->getDb( $optionsName ); } /** * In order to not have a conflict, we need to return a clone. * * @since 1.0.0 * * @return \AIOSEO\BrokenLinkChecker\Options\Options The cloned Options object. */ public function noConflict() { $class = clone $this; $class->isClone = true; return $class; } /** * Get original instance. Since this could be a cloned object, let's get the original instance. * * @since 1.0.0 * * @return self */ public function getOriginalInstance() { if ( ! $this->isClone ) { return $this; } $class = new \ReflectionClass( get_called_class() ); $optionName = aioseoBrokenLinkChecker()->helpers->toCamelCase( $class->getShortName() ); if ( isset( aioseoBrokenLinkChecker()->{ $optionName } ) ) { return aioseoBrokenLinkChecker()->{ $optionName }; } return $this; } }
Fatal error: Trait 'AIOSEO\BrokenLinkChecker\Traits\Options' not found in /home/teifazm3/domains/teifazma.com/public_html/wp-content/plugins/broken-link-checker-seo/app/Options/InternalOptions.php on line 16