Server IP : 15.235.198.142 / Your IP : 216.73.216.154 Web Server : Apache/2.4.58 (Ubuntu) System : Linux ballsack 6.8.0-45-generic #45-Ubuntu SMP PREEMPT_DYNAMIC Fri Aug 30 12:02:04 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 8.3.6 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /var/www/yme/wp-content/plugins/simply-static/src/tasks/ |
Upload File : |
<?php namespace Simply_Static; /** * Class to handle setup task. */ class Setup_Task extends Task { /** * Task name. * * @var string */ protected static $task_name = 'setup'; /** * Do the initial setup for generating a static archive * * @return boolean true this always completes in one run, so returns true. */ public function perform() { $message = __( 'Setting up', 'simply-static' ); $this->save_status_message( $message ); // Delete files in temp dir. $this->delete_temp_static_files(); $archive_dir = $this->options->get_archive_dir(); // create temp archive directory. if ( ! file_exists( $archive_dir ) ) { Util::debug_log( 'Creating archive directory: ' . $archive_dir ); $create_dir = wp_mkdir_p( $archive_dir ); if ( $create_dir === false ) { return new \WP_Error( 'cannot_create_archive_dir', sprintf( __( 'Cannot create archive directory %s' ), $archive_dir ) ); } } $use_single = get_option( 'simply-static-use-single' ); $use_build = get_option( 'simply-static-use-build' ); $type = $this->options->get( 'generate_type' ); if ( ! $type ) { $type = 'export'; } if ( empty( $use_build ) && empty( $use_single ) && 'export' === $type ) { Page::query()->delete_all(); } // add origin url and additional urls/files to database. $additional_urls = apply_filters( 'ss_setup_task_additional_urls', $this->options->get( 'additional_urls' ) ); $this->add_origin_and_additional_urls_to_db( $additional_urls ); $this->add_additional_files_to_db( $this->options->get( 'additional_files' ) ); do_action( 'ss_after_setup_task' ); return true; } /** * Ensure the Origin URL and user-specified Additional URLs are in the DB. * * @param string $additional_urls array of additional urls. * * @return void */ public function add_origin_and_additional_urls_to_db( $additional_urls ) { $origin_url = trailingslashit( Util::origin_url() ); Util::debug_log( 'Adding origin URL to queue: ' . $origin_url ); $static_page = Page::query()->find_or_initialize_by( 'url', $origin_url ); $static_page->set_status_message( __( 'Origin URL', 'simply-static' ) ); $static_page->found_on_id = 0; $static_page->save(); $urls = apply_filters( 'ss_additional_urls', array_unique( Util::string_to_array( $additional_urls ) ) ); foreach ( $urls as $url ) { if ( Util::is_local_url( $url ) ) { Util::debug_log( 'Adding additional URL to queue: ' . $url ); $static_page = Page::query()->find_or_initialize_by( 'url', $url ); $static_page->set_status_message( __( "Additional URL", 'simply-static' ) ); $static_page->found_on_id = 0; $static_page->save(); } } } /** * Convert Additional Files/Directories to URLs and add them to the database. * * @param string $additional_files array of additional files. * * @return void */ public function add_additional_files_to_db( $additional_files ) { $additional_files = apply_filters( 'ss_additional_files', Util::string_to_array( $additional_files ) ); // Add robots.txt if exists. $robots_txt = ABSPATH . 'robots.txt'; if ( file_exists( $robots_txt ) ) { $additional_files[] = $robots_txt; } // Add feeds if enabled. if ( $this->options->get( 'add_feeds' ) ) { // Create feed directory it doesn't exist. $feed_directory = untrailingslashit( $this->options->get_archive_dir() ) . '/feed'; if ( ! file_exists( $feed_directory ) ) { wp_mkdir_p( $feed_directory ); } // Create index.html file for feed directory. file_put_contents( $feed_directory . '/index.html', '<!DOCTYPE html> <html> <head> <title>Redirecting...</title> <meta http-equiv="refresh" content="0;url=index.xml"> </head> <body> <script type="text/javascript"> window.location = "index.xml"; </script> <p>You are being redirected to <a href="index.xml">index.xml</a></p> </body> </html>' ); // Add feed redirect file to additional files. $additional_files[] = $feed_directory . '/index.html'; } // Convert additional files to URLs and add to queue. foreach ( $additional_files as $item ) { // If item is a file, convert to url and insert into database. // If item is a directory, recursively iterate and grab all files, // and for each file, convert to url and insert into database. if ( file_exists( $item ) ) { if ( is_file( $item ) ) { $url = self::convert_path_to_url( $item ); Util::debug_log( "File " . $item . ' exists; adding to queue as: ' . $url ); $static_page = Page::query() ->find_or_create_by( 'url', $url ); $static_page->set_status_message( __( "Additional File", 'simply-static' ) ); // setting found_on_id to 0 since this was user-specified $static_page->found_on_id = 0; $static_page->handler = Additional_File_Handler::class; $static_page->save(); } else { Util::debug_log( "Adding files from directory: " . $item ); $iterator = new \RecursiveIteratorIterator( new \RecursiveDirectoryIterator( $item, \RecursiveDirectoryIterator::SKIP_DOTS ) ); foreach ( $iterator as $file_name => $file_object ) { $url = self::convert_path_to_url( $file_name ); Util::debug_log( "Adding file " . $file_name . ' to queue as: ' . $url ); $static_page = Page::query()->find_or_initialize_by( 'url', $url ); $static_page->set_status_message( __( "Additional Dir", 'simply-static' ) ); $static_page->handler = Additional_File_Handler::class; $static_page->found_on_id = 0; $static_page->save(); } } } else { Util::debug_log( "File doesn't exist: " . $item ); } } } /** * Convert a directory path into a valid WordPress URL * * @param string $path The path to a directory or a file. * * @return string The WordPress URL for the given path. */ private static function convert_path_to_url( $path ) { $url = $path; if ( stripos( $path, WP_PLUGIN_DIR ) === 0 ) { $url = str_replace( WP_PLUGIN_DIR, WP_PLUGIN_URL, $path ); } elseif ( stripos( $path, WP_CONTENT_DIR ) === 0 ) { $url = str_replace( WP_CONTENT_DIR, WP_CONTENT_URL, $path ); } elseif ( stripos( $path, get_home_path() ) === 0 ) { $url = str_replace( untrailingslashit( get_home_path() ), Util::origin_url(), $path ); } // Windows support $url = Util::normalize_slashes( $url ); return $url; } /** * Delete temporary, generated static files. * * @return true|\WP_Error True on success, WP_Error otherwise. */ public function delete_temp_static_files() { $options = Options::instance(); $dir = $options->get( 'temp_files_dir' ); if ( empty( $dir ) ) { $upload_dir = wp_upload_dir(); $dir = $upload_dir['basedir'] . DIRECTORY_SEPARATOR . 'simply-static' . DIRECTORY_SEPARATOR . 'temp-files'; } if ( false === file_exists( $dir ) || 'update' === $options->get( 'generate_type' ) ) { return false; } $files = new \RecursiveIteratorIterator( new \RecursiveDirectoryIterator( $dir, \RecursiveDirectoryIterator::SKIP_DOTS ), \RecursiveIteratorIterator::CHILD_FIRST ); foreach ( $files as $fileinfo ) { $can_delete_file = apply_filters( 'ss_can_delete_file', true, $fileinfo, $dir ); if ( ! $can_delete_file ) { continue; } if ( $fileinfo->isDir() ) { if ( false === rmdir( $fileinfo->getRealPath() ) ) { return false; } } else { if ( false === unlink( $fileinfo->getRealPath() ) ) { return false; } } } return true; } }