PluginProbe
Hostinger Tools / 3.0.76
Hostinger Tools v3.0.76
3.0.77 3.0.76 3.0.75 3.0.74 3.0.73 3.0.72 3.0.71 3.0.70 3.0.69 3.0.68 3.0.67 3.0.66 1.8.1 1.8.2 1.8.3 1.9.1 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.1 2.0.4 All 108 releases
hostinger / includes / Admin / Jobs / LlmsTxtInjectContentJob.php

LlmsTxtInjectContentJob.php in Hostinger Tools 3.0.76, at includes/Admin/Jobs/LlmsTxtInjectContentJob.php

87 lines 3.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Hostinger\Admin\Jobs;
4
5 use Hostinger\Admin\PluginSettings;
6 use Hostinger\LlmsTxtGenerator\LlmsTxtFileHelper;
7 use Hostinger\LlmsTxtGenerator\LlmsTxtGenerator;
8 use Hostinger\LlmsTxtGenerator\LlmsTxtParser;
9
10 class LlmsTxtInjectContentJob extends AbstractBatchedJob {
11
12 public const JOB_NAME = 'generate_llmstxt';
13
14 protected LlmsTxtParser $llms_txt_parser;
15 protected LlmsTxtFileHelper $llms_txt_file_helper;
16 protected PluginSettings $plugin_settings;
17
18 public function __construct( ActionScheduler $action_scheduler, LlmsTxtParser $llms_txt_parser, LlmsTxtFileHelper $llms_txt_file_helper, PluginSettings $plugin_settings ) {
19 parent::__construct( $action_scheduler );
20 $this->llms_txt_parser = $llms_txt_parser;
21 $this->llms_txt_file_helper = $llms_txt_file_helper;
22 $this->plugin_settings = $plugin_settings;
23 }
24
25 protected function get_batch( int $batch_number, $args ): array {
26 if ( ! isset( $args['post_type'] ) ) {
27 return array();
28 }
29
30 $offset = $this->get_query_offset( $batch_number );
31 $limit = $this->get_batch_size();
32
33 return $this->llms_txt_parser->get_by_post_type( $args['post_type'], $limit, $offset );
34 }
35
36 public function get_name(): string {
37 return self::JOB_NAME;
38 }
39
40 protected function process_items( array $args = array() ): void {
41 if ( ! $this->is_llms_txt_enabled() ) {
42 return;
43 }
44
45 $items = $args['items'] ?? array();
46 $job_args = $args['args'] ?? array();
47
48 if ( ! isset( $job_args['post_type'] ) || empty( $items ) ) {
49 return;
50 }
51
52 $content = $this->llms_txt_parser->get_items( $items );
53 $this->inject_content( $job_args['post_type'], $content );
54 }
55
56 public function schedule( array $args = array() ): void {
57 // Initiate as 2, as the first batch will be created when the user toggles on the option.
58 $this->schedule_create_batch_action( 2, $args );
59 }
60
61 public function can_schedule( $args = array() ): bool {
62 return parent::can_schedule( $args ) && $this->is_llms_txt_enabled();
63 }
64
65 public function is_llms_txt_enabled(): bool {
66 $settings = $this->plugin_settings->get_plugin_settings();
67 return $settings->get_enable_llms_txt();
68 }
69
70 public function inject_content( $post_type, $new_content ): void {
71 $content = $this->llms_txt_file_helper->get_content();
72 $section = LlmsTxtGenerator::HOSTINGER_LLMSTXT_SUPPORTED_POST_TYPES[ $post_type ];
73 $header = "## $section\n\n";
74 $header_position = strpos( $content, $header );
75 $header_length = strlen( $header );
76 if ( $header_position === false ) {
77 return;
78 }
79
80 $before_injection_slot = substr( $content, 0, $header_position + $header_length );
81 $after_injection_slot = substr( $content, $header_position + $header_length );
82
83 $final_content = $before_injection_slot . $new_content . $after_injection_slot;
84 $this->llms_txt_file_helper->create( $final_content );
85 }
86 }
87