PluginProbe ʕ •ᴥ•ʔ
Hostinger Tools / 3.0.71
Hostinger Tools v3.0.71
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 2.0.6 2.0.7 2.0.8 2.0.9 2.1.0 2.1.1 2.1.2 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 3.0.0 3.0.10 3.0.11 3.0.12 3.0.13 3.0.14 3.0.15 3.0.16 3.0.17 3.0.18 3.0.19 3.0.2 3.0.20 3.0.21 3.0.22 3.0.23 3.0.24 3.0.25 3.0.26 3.0.27 3.0.28 3.0.29 3.0.3 3.0.30 3.0.31 3.0.32 3.0.33 3.0.34 3.0.35 3.0.36 3.0.37 3.0.38 3.0.39 3.0.4 3.0.40 3.0.41 3.0.42 3.0.43 3.0.44 3.0.45 3.0.46 3.0.47 3.0.48 3.0.49 3.0.5 3.0.50 3.0.51 3.0.52 3.0.53 3.0.54 3.0.55 3.0.56 3.0.57 3.0.58 3.0.59 3.0.6 3.0.60 3.0.61 3.0.62 3.0.65 3.0.7 3.0.8 3.0.9 trunk 1.8.0
hostinger / includes / Admin / Jobs / LlmsTxtInjectContentJob.php
hostinger / includes / Admin / Jobs Last commit date
AbstractBatchedJob.php 10 months ago AbstractJob.php 10 months ago ActionScheduler.php 11 months ago JobInitializer.php 10 months ago JobInterface.php 10 months ago LlmsTxtInjectContentJob.php 10 months ago NotifyMcpJob.php 11 months ago
LlmsTxtInjectContentJob.php
87 lines
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