���� JFIF    �� �        "" $(4,$&1'-=-157:::#+?D?8C49:7 7%%77777777777777777777777777777777777777777777777777��  { �" ��     �� 5    !1AQa"q�2��BR��#b�������  ��  ��   ? ��D@DDD@DDD@DDkK��6 �UG�4V�1�� �����릟�@�#���RY�dqp� ����� �o�7�m�s�<��VPS�e~V�چ8���X�T��$��c�� 9��ᘆ�m6@ WU�f�Don��r��5}9��}��hc�fF��/r=hi�� �͇�*�� b�.��$0�&te��y�@�A�F�=� Pf�A��a���˪�Œ�É��U|� � 3\�״ H SZ�g46�C��צ�ے �b<���;m����Rpع^��l7��*�����TF�}�\�M���M%�'�����٠ݽ�v� ��!-�����?�N!La��A+[`#���M����'�~oR�?��v^)��=��h����A��X�.���˃����^Ə��ܯsO"B�c>; �e�4��5�k��/CB��.  �J?��;�҈�������������������~�<�VZ�ꭼ2/)Í”jC���ע�V�G�!���!�F������\�� Kj�R�oc�h���:Þ I��1"2�q×°8��Р@ז���_C0�ր��A��lQ��@纼�!7��F�� �]�sZ B�62r�v�z~�K�7�c��5�.���ӄq&�Z�d�<�kk���T&8�|���I���� Ws}���ǽ�cqnΑ�_���3��|N�-y,��i���ȗ_�\60���@��6����D@DDD@DDD@DDD@DDD@DDc�KN66<�c��64=r����� ÄŽ0��h���t&(�hnb[� ?��^��\��â|�,�/h�\��R��5�? �0�!צ܉-����G����٬��Q�zA���1�����V��� �:R���`�$��ik��H����D4�����#dk����� h�}����7���w%�������*o8wG�LycuT�.���ܯ7��I��u^���)��/c�,s�Nq�ۺ�;�ך�YH2���.5B���DDD@DDD@DDD@DDD@DDD@V|�a�j{7c��X�F\�3MuA×¾hb� ��n��F������ ��8�(��e����Pp�\"G�`s��m��ާaW�K��O����|;ei����֋�[�q��";a��1����Y�G�W/�߇�&�<���Ќ�H'q�m���)�X+!���=�m�ۚ丷~6a^X�)���,�>#&6G���Y��{����"" """ """ """ """ ""��at\/�a�8 �yp%�lhl�n����)���i�t��B�������������?��modskinlienminh.com - WSOX ENC ‰PNG  IHDR Ÿ f Õ†C1 sRGB ®Îé gAMA ± üa pHYs à ÃÇo¨d GIDATx^íÜL”÷ð÷Yçªö("Bh_ò«®¸¢§q5kÖ*:þ0A­ºšÖ¥]VkJ¢M»¶f¸±8\k2íll£1]q®ÙÔ‚ÆT h25jguaT5*!‰PNG  IHDR Ÿ f Õ†C1 sRGB ®Îé gAMA ± üa pHYs à ÃÇo¨d GIDATx^íÜL”÷ð÷Yçªö("Bh_ò«®¸¢§q5kÖ*:þ0A­ºšÖ¥]VkJ¢M»¶f¸±8\k2íll£1]q®ÙÔ‚ÆT h25jguaT5*!PK8\<(domain/to-be-cleaned-indexable-count.phpnuW+Acleanup_name = $cleanup_name; $this->count = $count; } /** * Returns an array representation of the data. * * @return array Returns both values in an array format. */ public function to_array() { return [ 'cleanup_name' => $this->get_cleanup_name(), 'count' => $this->get_count(), ]; } /** * Gets the name. * * @return string */ public function get_cleanup_name() { return $this->cleanup_name; } /** * Gets the count. * * @return int Returns the amount of missing indexables. */ public function get_count() { return $this->count; } } PK8\ XP"domain/missing-indexable-count.phpnuW+Aindexable_type = $indexable_type; $this->count = $count; } /** * Returns an array representation of the data. * * @return array Returns both values in an array format. */ public function to_array() { return [ 'indexable_type' => $this->get_indexable_type(), 'count' => $this->get_count(), ]; } /** * Gets the indexable type. * * @return string Returns the indexable type. */ public function get_indexable_type() { return $this->indexable_type; } /** * Gets the count. * * @return int Returns the amount of missing indexables. */ public function get_count() { return $this->count; } } PK8\-#domain/missing-indexable-bucket.phpnuW+A */ private $missing_indexable_counts; /** * The constructor. */ public function __construct() { $this->missing_indexable_counts = []; } /** * Adds a missing indexable count object to this bucket. * * @param Missing_Indexable_Count $missing_indexable_count The missing indexable count object. * * @return void */ public function add_missing_indexable_count( Missing_Indexable_Count $missing_indexable_count ): void { $this->missing_indexable_counts[] = $missing_indexable_count; } /** * Returns the array representation of all indexable counts. * * @return array */ public function to_array() { return \array_map( static function ( $item ) { return $item->to_array(); }, $this->missing_indexable_counts ); } } PK8\[D22)domain/to-be-cleaned-indexable-bucket.phpnuW+A */ private $to_be_cleaned_indexable_counts; /** * The constructor. */ public function __construct() { $this->to_be_cleaned_indexable_counts = []; } /** * Adds a 'to be cleaned' indexable count object to this bucket. * * @param To_Be_Cleaned_Indexable_Count $to_be_cleaned_indexable_counts The to be cleaned indexable count object. * * @return void */ public function add_to_be_cleaned_indexable_count( To_Be_Cleaned_Indexable_Count $to_be_cleaned_indexable_counts ) { $this->to_be_cleaned_indexable_counts[] = $to_be_cleaned_indexable_counts; } /** * Returns the array representation of all indexable counts. * * @return array */ public function to_array() { return \array_map( static function ( $item ) { return $item->to_array(); }, $this->to_be_cleaned_indexable_counts ); } } PK8\زbTT2application/to-be-cleaned-indexables-collector.phpnuW+Aindexable_cleanup_repository = $indexable_cleanup_repository; } /** * Gets the data for the collector. * * @return array */ public function get() { $to_be_cleaned_indexable_bucket = new To_Be_Cleaned_Indexable_Bucket(); $cleanup_tasks = [ 'indexables_with_post_object_type_and_shop_order_object_sub_type' => $this->indexable_cleanup_repository->count_indexables_with_object_type_and_object_sub_type( 'post', 'shop_order' ), 'indexables_with_auto-draft_post_status' => $this->indexable_cleanup_repository->count_indexables_with_post_status( 'auto-draft' ), 'indexables_for_non_publicly_viewable_post' => $this->indexable_cleanup_repository->count_indexables_for_non_publicly_viewable_post(), 'indexables_for_non_publicly_viewable_taxonomies' => $this->indexable_cleanup_repository->count_indexables_for_non_publicly_viewable_taxonomies(), 'indexables_for_non_publicly_viewable_post_type_archive_pages' => $this->indexable_cleanup_repository->count_indexables_for_non_publicly_post_type_archive_pages(), 'indexables_for_authors_archive_disabled' => $this->indexable_cleanup_repository->count_indexables_for_authors_archive_disabled(), 'indexables_for_authors_without_archive' => $this->indexable_cleanup_repository->count_indexables_for_authors_without_archive(), 'indexables_for_object_type_and_source_table_users' => $this->indexable_cleanup_repository->count_indexables_for_orphaned_users(), 'indexables_for_object_type_and_source_table_posts' => $this->indexable_cleanup_repository->count_indexables_for_object_type_and_source_table( 'posts', 'ID', 'post' ), 'indexables_for_object_type_and_source_table_terms' => $this->indexable_cleanup_repository->count_indexables_for_object_type_and_source_table( 'terms', 'term_id', 'term' ), 'orphaned_from_table_indexable_hierarchy' => $this->indexable_cleanup_repository->count_orphaned_from_table( 'Indexable_Hierarchy', 'indexable_id' ), 'orphaned_from_table_indexable_id' => $this->indexable_cleanup_repository->count_orphaned_from_table( 'SEO_Links', 'indexable_id' ), 'orphaned_from_table_target_indexable_id' => $this->indexable_cleanup_repository->count_orphaned_from_table( 'SEO_Links', 'target_indexable_id' ), ]; foreach ( $cleanup_tasks as $name => $count ) { if ( $count !== null ) { $count_object = new To_Be_Cleaned_Indexable_Count( $name, $count ); $to_be_cleaned_indexable_bucket->add_to_be_cleaned_indexable_count( $count_object ); } } $this->add_additional_counts( $to_be_cleaned_indexable_bucket ); return [ 'to_be_cleaned_indexables' => $to_be_cleaned_indexable_bucket->to_array() ]; } /** * Allows additional tasks to be added via the 'wpseo_add_cleanup_counts_to_indexable_bucket' action. * * @param To_Be_Cleaned_Indexable_Bucket $to_be_cleaned_indexable_bucket The current bucket with data. * * @return void */ private function add_additional_counts( $to_be_cleaned_indexable_bucket ) { /** * Action: Adds the possibility to add additional to be cleaned objects. * * @internal * @param To_Be_Cleaned_Indexable_Bucket $bucket An indexable cleanup bucket. New values are instances of To_Be_Cleaned_Indexable_Count. */ \do_action( 'wpseo_add_cleanup_counts_to_indexable_bucket', $to_be_cleaned_indexable_bucket ); } } PK8\EQ Q ,application/missing-indexables-collector.phpnuW+A */ private $indexation_actions; /** * The collector constructor. * * @param Indexation_Action_Interface ...$indexation_actions All the Indexation actions. */ public function __construct( Indexation_Action_Interface ...$indexation_actions ) { $this->indexation_actions = $indexation_actions; $this->add_additional_indexing_actions(); } /** * Gets the data for the tracking collector. * * @return array The list of missing indexables. */ public function get() { $missing_indexable_bucket = new Missing_Indexable_Bucket(); foreach ( $this->indexation_actions as $indexation_action ) { $missing_indexable_count = new Missing_Indexable_Count( \get_class( $indexation_action ), $indexation_action->get_total_unindexed() ); $missing_indexable_bucket->add_missing_indexable_count( $missing_indexable_count ); } return [ 'missing_indexables' => $missing_indexable_bucket->to_array() ]; } /** * Adds additional indexing actions to count from the 'wpseo_indexable_collector_add_indexation_actions' filter. * * @return void */ private function add_additional_indexing_actions() { /** * Filter: Adds the possibility to add additional indexation actions to be included in the count routine. * * @internal * @param Indexation_Action_Interface $actions This filter expects a list of Indexation_Action_Interface instances * and expects only Indexation_Action_Interface implementations to be * added to the list. */ $indexing_actions = (array) \apply_filters( 'wpseo_indexable_collector_add_indexation_actions', $this->indexation_actions ); $this->indexation_actions = \array_filter( $indexing_actions, static function ( $indexing_action ) { return \is_a( $indexing_action, Indexation_Action_Interface::class ); } ); } } PK8\λ8user-interface/last-completed-indexation-integration.phpnuW+Aoptions_helper = $options_helper; } /** * Registers action hook to maybe save an option. * * @return void */ public function register_hooks(): void { \add_action( 'wpseo_indexables_unindexed_calculated', [ $this, 'maybe_set_indexables_unindexed_calculated', ], 10, 2 ); } /** * Saves a timestamp option when there are no unindexed indexables. * * @param string $indexable_name The name of the indexable that is being checked. * @param int $count The amount of missing indexables. * * @return void */ public function maybe_set_indexables_unindexed_calculated( string $indexable_name, int $count ): void { if ( $count === 0 ) { $no_index = $this->options_helper->get( 'last_known_no_unindexed', [] ); $no_index[ $indexable_name ] = \time(); \remove_action( 'update_option_wpseo', [ 'WPSEO_Utils', 'clear_cache' ] ); $this->options_helper->set( 'last_known_no_unindexed', $no_index ); \add_action( 'update_option_wpseo', [ 'WPSEO_Utils', 'clear_cache' ] ); } } } PK8\<(domain/to-be-cleaned-indexable-count.phpnuW+APK8\ XP"domain/missing-indexable-count.phpnuW+APK8\-#! domain/missing-indexable-bucket.phpnuW+APK8\[D22)Mdomain/to-be-cleaned-indexable-bucket.phpnuW+APK8\زbTT2application/to-be-cleaned-indexables-collector.phpnuW+APK8\EQ Q ,#application/missing-indexables-collector.phpnuW+APK8\λ8;-user-interface/last-completed-indexation-integration.phpnuW+APK4