| Server IP : 188.114.97.2 / Your IP : 104.23.197.230 Web Server : Apache/2.4.59 (Debian) System : Linux EDL-STRETCH 4.19.0-27-amd64 #1 SMP Debian 4.19.316-1 (2024-06-25) x86_64 User : edlftp ( 1002) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /home/nicolasj/www/blog.ecoledelangues.be/wp-content/plugins/wordpress-seo/src/models/ |
Upload File : |
<?php
/**
* Model for the Indexable table.
*
* @package Yoast\YoastSEO\Models
*/
namespace Yoast\WP\Free\Models;
use Yoast\WP\Free\Exceptions\No_Indexable_Found;
use Yoast\WP\Free\Loggers\Logger;
use Yoast\WP\Free\Yoast_Model;
/**
* Indexable table definition.
*
* @property int $id
* @property int $object_id
* @property string $object_type
* @property string $object_sub_type
*
* @property string $created_at
* @property string $updated_at
*
* @property string $permalink
* @property string $canonical
* @property int $content_score
*
* @property boolean $is_robots_noindex
* @property boolean $is_robots_nofollow
* @property boolean $is_robots_noarchive
* @property boolean $is_robots_noimageindex
* @property boolean $is_robots_nosnippet
*
* @property string $title
* @property string $description
* @property string $breadcrumb_title
*
* @property boolean $is_cornerstone
*
* @property string $primary_focus_keyword
* @property int $primary_focus_keyword_score
*
* @property int $readability_score
*
* @property int $link_count
* @property int $incoming_link_count
*/
class Indexable extends Yoast_Model {
/**
* The Indexable meta data.
*
* @var \Yoast\WP\Free\Models\Indexable_Meta[]
*/
protected $meta_data;
/**
* Retrieves an indexable by its ID and type.
*
* @param int $object_id The indexable object ID.
* @param string $object_type The indexable object type.
* @param bool $auto_create Optional. Create the indexable if it does not exist.
*
* @return bool|\Yoast\WP\Free\Models\Indexable Instance of indexable.
*/
public static function find_by_id_and_type( $object_id, $object_type, $auto_create = true ) {
$indexable = Yoast_Model::of_type( 'Indexable' )
->where( 'object_id', $object_id )
->where( 'object_type', $object_type )
->find_one();
if ( $auto_create && ! $indexable ) {
$indexable = self::create_for_id_and_type( $object_id, $object_type );
}
return $indexable;
}
/**
* Creates an indexable by its ID and type.
*
* @param int $object_id The indexable object ID.
* @param string $object_type The indexable object type.
*
* @return bool|\Yoast\WP\Free\Models\Indexable Instance of indexable.
*/
public static function create_for_id_and_type( $object_id, $object_type ) {
/*
* Indexable instance.
*
* @var \Yoast\WP\Free\Models\Indexable $indexable
*/
$indexable = Yoast_Model::of_type( 'Indexable' )->create();
$indexable->object_id = $object_id;
$indexable->object_type = $object_type;
Logger::get_logger()->debug(
\sprintf(
/* translators: 1: object ID; 2: object type. */
\__( 'Indexable created for object %1$s with type %2$s', 'wordpress-seo' ),
$object_id,
$object_type
),
\get_object_vars( $indexable )
);
return $indexable;
}
/**
* Returns the related meta model.
*
* @return \Yoast\WP\Free\Models\Indexable_Meta Array of meta objects.
*/
public function meta() {
try {
return $this->has_many( 'Indexable_Meta', 'indexable_id', 'id' );
}
catch ( \Exception $exception ) {
Logger::get_logger()->info( $exception->getMessage() );
}
return null;
}
/**
* Enhances the save method.
*
* @return boolean True on succes.
*/
public function save() {
if ( ! $this->created_at ) {
$this->created_at = \gmdate( 'Y-m-d H:i:s' );
}
if ( $this->updated_at ) {
$this->updated_at = \gmdate( 'Y-m-d H:i:s' );
}
$saved = parent::save();
if ( $saved ) {
Logger::get_logger()->debug(
\sprintf(
/* translators: 1: object ID; 2: object type. */
\__( 'Indexable saved for object %1$s with type %2$s', 'wordpress-seo' ),
$this->object_id,
$this->object_type
),
\get_object_vars( $this )
);
$this->save_meta();
\do_action( 'wpseo_indexable_saved', $this );
}
return $saved;
}
/**
* Enhances the delete method.
*
* @return boolean True on success.
*/
public function delete() {
$deleted = parent::delete();
if ( $deleted ) {
Logger::get_logger()->debug(
\sprintf(
/* translators: 1: object ID; 2: object type. */
\__( 'Indexable deleted for object %1$s with type %2$s', 'wordpress-seo' ),
$this->object_id,
$this->object_type
),
\get_object_vars( $this )
);
\do_action( 'wpseo_indexable_deleted', $this );
}
return $deleted;
}
/**
* Removes the indexable meta.
*
* @return void
*/
public function delete_meta() {
$meta_data = $this->meta();
$meta_data = (array) $meta_data->find_many();
foreach ( $meta_data as $indexable_meta ) {
$indexable_meta->delete();
}
}
/**
* Sets specific meta data for an indexable.
*
* @param string $meta_key The key to set.
* @param string $meta_value The value to set.
* @param bool $auto_create Optional. Create the indexable if it does not exist.
*
* @return void
*/
public function set_meta( $meta_key, $meta_value, $auto_create = true ) {
$meta = $this->get_meta( $meta_key, $auto_create );
$meta->meta_value = $meta_value;
}
/**
* Saves the meta data.
*
* @return void
*/
protected function save_meta() {
if ( empty( $this->meta_data ) ) {
return;
}
foreach ( $this->meta_data as $meta ) {
$meta->indexable_id = $this->id;
$meta->save();
}
}
/**
* Fetches the indexable meta for a metafield and indexable.
*
* @param string $meta_key The meta key to get object for.
* @param bool $auto_create Optional. Create the indexable if it does not exist.
*
* @return \Yoast\WP\Free\Models\Indexable_Meta
*
* @throws \Yoast\WP\Free\Exceptions\No_Indexable_Found Exception when no Indexable entry could be found.
*/
protected function get_meta( $meta_key, $auto_create = true ) {
$this->initialize_meta();
if ( \array_key_exists( $meta_key, $this->meta_data ) ) {
return $this->meta_data[ $meta_key ];
}
if ( $auto_create ) {
$this->meta_data[ $meta_key ] = Indexable_Meta::create_meta_for_indexable( $this->id, $meta_key );
return $this->meta_data[ $meta_key ];
}
throw No_Indexable_Found::from_meta_key( $meta_key, $this->id );
}
/**
* Initializes the meta data.
*
* @return void
*/
protected function initialize_meta() {
if ( $this->meta_data !== null ) {
return;
}
$this->meta_data = array();
$meta_data = $this->meta();
if ( ! $meta_data ) {
return;
}
try {
$meta_data = (array) $meta_data->find_many();
foreach ( $meta_data as $meta ) {
$this->meta_data[ $meta->meta_key ] = $meta;
}
}
catch ( \Exception $exception ) {
Logger::get_logger()->info( $exception->getMessage() );
}
}
}