From 8be5cbc5e0a643edb52d2d82a2757a5b066777fb Mon Sep 17 00:00:00 2001 From: Leon Stafford Date: Tue, 27 Dec 2016 14:30:54 +1300 Subject: [PATCH] initial commit --- css/wp-static-html-output.css | 33 ++ languages/static-html-output-plugin-ja_UTF.mo | Bin 0 -> 1757 bytes languages/static-html-output-plugin-ja_UTF.po | 74 +++ languages/static-html-output-plugin.pot | 17 + library/.htaccess | 2 + library/FTP/ftp.php | 466 ++++++++++++++++++ library/StaticHtmlOutput.php | 434 ++++++++++++++++ library/StaticHtmlOutput/Exception.php | 12 + library/StaticHtmlOutput/Options.php | 115 +++++ library/StaticHtmlOutput/UrlRequest.php | 131 +++++ library/StaticHtmlOutput/View.php | 146 ++++++ readme.txt | 142 ++++++ screenshot-1.jpg | Bin 0 -> 88352 bytes screenshot-2.jpg | Bin 0 -> 81784 bytes views/.htaccess | 2 + views/message.phtml | 10 + views/options-page.phtml | 65 +++ views/system-requirements.phtml | 52 ++ wp-static-html-output.php | 44 ++ 19 files changed, 1745 insertions(+) create mode 100644 css/wp-static-html-output.css create mode 100644 languages/static-html-output-plugin-ja_UTF.mo create mode 100644 languages/static-html-output-plugin-ja_UTF.po create mode 100644 languages/static-html-output-plugin.pot create mode 100644 library/.htaccess create mode 100644 library/FTP/ftp.php create mode 100644 library/StaticHtmlOutput.php create mode 100644 library/StaticHtmlOutput/Exception.php create mode 100644 library/StaticHtmlOutput/Options.php create mode 100644 library/StaticHtmlOutput/UrlRequest.php create mode 100644 library/StaticHtmlOutput/View.php create mode 100644 readme.txt create mode 100644 screenshot-1.jpg create mode 100644 screenshot-2.jpg create mode 100644 views/.htaccess create mode 100644 views/message.phtml create mode 100644 views/options-page.phtml create mode 100644 views/system-requirements.phtml create mode 100644 wp-static-html-output.php diff --git a/css/wp-static-html-output.css b/css/wp-static-html-output.css new file mode 100644 index 00000000..6ba4e39f --- /dev/null +++ b/css/wp-static-html-output.css @@ -0,0 +1,33 @@ +@CHARSET "UTF-8"; + +div.postbox-container { + float: none; + padding: 0; + min-width: 650px; + width: 100%; +} + +div.postbox div.inside { + margin: 14px 18px 18px; + position: relative; +} + +.wpsho-report ul { + list-style: disc; + list-style-position: inside; +} + +.wpsho-report ul li { + padding-left: 2em; +} + +.wpsho-export-log { + height: 200px; + overflow: auto; + border: 1px solid #DFDFDF; + color: #000; + background: #fff; + margin: 0 0 15px; + padding: 3px 4px; + width: 95%; +} \ No newline at end of file diff --git a/languages/static-html-output-plugin-ja_UTF.mo b/languages/static-html-output-plugin-ja_UTF.mo new file mode 100644 index 0000000000000000000000000000000000000000..e02fa654daba3417ca12cacb9d30f03507756429 GIT binary patch literal 1757 zcmb7^TW=dh6vwBu+)M$fh?}U;h!;R~jZ=Y$9EwOn0s)6ujzdvjqOCo47S_9~nQ>Z+ z7k0Oo1R9Z+rjWGh1tEF~2}l%33vJ(cM;j=0BnGdfDyPAJlY;V4W?kPwEM4sr(pj9J_nZW zA>?`R5UAs3wF=bUFO|a6(wBgq| z!%p{bg$=l3h+(rs}oPgTAG@;}B6}oT2cUw|O0Xh-B+MZda zLfXQn?Na@!LX#@jO{9h*V|*`24OEzfs~!#O%qmqA@_+)MLr zz3O-*&;5@e+ZrlcA22R(23fjcn6^Wz!1Q@p!=mbxt-g9ySVcceQ~8mi)z2AZ`=0d{ z(#_JHnXa8yrrYZ3qM28-ue|nBraP0tM619i9lg@V^SWE}a<-6`$n_YR_Q{xU*6dOmr}aiEXM5E;&ebY1yY_#bkjL=Q@IYrLy3(0czwb%rK}#b* zQj+bLF9$A;s|WYM=7PyxW5q$MyECtSHr9Yw^2_Gtb?O(8|@I~@0XKj;}B?-^$uAN^bcJb^4tcRKInnx*gBf$cG|&Y|DO73K{L_2zru z@A!-|eFgPvvN8ykP7xI@s&J+G+X=KPo>S2|6@9DXC8FYa75}cHD`SNmxxF~Qws1gS ztK`UuTNjp-l?DCmRD2W@RQ!XU8Bd!o9p;jXzcF1?tr=z@`q^~Nny46_R`K`nZpHb| z^!}2}&ird`xODr|uzBO03g=by`OS-GZpGJBctnNQRd`m#hm3-$=IXKvFX<%0^Uc+n zWMvu}VJ2rUC$m#3id1-9g~;-NahxX#dUU2!$-xWFYhSA9*q$LI)Y$\n" +"Language-Team: Leon Stafford \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-KeywordsList: _;gettext;gettext_noop;__;_e\n" +"X-Poedit-Basepath: .\n" +"X-Poedit-Language: Japanese\n" +"X-Poedit-Country: JAPAN\n" +"X-Poedit-SearchPath-0: ..\n" + +#: ../wp-static-html-output.php:30 +msgid "Settings" +msgstr "設定" + +#: ../library/StaticHtmlOutput.php:135 +msgid "WP Static HTML Output" +msgstr "WordPress静的HTML出力" + +#: ../views/options-page.phtml:11 +msgid "WP Static HTML Output Plugin" +msgstr "WordPress静的HTML出力プラグイン" + +#: ../views/options-page.phtml:26 +msgid "Export Options" +msgstr "静的HTML化設定" + +#: ../views/options-page.phtml:29 +msgid "Base Url" +msgstr "ベースURL" + +#: ../views/options-page.phtml:34 +msgid "Additional Urls" +msgstr "その他のファイル" + +#: ../views/options-page.phtml:40 +msgid "Generate Zip archive of whole site" +msgstr "サイト全体をZIPファイルに圧縮する" + +#: ../views/options-page.phtml:45 +msgid "Retain generated static files on server" +msgstr "現場サーバーに書き出されたHTMLファイルを保存する" + +#: ../views/options-page.phtml:50 +msgid "Transfer files via FTP" +msgstr "FTPサーバーに送信する" + +#: ../views/options-page.phtml:51 +msgid "FTP functionality is in Beta testing: For large sites, page may seem unresponsive until complete. If in doubt, check your remote FTP directory for activity." +msgstr "FTPサーバーに送信する機能がまだテスト中なので不安定の場合もございます" + +#: ../views/options-page.phtml:55 +msgid "FTP Server" +msgstr "FTPサーバーアドレス" + +#: ../views/options-page.phtml:60 +msgid "FTP Username" +msgstr "FTPユーザ名" + +#: ../views/options-page.phtml:65 +msgid "FTP Password" +msgstr "FTPパスワード" + +#: ../views/options-page.phtml:70 +msgid "FTP Remote Path" +msgstr "FTPのリモートパス" + diff --git a/languages/static-html-output-plugin.pot b/languages/static-html-output-plugin.pot new file mode 100644 index 00000000..349d716f --- /dev/null +++ b/languages/static-html-output-plugin.pot @@ -0,0 +1,17 @@ +# Copyright (C) 2012 +# This file is distributed under the same license as the package. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: http://wordpress.org/tag/static-html-output-plugin\n" +"POT-Creation-Date: 2012-08-10 20:50:49+00:00\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"PO-Revision-Date: 2012-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" + +#: wp-static-html-output.php:29 +msgid "Settings" +msgstr "" diff --git a/library/.htaccess b/library/.htaccess new file mode 100644 index 00000000..e42f31a1 --- /dev/null +++ b/library/.htaccess @@ -0,0 +1,2 @@ +Order deny,allow +Deny from all \ No newline at end of file diff --git a/library/FTP/ftp.php b/library/FTP/ftp.php new file mode 100644 index 00000000..a3afd580 --- /dev/null +++ b/library/FTP/ftp.php @@ -0,0 +1,466 @@ + + * + * Everyone is permitted to copy and distribute verbatim or modified + * copies of this license document, and changing it is allowed as long + * as the name is changed. + * + * DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + * TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + * + * 0. You just DO WHAT THE FUCK YOU WANT TO. + */ + +// ------------------------------------------------------------------------ + +/** + * Ftp class for recursive upload and download files via ftp protocol + * + * @author Kristian Feldsam - iKFSystems, info@ikfsystems.sk + * @web http://www.ikfsystems.sk + */ + +class ftp { + private $conn, $login_result, $logData, $ftpUser, $ftpPass, $ftpHost, $retry, $ftpPasv, $ftpMode, $verbose, $logPath, $createMask; + + // -------------------------------------------------------------------- + + /** + * Construct method + * + * @param array keys[passive_mode(true|false)|transfer_mode(FTP_ASCII|FTP_BINARY)|reattempts(int)|log_path|verbose(true|false)|create_mask(default:0777)] + * @return void + */ + function __construct($o) + { + $this->retry = (isset($o['reattempts'])) ? $o['reattempts'] : 3; + $this->ftpPasv = (isset($o['passive_mode'])) ? $o['passive_mode'] : true; + $this->ftpMode = (isset($o['transfer_mode'])) ? $o['transfer_mode'] : FTP_BINARY; + $this->verbose = (isset($o['verbose'])) ? $o['verbose'] : false; + $this->logPath = (isset($o['log_path'])) ? $o['log_path'] : false; + $this->createMask = (isset($o['create_mask'])) ? $o['create_mask'] : 0777; + } + + // -------------------------------------------------------------------- + + /** + * Connection method + * + * @param string hostname + * @param string username + * @param string password + * @return void + */ + public function conn($hostname, $username, $password) + { + $this->ftpUser = $username; + $this->ftpPass = $password; + $this->ftpHost = $hostname; + + $this->initConn(); + } + + // -------------------------------------------------------------------- + + /** + * Init connection method - connect to ftp server and set passive mode + * + * @return bool + */ + function initConn() + { + $this->conn = ftp_connect($this->ftpHost); + $this->login_result = ftp_login($this->conn, $this->ftpUser, $this->ftpPass); + if($this->conn && $this->login_result) + { + ftp_pasv($this->conn, $this->ftpPasv); + return true; + } + return false; + } + + // -------------------------------------------------------------------- + + /** + * Put method - upload files(folders) to ftp server + * + * @param string path to destionation file/folder on ftp + * @param string path to source file/folder on local disk + * @param int only for identify reattempt, dont use this param + * @return bool + */ + public function put($destinationFile, $sourceFile, $retry = 0) + { + if(file_exists($sourceFile)) + { + if(!$this->isDir($sourceFile, true)) + { + $this->createSubDirs($destinationFile); + if(!ftp_put($this->conn, $destinationFile, $sourceFile, $this->ftpMode)) + { + $retry++; + if($retry > $this->retry) + { + $this->logData('Error when uploading file: '.$sourceFile.' => '.$destinationFile, 'error'); + return false; + } + if($this->verbose) echo 'Retry: '.$retry."\n"; + $this->reconnect(); + $this->put($destinationFile, $sourceFile, $retry); + } + else + { + $this->logData($sourceFile.' => '.$destinationFile, 'ok'); + return true; + } + } + else + { + $this->recursive($destinationFile, $sourceFile, 'put'); + } + } + } + + // -------------------------------------------------------------------- + + /** + * Get method - download files(folders) from ftp server + * + * @param string path to destionation file/folder on local disk + * @param string path to source file/folder on ftp server + * @param int only for identify reattempt, dont use this param + * @return bool + */ + public function get($destinationFile, $sourceFile, $retry = 0) + { + if(!$this->isDir($sourceFile, false)) + { + if($this->verbose)echo $sourceFile.' => '.$destinationFile."\n"; + $this->createSubDirs($destinationFile, false, true); + if(!ftp_get($this->conn, $destinationFile, $sourceFile, $this->ftpMode)) + { + $retry++; + if($retry > $this->retry) + { + $this->logData('Error when downloading file: '.$sourceFile.' => '.$destinationFile, 'error'); + return false; + } + if($this->verbose) echo 'Retry: '.$retry."\n"; + $this->reconnect(); + $this->get($destinationFile, $sourceFile, $retry); + } + else + { + $this->logData($sourceFile.' => '.$destinationFile, 'ok'); + return true; + } + } + else + { + $this->recursive($destinationFile, $sourceFile, 'get'); + } + } + + // -------------------------------------------------------------------- + + /** + * Make dir method - make folder on ftp server or local disk + * + * @param string path to destionation folder on ftp or local disk + * @param bool true for local, false for ftp + * @return bool + */ + public function makeDir($dir, $local = false) + { + if($local) + { + if(!file_exists($dir) && !is_dir($dir))return mkdir($dir, $this->createMask); else return true; + } + else + { + ftp_mkdir($this->conn,$dir); + return ftp_chmod($this->conn, $this->createMask, $dir); + } + } + + // -------------------------------------------------------------------- + + /** + * Cd up method - change working dir up + * + * @param bool true for local, false for ftp + * @return bool + */ + public function cdUp($local) + { + return $local ? chdir('..') : ftp_cdup($this->conn); + } + + // -------------------------------------------------------------------- + + /** + * List contents of dir method - list all files in specified directory + * + * @param string path to destionation folder on ftp or local disk + * @param bool true for local, false for ftp + * @return bool + */ + public function listFiles($file, $local = false) + { + if(!$this->isDir($file, $local))return false; + if($local) + { + return scandir($file); + } + else + { + if(!preg_match('/\//', $file)) + { + return ftp_nlist($this->conn, $file); + }else + { + $dirs = explode('/', $file); + foreach($dirs as $dir) + { + $this->changeDir($dir, $local); + } + $last = count($dirs)-1; + $this->cdUp($local); + $list = ftp_nlist($this->conn, $dirs[$last]); + $i = 0; + foreach($dirs as $dir) + { + if($i < $last) $this->cdUp($local); + $i++; + } + return $list; + } + } + } + + // -------------------------------------------------------------------- + + /** + * Returns current working directory + * + * @param bool true for local, false for ftp + * @return bool + */ + public function pwd($local = false) + { + return $local ? getcwd() : ftp_pwd($this->conn); + } + + // -------------------------------------------------------------------- + + /** + * Change current working directory + * + * @param string dir name + * @param bool true for local, false for ftp + * @return bool + */ + public function changeDir($dir, $local = false) + { + return $local ? chdir($dir) : @ftp_chdir($this->conn, $dir); + } + + // -------------------------------------------------------------------- + + /** + * Create subdirectories + * + * @param string path + * @param bool + * @param bool true for local, false for ftp + * @param bool change current working directory back + * @return void + */ + function createSubDirs($file, $last = false, $local = false, $chDirBack = true) + { + if(preg_match('/\//',$file)) + { + $origin = $this->pwd($local); + if(!$last) $file = substr($file, 0, strrpos($file,'/')); + $dirs = explode('/',$file); + foreach($dirs as $dir) + { + if(!$this->isDir($dir, $local)) + { + $this->makeDir($dir, $local); + $this->changeDir($dir, $local); + } + else + { + $this->changeDir($dir, $local); + } + } + if($chDirBack) $this->changeDir($origin, $local); + } + } + + // -------------------------------------------------------------------- + + /** + * Recursion + * + * @param string destionation file/folder + * @param string source file/folder + * @param string put or get + * @return void + */ + function recursive($destinationFile, $sourceFile, $mode) + { + $local = ($mode == 'put') ? true : false; + $list = $this->listFiles($sourceFile, $local); + if($this->verbose) echo "\n".'Folder: '.$sourceFile."\n"; + if($this->verbose) print_r($list); + $x=0; + $z=0; + foreach($list as $file) + { + if($file == '.' || $file == '..')continue; + $destFile = $destinationFile.'/'.$file; + $srcFile = $sourceFile.'/'.$file; + if($this->isDir($srcFile,$local)) + { + $this->recursive($destFile, $srcFile, $mode); + } + else + { + if($local) + { + $this->put($destFile, $srcFile); + } + else + { + $this->get($destFile, $srcFile); + } + } + } + } + + // -------------------------------------------------------------------- + + /** + * Check if is dir + * + * @param string path to folder + * @return bool + */ + public function isDir($dir, $local) + { + if($local) return is_dir($dir); + if($this->changeDir($dir))return $this->cdUp(0); + return false; + } + + // -------------------------------------------------------------------- + + /** + * Save log data to array + * + * @param string data + * @param string type(error|ok) + * @return void + */ + function logData($data, $type) + { + $this->logData[$type][] = $data; + } + + // -------------------------------------------------------------------- + + /** + * Get log data array + * + * @return array + */ + public function getLogData() + { + return $this->logData; + } + + // -------------------------------------------------------------------- + + /** + * Save log data to file + * + * @return void + */ + public function logDataToFiles() + { + if(!$this->logPath) return false; + $ftp->makeDir($this->logPath, true); + $log = $ftp->getLogData(); + $sep = "\n".date('y-m-d H-i-s').' '; + $logc = date('y-m-d H-i-s').' '.join($sep,$log['error'])."\n"; + $this->addToFile($this->logPath.'/'.$config->name.'-error.log',$logc); + $logc = date('y-m-d H-i-s').' '.join($sep,$log['ok'])."\n"; + $this->addToFile($this->logPath.'/'.$config->name.'-ok.log',$logc); + } + + // -------------------------------------------------------------------- + + /** + * Reconnect method + * + * @return void + */ + public function reconnect() + { + $this->closeConn(); + $this->initConn(); + } + + // -------------------------------------------------------------------- + + /** + * Close connection method + * + * @return void + */ + public function closeConn() + { + return ftp_close($this->conn); + } + + // -------------------------------------------------------------------- + + /** + * Write to file + * + * @param string path to file + * @param string text + * @param string fopen mode + * @return void + */ + function addToFile($file, $ins, $mode = 'a') + { + $fp = fopen($file, $mode); + fwrite($fp,$ins); + fclose($fp); + } + + // -------------------------------------------------------------------- + + /** + * Destruct method - close connection and save log data to file + * + * @return void + */ + function __destruct() + { + $this->closeConn(); + $this->logDataToFiles(); + } +} + +// END ftp class + +/* End of file ftp.php */ +/* Location: ftp.php */ \ No newline at end of file diff --git a/library/StaticHtmlOutput.php b/library/StaticHtmlOutput.php new file mode 100644 index 00000000..6c6a811c --- /dev/null +++ b/library/StaticHtmlOutput.php @@ -0,0 +1,434 @@ +_options = new StaticHtmlOutput_Options(self::OPTIONS_KEY); + self::$_instance->_view = new StaticHtmlOutput_View(); + } + + return self::$_instance; + } + + /** + * Initializes singleton instance and assigns hooks callbacks + * @param string $bootstrapFile + * @return StaticHtmlOutput + */ + public static function init($bootstrapFile) + { + $instance = self::getInstance(); + + // Activation + register_activation_hook($bootstrapFile, array($instance, 'activate')); + + // Backend hooks and action callbacks + if (is_admin()) + { + add_action('admin_menu', array($instance, 'registerOptionsPage')); + add_action(self::HOOK . '-saveOptions', array($instance, 'saveOptions')); + } + + return $instance; + } + + /** + * Performs activation + * @return void + */ + public function activate() + { + // Not installed? + if (null === $this->_options->getOption('version')) + { + $this->_options + ->setOption('version', self::VERSION) + ->setOption('baseUrl', home_url()) + ->setOption('additionalUrls', '') + ->setOption('generateZip', '') + ->setOption('retainStaticFiles', '') + ->setOption('sendViaFTP', '') + ->setOption('ftpServer', '') + ->setOption('ftpUsername', '') + ->setOption('ftpPassword', '') + ->setOption('ftpRemotePath', '') + ->save(); + } + } + + /** + * Adds menu navigation items for this plugin + * @return void + */ + public function registerOptionsPage() + { + $page = add_submenu_page('tools.php', __('WP Static HTML Output', 'static-html-output-plugin'), __('WP Static HTML Output', 'static-html-output-plugin'), 'manage_options', self::HOOK . '-options', array($this, 'renderOptionsPage')); + add_action('admin_print_styles-' . $page, array($this, 'enqueueAdminStyles')); + } + + /** + * Enqueues CSS files required for this plugin + * @return void + */ + public function enqueueAdminStyles() + { + $pluginDirUrl = plugin_dir_url(dirname(__FILE__)); + wp_enqueue_style(self::HOOK . '-admin', $pluginDirUrl . '/css/wp-static-html-output.css'); + } + + /** + * Renders the general options page. + * Fires saveOptions action hook. + * @return void + */ + public function renderOptionsPage() + { + // Check system requirements + $uploadDir = wp_upload_dir(); + $uploadsFolderWritable = $uploadDir && is_writable($uploadDir['path']); + $supportsZipArchives = extension_loaded('zip'); + $permalinksStructureDefined = strlen(get_option('permalink_structure')); + + if (!$uploadsFolderWritable || !$supportsZipArchives ||!$permalinksStructureDefined) + { + $this->_view + ->setTemplate('system-requirements') + ->assign('uploadsFolderWritable', $uploadsFolderWritable) + ->assign('supportsZipArchives', $supportsZipArchives) + ->assign('permalinksStructureDefined', $permalinksStructureDefined) + ->render(); + } + else + { + do_action(self::HOOK . '-saveOptions'); + + $this->_view + ->setTemplate('options-page') + ->assign('exportLog', $this->_exportLog) + ->assign('baseUrl', $this->_options->getOption('baseUrl')) + ->assign('additionalUrls', $this->_options->getOption('additionalUrls')) + ->assign('generateZip', $this->_options->getOption('generateZip')) + ->assign('retainStaticFiles', $this->_options->getOption('retainStaticFiles')) + ->assign('sendViaFTP', $this->_options->getOption('sendViaFTP')) + ->assign('ftpServer', $this->_options->getOption('ftpServer')) + ->assign('ftpUsername', $this->_options->getOption('ftpUsername')) + ->assign('ftpRemotePath', $this->_options->getOption('ftpRemotePath')) + ->assign('onceAction', self::HOOK . '-options') + ->render(); + } + } + + /** + * Saves the options + * @return void + */ + public function saveOptions() + { + // Protection + if (!isset($_POST['action']) || 'generate' != $_POST['action']) + { + return; + } + + if (!check_admin_referer(self::HOOK . '-options') || !current_user_can('manage_options')) + { + exit('You cannot change WP Static HTML Output Plugin options.'); + } + + // Save options + $this->_options + ->setOption('baseUrl', filter_input(INPUT_POST, 'baseUrl', FILTER_SANITIZE_URL)) + ->setOption('additionalUrls', filter_input(INPUT_POST, 'additionalUrls')) + ->setOption('generateZip', filter_input(INPUT_POST, 'generateZip')) + ->setOption('retainStaticFiles', filter_input(INPUT_POST, 'retainStaticFiles')) + ->setOption('sendViaFTP', filter_input(INPUT_POST, 'sendViaFTP')) + ->setOption('ftpServer', filter_input(INPUT_POST, 'ftpServer')) + ->setOption('ftpUsername', filter_input(INPUT_POST, 'ftpUsername')) + ->setOption('ftpRemotePath', filter_input(INPUT_POST, 'ftpRemotePath')) + ->save(); + + // Generate archive + $archiveUrl = $this->_generateArchive(); + + // Render the message + if (is_wp_error($archiveUrl)) + { + $message = 'Error: ' . $archiveUrl->get_error_code; + } + else + { + $message = sprintf('Archive created successfully: Download archive', $archiveUrl); + if ($this->_options->getOption('retainStaticFiles') == 1) + { + $message .= sprintf('
Static files retained at: %s/', str_replace(home_url(),'',substr($archiveUrl,0,-4))); + } + } + + $this->_view->setTemplate('message') + ->assign('message', $message) + ->render(); + } + + /** + * Generates ZIP archive + * @return string|WP_Error + */ + protected function _generateArchive() + { + global $blog_id; + set_time_limit(0); + + // Prepare archive directory + $uploadDir = wp_upload_dir(); + $exporter = wp_get_current_user(); + $archiveName = $uploadDir['path'] . '/' . self::HOOK . '-' . $blog_id . '-' . time() . '-' . $exporter->user_login; + $archiveDir = $archiveName . '/'; + if (!file_exists($archiveDir)) + { + wp_mkdir_p($archiveDir); + } + + // Prepare queue + $baseUrl = untrailingslashit(home_url()); + $newBaseUrl = untrailingslashit($this->_options->getOption('baseUrl')); + $urlsQueue = array_unique(array_merge( + array(trailingslashit($baseUrl)), + $this->_getListOfLocalFilesByUrl(array(get_template_directory_uri())), + $this->_getListOfLocalFilesByUrl(explode("\n", $this->_options->getOption('additionalUrls'))) + )); + + // Process queue + $this->_exportLog = array(); + while (count($urlsQueue)) + { + $currentUrl = array_shift($urlsQueue); + + //echo "Processing ". $currentUrl."
"; + + $urlResponse = new StaticHtmlOutput_UrlRequest($currentUrl); + $urlResponse->cleanup(); + + // Add current url to the list of processed urls + $this->_exportLog[$currentUrl] = true; + + + // Add new urls to the queue + + foreach ($urlResponse->extractAllUrls($baseUrl) as $newUrl) + { + if (!isset($this->_exportLog[$newUrl]) && $newUrl != $currentUrl && !in_array($newUrl,$urlsQueue)) + { + //echo "Adding ".$newUrl." to the list
"; + $urlsQueue[] = $newUrl; + } + } + + // Save url data + $urlResponse->replaceBaseUlr($baseUrl, $newBaseUrl); + $this->_saveUrlData($urlResponse, $archiveDir); + + } + + // Create archive object + $tempZip = $archiveName . '.tmp'; + $zipArchive = new ZipArchive(); + if ($zipArchive->open($tempZip, ZIPARCHIVE::CREATE) !== true) + { + return new WP_Error('Could not create archive'); + } + + + $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($archiveDir)); + foreach ($iterator as $fileName => $fileObject) + { + + $baseName = basename($fileName); + if($baseName != '.' && $baseName != '..') + { + if (!$zipArchive->addFile(realpath($fileName), str_replace($archiveDir, '', $fileName))) + { + return new WP_Error('Could not add file: ' . $fileName); + } + } + } + + $zipArchive->close(); + rename($tempZip, $archiveName . '.zip'); + + if($this->_options->getOption('sendViaFTP') == 1) + { + + //crude FTP addition + require_once '/home/leon/leonwp/wp-content/plugins/static-html-output-plugin/library/FTP/ftp.php'; + $config = array();//keys[passive_mode(true|false)|transfer_mode(FTP_ASCII|FTP_BINARY)|reattempts(int)|log_path|verbose(true|false)|create_mask(default:0777)] + $ftp = new ftp($config); + $ftp->conn($this->_options->getOption('ftpServer'), $this->_options->getOption('ftpUsername'), filter_input(INPUT_POST, 'ftpPassword')); + + //Crude FTP + $ftp->put($this->_options->getOption('ftpRemotePath'), $archiveName . '/'); + + unset($ftp); + } + + // Remove temporary files unless user requested to keep or needed for FTP transfer + if ($this->_options->getOption('retainStaticFiles') != 1) + { + $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($archiveDir), RecursiveIteratorIterator::CHILD_FIRST); + foreach ($iterator as $fileName => $fileObject) + { + + // Remove file + if ($fileObject->isDir()) + { + // Ignore special dirs + $dirName = basename($fileName); + if($dirName != '.' && $dirName != '..') { + rmdir($fileName); + } + } + else + { + unlink($fileName); + } + } + rmdir($archiveDir); + } + + + + + return str_replace(ABSPATH, trailingslashit(home_url()), $archiveName . '.zip'); + } + + /** + * Returns the list of local files + * @param array $urls + * @return array + */ + protected function _getListOfLocalFilesByUrl(array $urls) + { + $files = array(); + + foreach ($urls as $url) + { + $directory = str_replace(home_url('/'), ABSPATH, $url); + + if (stripos($url, home_url('/')) === 0 && is_dir($directory)) + { + $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory)); + foreach ($iterator as $fileName => $fileObject) + { + if (is_file($fileName)) + { + $pathinfo = pathinfo($fileName); + if (isset($pathinfo['extension']) && !in_array($pathinfo['extension'], array('php', 'phtml', 'tpl'))) + { + array_push($files, home_url(str_replace(ABSPATH, '', $fileName))); + } + } + } + } + } + + return $files; + } + + /** + * Saves url data in temporary archive directory + * @param StaticHtmlOutput_UrlRequest $url + * @param string $archiveDir + * @return void + */ + protected function _saveUrlData(StaticHtmlOutput_UrlRequest $url, $archiveDir) + { + $urlInfo = parse_url($url->getUrl()); + $pathInfo = pathinfo(isset($urlInfo['path']) && $urlInfo['path'] != '/' ? $urlInfo['path'] : 'index.html'); + + // Prepare file directory and create it if it doesn't exist + $fileDir = $archiveDir . (isset($pathInfo['dirname']) ? $pathInfo['dirname'] : ''); + if (empty($pathInfo['extension']) && $pathInfo['basename'] == $pathInfo['filename']) + { + $fileDir .= '/' . $pathInfo['basename']; + $pathInfo['filename'] = 'index'; + } + if (!file_exists($fileDir)) + { + wp_mkdir_p($fileDir); + } + + // Prepare file name and save file contents + $fileExtension = ($url->isHtml() || !isset($pathInfo['extension']) ? 'html' : $pathInfo['extension']); + $fileName = $fileDir . '/' . $pathInfo['filename'] . '.' . $fileExtension; + file_put_contents($fileName, $url->getResponseBody()); + } +} diff --git a/library/StaticHtmlOutput/Exception.php b/library/StaticHtmlOutput/Exception.php new file mode 100644 index 00000000..1e0f5dee --- /dev/null +++ b/library/StaticHtmlOutput/Exception.php @@ -0,0 +1,12 @@ +_options = $options; + $this->_optionKey = $optionKey; + } + + /** + * Updates the option identified by $name with the value provided in $value + * + * @param string $name The option name + * @param mixed $value The option value + * @return StaticHtmlOutput_Options + */ + public function __set($name, $value) + { + $this->_options[$name] = $value; + return $this; + } + + /** + * Updates the option identified by $name with the value provided in $value + * + * This is an alias for {@link __set()} + * + * @param string $name The option name + * @param mixed $value The option value + * @return StaticHtmlOutput_Options + */ + public function setOption($name, $value) + { + return $this->__set($name, $value); + } + + /** + * Returns a value of the option identified by $name + * + * @param string $name The option name + * @return mixed|null + */ + public function __get($name) + { + $value = array_key_exists($name, $this->_options) ? $this->_options[$name] : null; + return $value; + } + + /** + * Returns a value of the option identified by $name + * + * This is an alias for {@link __get()} + * + * @param string $name The option name + * @return mixed|null + */ + public function getOption($name) + { + return $this->__get($name); + } + + /** + * Saves the internal options data to the wp_options table using the stored $optionKey value as the key + * + * @return boolean + */ + public function save() + { + return update_option($this->_optionKey, $this->_options); + } + + /** + * Deletes the internal options data from the wp_options table. + * This method is intended to be used as part of the uninstall process. + * + * @return boolean + */ + public function delete() + { + return delete_option($this->_optionKey); + } +} \ No newline at end of file diff --git a/library/StaticHtmlOutput/UrlRequest.php b/library/StaticHtmlOutput/UrlRequest.php new file mode 100644 index 00000000..215c02dc --- /dev/null +++ b/library/StaticHtmlOutput/UrlRequest.php @@ -0,0 +1,131 @@ +_url = filter_var($url, FILTER_VALIDATE_URL); + $response = wp_remote_get($this->_url,array('timeout'=>300)); //set a long time out + $this->_response = (is_wp_error($response) ? '' : $response); + } + + /** + * Returns the sanitized url + * @return string + */ + public function getUrl() + { + return $this->_url; + } + + /** + * Allows to override the HTTP response body + * @param string $newBody + * @return void + */ + public function setResponseBody($newBody) + { + if (is_array($this->_response)) + { + $this->_response['body'] = $newBody; + } + } + + /** + * Returns the HTTP response body + * @return string + */ + public function getResponseBody() + { + return isset($this->_response['body']) ? $this->_response['body'] : ''; + } + + /** + * Returns the content type + * @return string + */ + public function getContentType() + { + return isset($this->_response['headers']['content-type']) ? $this->_response['headers']['content-type'] : null; + } + + /** + * Checks if content type is html + * @return bool + */ + public function isHtml() + { + return stripos($this->getContentType(), 'html') !== false; + } + + /** + * Removes WordPress-specific meta tags + * @return void + */ + public function cleanup() + { + if ($this->isHtml()) + { + $responseBody = preg_replace('//si', '', $this->getResponseBody()); + $responseBody = preg_replace('//si', '', $responseBody); + $this->setResponseBody($responseBody); + } + } + + /** + * Extracts the list of unique urls + * @param string $baseUrl Base url of site. Used to extract urls that relate only to the current site. + * @return array + */ + public function extractAllUrls($baseUrl) + { + $allUrls = array(); + + if ($this->isHtml() && preg_match_all('/' . str_replace('/', '\/', $baseUrl) . '[^"\'#\? ]+/i', $this->_response['body'], $matches)) + { + $allUrls = array_unique($matches[0]); + } + + return $allUrls; + } + + /** + * Replaces base url + * @param string $oldBaseUrl + * @param string $newBaseUrl + * @return void + */ + public function replaceBaseUlr($oldBaseUrl, $newBaseUrl) + { + if ($this->isHtml()) + { + $responseBody = str_replace($oldBaseUrl, $newBaseUrl, $this->getResponseBody()); + $responseBody = str_replace('', "\n\n", $responseBody); + $this->setResponseBody($responseBody); + } + } +} \ No newline at end of file diff --git a/library/StaticHtmlOutput/View.php b/library/StaticHtmlOutput/View.php new file mode 100644 index 00000000..5f4e4cd3 --- /dev/null +++ b/library/StaticHtmlOutput/View.php @@ -0,0 +1,146 @@ +_directory); + + $this->_path = implode('/', $pathArray); + } + + /** + * Sets a template filename that will be used later in render() method. + * Performs a reset of the view variables + * + * @param string $template The template filename, without extension + * @return StaticHtmlOutput_View + */ + public function setTemplate($template) + { + $this->_template = $template; + $this->_variables = array(); + return $this; + } + + /** + * Updates the view variable identified by $name with the value provided in $value + * + * @param string $name The variable name + * @param mixed $value The variable value + * @return StaticHtmlOutput_View + */ + public function __set($name, $value) + { + $this->_variables[$name] = $value; + return $this; + } + + /** + * Updates the view variable identified by $name with the value provided in $value + * + * This is an alias for {@link __set()} + * + * @param string $name The variable name + * @param mixed $value The variable value + * @return StaticHtmlOutput_View + */ + public function assign($name, $value) + { + return $this->__set($name, $value); + } + + /** + * Returns a value of the option identified by $name + * + * @param string $name The option name + * @return mixed|null + */ + public function __get($name) + { + $value = array_key_exists($name, $this->_variables) ? $this->_variables[$name] : null; + return $value; + } + + /** + * Renders the view script + * + * @throws StaticHtmlOutput_Exception + * @return StaticHtmlOutput_View + */ + public function render() + { + $file = $this->_path . '/' . $this->_template . $this->_extension; + + if (!is_readable($file)) + { + throw new StaticHtmlOutput_Exception('Can\'t find view template: ' . $file); + } + + include $file; + + return $this; + } + + /** + * Returns the rendered view script + * + * @return string + */ + public function fetch() + { + ob_start(); + + $this->render(); + $contents = ob_get_contents(); + + ob_end_clean(); + + return $contents; + } +} \ No newline at end of file diff --git a/readme.txt b/readme.txt new file mode 100644 index 00000000..e1e90418 --- /dev/null +++ b/readme.txt @@ -0,0 +1,142 @@ +=== WP Static HTML Output === +Contributors: leonstafford +Donate link: http://leonstafford.github.io +Tags: static,html,export +Requires at least: 3.2 +Tested up to: 4.7 +Stable tag: 1.1.2 + +Produces a static HTML version of your Wordpress install and adjusts URL accordingly + +== Description == + +[About the author](http://leonstafford.github.io/) + +This plugin produces a static HTML version of your wordpress install, incredibly useful for anyone who would like the publishing power of wordpress but whose webhost doesn't allow dynamic PHP driven sites - such as MobileMe. You can run your development site on a different domain or offline, and the plugin will change all relevant URLs when you publish your site. It's a simple but powerful plugin, and after hitting the publish button, the plugin will output a ZIP file of your entire site, ready to upload straight to it's new home. + +An example of a website which has been generated by this plugin and is now running in a static mode can be seen here:[Leon Stafford](http://leonstafford.github.io "Leon Stafford"). Please note that I'm currently running a very stripped down theme for testing, though this will work with most all WordPress themes with some slight tweaking for comments/RSS serving. + +Limitations: +* The nature of a static site implies that any dynamic elements of your wordpress install that reply upon Wordpress plugins or internal functions to operate dynamically will no longer work. Significantly, this means comments. You can workaround this by including a non-Wordpress version of an external comments provider into your theme code, such as the Disqus comment system. Any page elements that rely upon Javascript will function normally. +* inability to correctly capture some relative links in posts +* inability to detect assets dynamically loaded via javascript after page load, these will need to specified separately (but will work) + +Premium Options: +* Free domain name of your choosing (.com, .net, .org, etc) +* One click deployment from your WordPress control panel +* UNLIMITED filestorage for your whole WordPress site, including all attachments, etc. +* Maximum redundancy so you never lose your static site +* Premium support for the WP Static HTML Output Plugin via email with 24 hr response time + + + +Planned upgrades: +* one-click transfer to your destination server via FTP,SFTP,WebDAV, etc
+* progress meter to show % of .ZIP creation +* speed improvements + +Developed by [**Leon Stafford**](http://leonstafford.github.io), Leon Stafford. If you have any questions about this plugin's usage, installation or development, please email me at: [leon.stafford@mac.com](mailto:leon.stafford@mac.com) + +== Installation == + +This section describes how to install the plugin and get it working. + +e.g. + +1. Upload the static-html-output directory to the `/wp-content/plugins/` directory, or install via the wordpress interface "add new" or "upload" the zip file +2. Activate the plugin through the 'Plugins' menu in WordPress +3. Access the plugin settings from the "tools" menu + +== Frequently Asked Questions == + += Where can I publish my static site to? = + +Anywhere that allows HTML files to be uploaded. + += My comments don't work anymore! = + +See the readme. In brief: you can't use dynamic wordpress functions such as comments on a static site. Use an external comments provider such as Disqus, or live without them. + +== Screenshots == + +1. The main interface +2. The main interface (Japanese) + + +== Changelog == += 1.1.2 = + +* Version bump for supporting latest WP (4.7) + += 1.1.1 = + +Added Features + +* Updated author URL + +Removed Features + +* Premium options for One-Click publishing to provided hosting and domain + += 1.1.0 = + +Added Features + +* Premium options for One-Click publishing to provided hosting and domain + += 1.0.9 = + +Added Features + +* Japanese localization added (ja_UTF) + += 1.0.8 = + +Added Features + +* long-awaited FTP transfer option integrated with basic functionality +* option to save generated static HTML files on server + += 1.0.7 = + +Fixed bug introduced with previous version. Applied following modifications contributed by Brian Coca (https://github.com/bcoca): + +Added Features + +* zip is now written atomically (write tmp file first, then rename to zip) which now allows polling scripts to only deal with completed zip file. +* username and blog id are now part of the file name. For auditing and handling +multi site exports. + +Bug fixes + +* . and .. special directory entries are now ignored +* dirname is checked before access avoiding uninitialized warning + += 1.0.6 = + +Added shortcut to Settings page with Plugin Action Links + += 1.0.5 = + +Added link to relevant Settings page when permalinks structure is not set. + += 1.0.4 = + +Added a timeout value to URL request which was breaking for slow sites + += 1.0.3 = + +Altered main codebase to fix recursion bug and endless loop. Essential upgrade. + += 1.0.2 = + +Initial release to Wordpress community + +== Upgrade Notice == + += 1.1.2 = + +Minor version bump after compatibility checking with latest WordPress (4.7). + += 1.1.0 = +Premium VIP subscription option added, providing static optimized hosting and a domain for your website. diff --git a/screenshot-1.jpg b/screenshot-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d763fa47b9e469a4f5b96888394bc7f2cbfa55ae GIT binary patch literal 88352 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 an0- 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Ð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 literal 0 HcmV?d00001 diff --git a/screenshot-2.jpg b/screenshot-2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a6bbd051338456c886dab64183d97a5a73191037 GIT binary patch literal 81784 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 z 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 literal 0 HcmV?d00001 diff --git a/views/.htaccess b/views/.htaccess new file mode 100644 index 00000000..e42f31a1 --- /dev/null +++ b/views/.htaccess @@ -0,0 +1,2 @@ +Order deny,allow +Deny from all \ No newline at end of file diff --git a/views/message.phtml b/views/message.phtml new file mode 100644 index 00000000..07c5ffa8 --- /dev/null +++ b/views/message.phtml @@ -0,0 +1,10 @@ + +

+

message ?>

+
\ No newline at end of file diff --git a/views/options-page.phtml b/views/options-page.phtml new file mode 100644 index 00000000..9a431b48 --- /dev/null +++ b/views/options-page.phtml @@ -0,0 +1,65 @@ + + +
+ +

+ + exportLog) && count($this->exportLog)): ?> +

