[44] | 1 | <?php
|
---|
| 2 | /*
|
---|
| 3 | © Copyright 2007 Amaury BALMER (balmer.amaury@gmail.com)
|
---|
| 4 |
|
---|
| 5 | This program is free software; you can redistribute it and/or modify
|
---|
| 6 | it under the terms of the GNU General Public License as published by
|
---|
| 7 | the Free Software Foundation; either version 2 of the License, or
|
---|
| 8 | (at your option) any later version.
|
---|
| 9 |
|
---|
| 10 | This program is distributed in the hope that it will be useful,
|
---|
| 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
| 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
---|
| 13 | GNU General Public License for more details.
|
---|
| 14 | */
|
---|
| 15 |
|
---|
| 16 | Class EmbeddedImporter {
|
---|
| 17 | /**
|
---|
| 18 | * Constructor = nothing
|
---|
| 19 | *
|
---|
| 20 | * @return EmbeddedImporter
|
---|
| 21 | */
|
---|
| 22 | function EmbeddedImporter () {}
|
---|
| 23 |
|
---|
| 24 | /**
|
---|
| 25 | * Select good page depending URL
|
---|
| 26 | *
|
---|
| 27 | */
|
---|
| 28 | function dispatch () {
|
---|
| 29 | $step = ( empty($_GET['step']) ) ? 0 : (int) $_GET['step'];
|
---|
| 30 |
|
---|
| 31 | // load the header
|
---|
| 32 | $this->header();
|
---|
| 33 |
|
---|
| 34 | // load the page
|
---|
| 35 | switch ( $step ) {
|
---|
| 36 | case 0 :
|
---|
| 37 | $this->greet();
|
---|
| 38 | break;
|
---|
| 39 | case 1 :
|
---|
| 40 | $this->importer();
|
---|
| 41 | break;
|
---|
| 42 | case 2:
|
---|
| 43 | $this->done();
|
---|
| 44 | break;
|
---|
| 45 | }
|
---|
| 46 |
|
---|
| 47 | // load the footer
|
---|
| 48 | $this->footer();
|
---|
| 49 | }
|
---|
| 50 |
|
---|
| 51 | /**
|
---|
| 52 | * Print header importer
|
---|
| 53 | *
|
---|
| 54 | */
|
---|
| 55 | function header() {
|
---|
| 56 | echo '<div class="wrap">';
|
---|
| 57 | echo '<h2>'.__('Import Embedded Tags', 'simpletags').'</h2>';
|
---|
| 58 | echo '<p>'.__('Steps may take a few minutes depending on the size of your database. Please be patient.', 'simpletags').'</p>';
|
---|
| 59 | echo '<p>'.__('Visit the <a href="http://www.herewithme.fr/wordpress-plugins/simple-tags">plugin\'s homepage</a> for further details. If you find a bug, or have a fantastic idea for this plugin, <a href="mailto:amaury@wordpress-fr.net">ask me</a> !', 'simpletags').'</p>';
|
---|
| 60 | }
|
---|
| 61 |
|
---|
| 62 | /**
|
---|
| 63 | * Print avertissement before import (backup DB !)
|
---|
| 64 | *
|
---|
| 65 | */
|
---|
| 66 | function greet() {
|
---|
| 67 | echo '<div class="narrow">';
|
---|
| 68 | echo '<p>'.__('Howdy! This imports tags from embedded tags into this blog using the new WordPress native tagging structure.', 'simpletags').'</p>';
|
---|
| 69 | echo '<p>'.__('To accommodate larger databases for those tag-crazy authors out there, we have made this into an easy 4-step program to help you kick that nasty Embedded Tags habit. Just keep clicking along and we will let you know when you are in the clear!', 'simpletags').'</p>';
|
---|
| 70 | echo '<p><strong>'.__('Don’t be stupid - backup your database before proceeding!', 'simpletags').'</strong></p>';
|
---|
| 71 | echo '<form action="admin.php?import=simple-tags.importer&step=1" method="post">';
|
---|
| 72 | echo '<p class="submit"><input type="submit" name="submit" value="'.__('Step 1 »', 'simpletags').'" /></p>';
|
---|
| 73 | echo '</form>';
|
---|
| 74 | echo '</div>';
|
---|
| 75 | }
|
---|
| 76 |
|
---|
| 77 | /**
|
---|
| 78 | * Importer with dynamic pages for skip timeout
|
---|
| 79 | *
|
---|
| 80 | */
|
---|
| 81 | function importer() {
|
---|
| 82 | $action = false;
|
---|
| 83 | if ( $_GET['action'] == 'import_embedded_tag' ) {
|
---|
| 84 | $action = true;
|
---|
| 85 |
|
---|
| 86 | // Get values
|
---|
| 87 | $n = ( isset($_GET['n']) ) ? intval($_GET['n']) : 0;
|
---|
| 88 | $start = $_GET['start'];
|
---|
| 89 | $end = $_GET['end'];
|
---|
| 90 | $clean = ( isset($_GET['clean']) ) ? 1 : 0;
|
---|
| 91 | $typep = ( isset($_GET['typep']) ) ? 1 : 0;
|
---|
| 92 | $type_posts = ( isset($_GET['typep']) ) ? "post_type IN('page', 'post')" : "post_type = 'post'";
|
---|
| 93 |
|
---|
| 94 | if ( empty($_GET['start']) || empty($_GET['end']) ) {
|
---|
| 95 | wp_die(__('Missing parameters in URL. (Start or End)', 'simpletags'));
|
---|
| 96 | }
|
---|
| 97 |
|
---|
| 98 | // Get datas
|
---|
| 99 | global $wpdb;
|
---|
| 100 | $objects = $wpdb->get_results( "SELECT ID, post_title, post_content FROM {$wpdb->posts} WHERE {$type_posts} ORDER BY ID DESC LIMIT {$n}, 20" );
|
---|
| 101 | }
|
---|
| 102 |
|
---|
| 103 | // First step
|
---|
| 104 | if ( $action === false ) : ?>
|
---|
| 105 |
|
---|
| 106 | <div class="narrow">
|
---|
| 107 | <h3><?php _e('Configure and add tags to posts…', 'simpletags'); ?></h3>
|
---|
| 108 |
|
---|
| 109 | <form action="admin.php" method="get">
|
---|
| 110 | <input type="hidden" name="import" value="simple-tags.importer" />
|
---|
| 111 | <input type="hidden" name="step" value="1" />
|
---|
| 112 | <input type="hidden" name="action" value="import_embedded_tag" />
|
---|
| 113 |
|
---|
| 114 | <p><label for="start"><?php _e('Start marker', 'simpletags'); ?></label><br />
|
---|
| 115 | <input type="text" value="[tags]" name="start" id="start" size="10" /></p>
|
---|
| 116 |
|
---|
| 117 | <p><label for="end"><?php _e('End marker', 'simpletags'); ?></label><br />
|
---|
| 118 | <input type="text" value="[/tags]" name="end" id="end" size="10" /></p>
|
---|
| 119 |
|
---|
| 120 | <p><input type="checkbox" value="1" id="clean" name="clean" /> <label for="clean"><?php _e('Delete embedded tags once imported ?', 'simpletags'); ?></label></p>
|
---|
| 121 |
|
---|
| 122 | <p><input type="checkbox" value="1" id="typep" name="typep" /> <label for="typep"><?php _e('Import also embedded tags from page ?', 'simpletags'); ?></label></p>
|
---|
| 123 |
|
---|
| 124 | <p class="submit">
|
---|
| 125 | <input type="submit" name="submit" value="<?php _e('Start import »', 'simpletags'); ?>" /></p>
|
---|
| 126 | </form>
|
---|
| 127 | </div>
|
---|
| 128 |
|
---|
| 129 | <?php else: // Dynamic pages
|
---|
| 130 |
|
---|
| 131 | echo '<div class="narrow">';
|
---|
| 132 |
|
---|
| 133 | if( !empty($objects) ) {
|
---|
| 134 |
|
---|
| 135 | echo '<ul>';
|
---|
| 136 | foreach( (array) $objects as $object ) {
|
---|
| 137 | // Return Tags
|
---|
| 138 | preg_match_all('/(' . $this->regexEscape($start) . '(.*?)' . $this->regexEscape($end) . ')/is', $object->post_content, $matches);
|
---|
| 139 |
|
---|
| 140 | $tags = array();
|
---|
| 141 | foreach ( (array) $matches[2] as $match) {
|
---|
| 142 | foreach( (array) explode(',', $match) as $tag) {
|
---|
| 143 | $tags[] = $tag;
|
---|
| 144 | }
|
---|
| 145 | }
|
---|
| 146 |
|
---|
| 147 | if( !empty($tags) ) {
|
---|
| 148 | // Remove empty and duplicate elements
|
---|
| 149 | $tags = array_filter($tags, array(&$this, 'deleteEmptyElement'));
|
---|
| 150 | $tags = array_unique($tags);
|
---|
| 151 |
|
---|
| 152 | wp_set_post_tags( $object->ID, $tags, true ); // Append tags
|
---|
| 153 |
|
---|
| 154 | if ( $clean == '1' ) {
|
---|
| 155 | // remove embedded tags
|
---|
| 156 | $new_content = preg_replace('/(' . $this->regexEscape($start) . '(.*?)' . $this->regexEscape($end) . ')/is', '', $object->post_content);
|
---|
| 157 | $new_content = addslashes_gpc($new_content);
|
---|
| 158 | $wpdb->query("UPDATE {$wpdb->posts} SET post_content = '{$new_content}' WHERE ID = {$object->ID} LIMIT 1");
|
---|
| 159 | }
|
---|
| 160 | }
|
---|
| 161 |
|
---|
| 162 | echo '<li>#'. $object->ID .' '. $object->post_title .'</li>';
|
---|
| 163 | unset($tags, $object, $matches, $match, $new_content);
|
---|
| 164 | }
|
---|
| 165 | echo '</ul>';
|
---|
| 166 | ?>
|
---|
| 167 | <p><?php _e("If your browser doesn't start loading the next page automatically click this link:", 'simpletags'); ?> <a href="admin.php?import=simple-tags.importer&step=1&action=import_embedded_tag&typep=<?php echo $typep; ?>&start=<?php echo $start; ?>&end=<?php echo $end; ?>&clean=<?php echo $clean; ?>&n=<?php echo ($n + 20) ?>"><?php _e('Next content', 'simpletags'); ?></a></p>
|
---|
| 168 | <script type="text/javascript">
|
---|
| 169 | <!--
|
---|
| 170 | function nextPage() {
|
---|
| 171 | location.href = '<?php get_option('siteurl'); ?>/wp-admin/admin.php?import=simple-tags.importer&step=1&action=import_embedded_tag&typep=<?php echo $typep; ?>&start=<?php echo $start; ?>&end=<?php echo $end; ?>&clean=<?php echo $clean; ?>&n=<?php echo ($n + 20) ?>';
|
---|
| 172 | }
|
---|
| 173 | setTimeout( 'nextPage', 250 );
|
---|
| 174 | //-->
|
---|
| 175 | </script>
|
---|
| 176 | <?php
|
---|
| 177 |
|
---|
| 178 | } else { // end
|
---|
| 179 |
|
---|
| 180 | echo '<p><strong>'.__('Done!', 'simpletags').'</strong><br /></p>';
|
---|
| 181 | echo '<form action="admin.php?import=simple-tags.importer&step=2" method="post">';
|
---|
| 182 | echo '<p class="submit"><input type="submit" name="submit" value="'.__('Step 2 »', 'simpletags').'" /></p>';
|
---|
| 183 | echo '</form>';
|
---|
| 184 |
|
---|
| 185 | }
|
---|
| 186 | echo '</div>';
|
---|
| 187 |
|
---|
| 188 | endif; ?>
|
---|
| 189 | </div>
|
---|
| 190 | <?php
|
---|
| 191 | }
|
---|
| 192 |
|
---|
| 193 | /**
|
---|
| 194 | * Print end message importer
|
---|
| 195 | *
|
---|
| 196 | */
|
---|
| 197 | function done() {
|
---|
| 198 | echo '<div class="narrow">';
|
---|
| 199 | echo '<p><h3>'.__('Import Complete!', 'simpletags').'</h3></p>';
|
---|
| 200 | echo '<p>' . __('OK, so we lied about this being a 4-step program! You’re done!', 'simpletags') . '</p>';
|
---|
| 201 | echo '<p>' . __('Now wasn’t that easy?', 'simpletags') . '</p>';
|
---|
| 202 | echo '<p><strong>' . __('You can manage tags now !', 'simpletags') . '</strong></p>';
|
---|
| 203 | echo '</div>';
|
---|
| 204 | }
|
---|
| 205 |
|
---|
| 206 | /**
|
---|
| 207 | * Print footer importer
|
---|
| 208 | *
|
---|
| 209 | */
|
---|
| 210 | function footer() {
|
---|
| 211 | echo '</div>';
|
---|
| 212 | }
|
---|
| 213 |
|
---|
| 214 | /**
|
---|
| 215 | * Escape string so that it can used in Regex. E.g. used for [tags]...[/tags]
|
---|
| 216 | *
|
---|
| 217 | * @param string $content
|
---|
| 218 | * @return string
|
---|
| 219 | */
|
---|
| 220 | function regexEscape( $content ) {
|
---|
| 221 | return strtr($content, array("\\" => "\\\\", "/" => "\\/", "[" => "\\[", "]" => "\\]"));
|
---|
| 222 | }
|
---|
| 223 |
|
---|
| 224 | /**
|
---|
| 225 | * trim and remove empty element
|
---|
| 226 | *
|
---|
| 227 | * @param string $element
|
---|
| 228 | * @return string
|
---|
| 229 | */
|
---|
| 230 | function deleteEmptyElement( &$element ) {
|
---|
| 231 | $element = trim($element);
|
---|
| 232 | if ( !empty($element) ) {
|
---|
| 233 | return $element;
|
---|
| 234 | }
|
---|
| 235 | }
|
---|
| 236 | }
|
---|
| 237 |
|
---|
| 238 | // create the import object
|
---|
| 239 | $embedded_importer = new EmbeddedImporter();
|
---|
| 240 |
|
---|
| 241 | // add it to the import page!
|
---|
| 242 | register_importer('simple-tags.importer', __('Embedded Tags', 'simpletags'), __('Import Embedded Tags into the new WordPress native tagging structure.', 'simpletags'), array(&$embedded_importer, 'dispatch'));
|
---|
| 243 | ?> |
---|