Export Log

+
exportLog)) ?>
+ + +
+
+
+ +
+ +
+

+ +

+ +
+

+ + +

+ +

+ + +

+ +

+ generateZip == 1) echo "checked"; ?> /> + +

+ +

+ retainStaticFiles == 1) echo "checked"; ?> /> + +

+ +
+
+ +

+ onceAction) ?> + + +

+ +
+ +
+
+
+ +
diff --git a/views/system-requirements.phtml b/views/system-requirements.phtml new file mode 100644 index 00000000..4ed5b2aa --- /dev/null +++ b/views/system-requirements.phtml @@ -0,0 +1,52 @@ +supportsZipArchives): + $fail[] = 'You are missing the zip extension'; +else: + $pass[] = 'You have the zip extension'; +endif; + +if (!$this->uploadsFolderWritable): + $fail[] = 'Your uploads folder is not writable.'; +else: + $pass[] = 'Your uploads folder is writable'; +endif; + +if (!$this->permalinksStructureDefined): + $fail[] = 'Your permalinks structure is undefined. Please set your permalinks structure here: Permalink Settings'; +else: + $pass[] = 'Your permalinks structure is ok.'; +endif; +?> + +
+ +

System Requirements Report

+ +

Your server does not meet the following requirements in order to use this plugin.

+ +

+ The following requirements failed, please contact your hosting provider in order to receive assistance with meeting the system requirements for this plugin: +

    +
  • ', $fail) ?>
  • +
+

+ + +

+ The following requirements were successfully met: +

    +
  • ', $pass) ?>
  • +
+

+ + +
\ No newline at end of file diff --git a/wp-static-html-output.php b/wp-static-html-output.php new file mode 100644 index 00000000..3747ba72 --- /dev/null +++ b/wp-static-html-output.php @@ -0,0 +1,44 @@ +' . __('Settings', 'static-html-output-plugin') . ''; + array_unshift( $links, $settings_link ); + return $links; +} + +/** + * Initializes localization + * @return void + */ + +function myplugin_init() { + + load_plugin_textdomain( 'static-html-output-plugin', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' ); +} +add_action('plugins_loaded', 'myplugin_init');