Version Description
- Fixed a potential issue with the WYSIWYG field not working on CPT without editor support
- Field assets are less aggressive and only fire when necessary
- Reorganized the migration process a bit in prep for Attachments Pro support
Download this release
Release Info
Developer | jchristopher |
Plugin | Attachments |
Version | 3.1.3 |
Comparing to | |
See all releases |
Code changes from version 3.1.2 to 3.1.3
- README.md +5 -0
- classes/class.attachments.migrate.php +234 -0
- classes/class.attachments.php +119 -34
- classes/class.field.php +6 -0
- classes/fields/class.field.text.php +5 -0
- classes/fields/class.field.textarea.php +5 -0
- classes/fields/class.field.wysiwyg.php +14 -1
- index.php +1 -1
- readme.txt +6 -1
- views/options.php +14 -188
README.md
CHANGED
@@ -250,6 +250,11 @@ Attachments uses WordPress' built in Media library for uploads and storage.
|
|
250 |
|
251 |
<dl>
|
252 |
|
|
|
|
|
|
|
|
|
|
|
253 |
<dt>3.1.2</dt>
|
254 |
<dd>Fixed a regression that prevented successful migration of legacy Attachments data</dd>
|
255 |
|
250 |
|
251 |
<dl>
|
252 |
|
253 |
+
<dt>3.1.3</dt>
|
254 |
+
<dd>Fixed a potential issue with the WYSIWYG field not working on CPT without editor support</dd>
|
255 |
+
<dd>Field assets are less aggressive and only fire when necessary</dd>
|
256 |
+
<dd>Reorganized the migration process a bit in prep for Attachments Pro support</dd>
|
257 |
+
|
258 |
<dt>3.1.2</dt>
|
259 |
<dd>Fixed a regression that prevented successful migration of legacy Attachments data</dd>
|
260 |
|
classes/class.attachments.migrate.php
ADDED
@@ -0,0 +1,234 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// Exit if accessed directly
|
4 |
+
if( !defined( 'ABSPATH' ) ) exit;
|
5 |
+
|
6 |
+
/**
|
7 |
+
* Migration class for legacy Attachments data
|
8 |
+
*
|
9 |
+
* @since 3.1.3
|
10 |
+
*/
|
11 |
+
class AttachmentsMigrate extends Attachments
|
12 |
+
{
|
13 |
+
|
14 |
+
function __construct()
|
15 |
+
{
|
16 |
+
parent::__construct();
|
17 |
+
}
|
18 |
+
|
19 |
+
/**
|
20 |
+
* Migrate Attachments 1.x records to 3.0's format
|
21 |
+
*
|
22 |
+
* @since 3.0
|
23 |
+
*/
|
24 |
+
function migrate( $instance = null, $title = null, $caption = null )
|
25 |
+
{
|
26 |
+
// sanitize
|
27 |
+
if( is_null( $instance ) || empty( $instance ) || is_null( $title ) || is_null( $caption ) )
|
28 |
+
return false;
|
29 |
+
|
30 |
+
$instance = str_replace( '-', '_', sanitize_title( $instance ) );
|
31 |
+
$title = empty( $title ) ? false : str_replace( '-', '_', sanitize_title( $title ) );
|
32 |
+
$caption = empty( $caption ) ? false : str_replace( '-', '_', sanitize_title( $caption ) );
|
33 |
+
|
34 |
+
// we need our deprecated functions
|
35 |
+
include_once( ATTACHMENTS_DIR . '/deprecated/get-attachments.php' );
|
36 |
+
|
37 |
+
$legacy_attachments_settings = get_option( 'attachments_settings' );
|
38 |
+
|
39 |
+
if( $legacy_attachments_settings && is_array( $legacy_attachments_settings['post_types'] ) && count( $legacy_attachments_settings['post_types'] ) )
|
40 |
+
{
|
41 |
+
// we have legacy settings, so we're going to use the post types
|
42 |
+
// that Attachments is currently utilizing
|
43 |
+
|
44 |
+
// the keys are the actual CPT names, so we need those
|
45 |
+
foreach( $legacy_attachments_settings['post_types'] as $post_type => $value )
|
46 |
+
if( $value )
|
47 |
+
$post_types[] = $post_type;
|
48 |
+
|
49 |
+
// set up our WP_Query args to grab anything with legacy data
|
50 |
+
$args = array(
|
51 |
+
'post_type' => isset( $post_types ) ? $post_types : array(),
|
52 |
+
'post_status' => 'any',
|
53 |
+
'posts_per_page' => -1,
|
54 |
+
'meta_key' => '_attachments',
|
55 |
+
);
|
56 |
+
|
57 |
+
$query = new WP_Query( $args );
|
58 |
+
}
|
59 |
+
|
60 |
+
$count = 0;
|
61 |
+
|
62 |
+
// loop through each post
|
63 |
+
if( $query ) { while( $query->have_posts() )
|
64 |
+
{
|
65 |
+
// set up postdata
|
66 |
+
$query->the_post();
|
67 |
+
|
68 |
+
// let's first decode our Attachments data
|
69 |
+
$existing_attachments = get_post_meta( $query->post->ID, '_attachments', false );
|
70 |
+
|
71 |
+
$post_attachments = array();
|
72 |
+
|
73 |
+
// check to make sure we've got data
|
74 |
+
if( is_array( $existing_attachments ) && count( $existing_attachments ) > 0 )
|
75 |
+
{
|
76 |
+
// loop through each existing attachment
|
77 |
+
foreach( $existing_attachments as $attachment )
|
78 |
+
{
|
79 |
+
// decode and unserialize the data
|
80 |
+
$data = unserialize( base64_decode( $attachment ) );
|
81 |
+
|
82 |
+
array_push( $post_attachments, array(
|
83 |
+
'id' => stripslashes( $data['id'] ),
|
84 |
+
'title' => stripslashes( $data['title'] ),
|
85 |
+
'caption' => stripslashes( $data['caption'] ),
|
86 |
+
'order' => stripslashes( $data['order'] )
|
87 |
+
));
|
88 |
+
}
|
89 |
+
|
90 |
+
// sort attachments
|
91 |
+
if( count( $post_attachments ) > 1 )
|
92 |
+
{
|
93 |
+
usort( $post_attachments, 'attachments_cmp' );
|
94 |
+
}
|
95 |
+
}
|
96 |
+
|
97 |
+
// we have our Attachments entries
|
98 |
+
|
99 |
+
// let's check to see if we're migrating after population has taken place
|
100 |
+
$existing_attachments = get_post_meta( $query->post->ID, 'attachments', false );
|
101 |
+
|
102 |
+
if( !isset( $existing_attachments[0] ) )
|
103 |
+
$existing_attachments[0] = '';
|
104 |
+
|
105 |
+
$existing_attachments = json_decode( $existing_attachments[0] );
|
106 |
+
|
107 |
+
if( !is_object( $existing_attachments ) )
|
108 |
+
$existing_attachments = new stdClass();
|
109 |
+
|
110 |
+
// we'll loop through the legacy Attachments and save them in the new format
|
111 |
+
foreach( $post_attachments as $legacy_attachment )
|
112 |
+
{
|
113 |
+
// convert to the new format
|
114 |
+
$converted_attachment = array( 'id' => $legacy_attachment['id'] );
|
115 |
+
|
116 |
+
// fields are technically optional so we'll add those separately
|
117 |
+
// we're also going to encode them in the same way the main class does
|
118 |
+
if( $title )
|
119 |
+
$converted_attachment['fields'][$title] = htmlentities( stripslashes( $legacy_attachment['title'] ), ENT_QUOTES, 'UTF-8' );
|
120 |
+
|
121 |
+
if( $caption )
|
122 |
+
$converted_attachment['fields'][$caption] = htmlentities( stripslashes( $legacy_attachment['caption'] ), ENT_QUOTES, 'UTF-8' );
|
123 |
+
|
124 |
+
// check to see if the existing Attachments have our target instance
|
125 |
+
if( !isset( $existing_attachments->$instance ) )
|
126 |
+
{
|
127 |
+
// the instance doesn't exist so we need to create it
|
128 |
+
$existing_attachments->$instance = array();
|
129 |
+
}
|
130 |
+
|
131 |
+
// we need to convert our array to an object
|
132 |
+
$converted_attachment['fields'] = (object) $converted_attachment['fields'];
|
133 |
+
$converted_attachment = (object) $converted_attachment;
|
134 |
+
|
135 |
+
// append this legacy attachment to the existing instance
|
136 |
+
array_push( $existing_attachments->$instance, $converted_attachment );
|
137 |
+
}
|
138 |
+
|
139 |
+
// we're done! let's save everything in our new format
|
140 |
+
$existing_attachments = version_compare( PHP_VERSION, '5.4.0', '>=' ) ? json_encode( $existing_attachments, JSON_UNESCAPED_UNICODE ) : json_encode( $existing_attachments );
|
141 |
+
|
142 |
+
// save it to the database
|
143 |
+
update_post_meta( $query->post->ID, 'attachments', $existing_attachments );
|
144 |
+
|
145 |
+
// increment our counter
|
146 |
+
$count++;
|
147 |
+
} }
|
148 |
+
|
149 |
+
return $count;
|
150 |
+
}
|
151 |
+
|
152 |
+
|
153 |
+
|
154 |
+
/**
|
155 |
+
* Step 1 of the migration process. Allows the user to define the target instance and field names.
|
156 |
+
*
|
157 |
+
* @since 3.2
|
158 |
+
*/
|
159 |
+
function prepare_migration()
|
160 |
+
{
|
161 |
+
if( !wp_verify_nonce( $_GET['nonce'], 'attachments-migrate-1') ) wp_die( __( 'Invalid request', 'attachments' ) );
|
162 |
+
?>
|
163 |
+
<h3><?php _e( 'Migration Step 1', 'attachments' ); ?></h3>
|
164 |
+
<p><?php _e( "In order to migrate Attachments 1.x data, you need to set which instance and fields in version 3.0+ you'd like to use:", 'attachments' ); ?></p>
|
165 |
+
<form action="options-general.php" method="get">
|
166 |
+
<input type="hidden" name="page" value="attachments" />
|
167 |
+
<input type="hidden" name="migrate" value="2" />
|
168 |
+
<input type="hidden" name="nonce" value="<?php echo wp_create_nonce( 'attachments-migrate-2' ); ?>" />
|
169 |
+
<table class="form-table">
|
170 |
+
<tbody>
|
171 |
+
<tr valign="top">
|
172 |
+
<th scope="row">
|
173 |
+
<label for="attachments-instance"><?php _e( 'Attachments 3.x Instance', 'attachments' ); ?></label>
|
174 |
+
</th>
|
175 |
+
<td>
|
176 |
+
<input name="attachments-instance" id="attachments-instance" value="attachments" class="regular-text" />
|
177 |
+
<p class="description"><?php _e( 'The instance name you would like to use in the migration. Required.', 'attachments' ); ?></p>
|
178 |
+
</td>
|
179 |
+
</tr>
|
180 |
+
<tr valign="top">
|
181 |
+
<th scope="row">
|
182 |
+
<label for="attachments-title"><?php _e( 'Attachments 3.x Title', 'attachments' ); ?></label>
|
183 |
+
</th>
|
184 |
+
<td>
|
185 |
+
<input name="attachments-title" id="attachments-title" value="title" class="regular-text" />
|
186 |
+
<p class="description"><?php _e( 'The <code>Title</code> field data will be migrated to this field name in Attachments 3.x. Leave empty to disregard.', 'attachments' ); ?></p>
|
187 |
+
</td>
|
188 |
+
</tr>
|
189 |
+
<tr valign="top">
|
190 |
+
<th scope="row">
|
191 |
+
<label for="attachments-caption"><?php _e( 'Attachments 3.x Caption', 'attachments' ); ?></label>
|
192 |
+
</th>
|
193 |
+
<td>
|
194 |
+
<input name="attachments-caption" id="attachments-caption" value="caption" class="regular-text" />
|
195 |
+
<p class="description"><?php _e( 'The <code>Caption</code> field data will be migrated to this field name in Attachments 3.x. Leave empty to disregard.', 'attachments' ); ?></p>
|
196 |
+
</td>
|
197 |
+
</tr>
|
198 |
+
</tbody>
|
199 |
+
</table>
|
200 |
+
<p class="submit">
|
201 |
+
<input type="submit" name="submit" id="submit" class="button button-primary" value="<?php esc_attr_e( 'Start Migration', 'attachments' ); ?>" />
|
202 |
+
</p>
|
203 |
+
</form>
|
204 |
+
<?php
|
205 |
+
}
|
206 |
+
|
207 |
+
|
208 |
+
|
209 |
+
/**
|
210 |
+
* Step 2 of the migration process. Validates migration requests and fires the migration method.
|
211 |
+
*
|
212 |
+
* @since 3.2
|
213 |
+
*/
|
214 |
+
function init_migration()
|
215 |
+
{
|
216 |
+
if( !wp_verify_nonce( $_GET['nonce'], 'attachments-migrate-2') )
|
217 |
+
wp_die( __( 'Invalid request', 'attachments' ) );
|
218 |
+
|
219 |
+
$total = $this->migrate( $_GET['attachments-instance'], $_GET['attachments-title'], $_GET['attachments-caption'] );
|
220 |
+
|
221 |
+
if( false == get_option( 'attachments_migrated' ) ) :
|
222 |
+
?>
|
223 |
+
<h3><?php _e( 'Migration Complete!', 'attachments' ); ?></h3>
|
224 |
+
<p><?php _e( 'The migration has completed.', 'attachments' ); ?> <strong><?php _e( 'Migrated', 'attachments'); ?>: <?php echo $total; ?></strong>.</p>
|
225 |
+
<?php else : ?>
|
226 |
+
<h3><?php _e( 'Migration has already Run!', 'attachments' ); ?></h3>
|
227 |
+
<p><?php _e( 'The migration has already been run. The migration process has not been repeated.', 'attachments' ); ?></p>
|
228 |
+
<?php endif;
|
229 |
+
|
230 |
+
// make sure the database knows the migration has run
|
231 |
+
add_option( 'attachments_migrated', true, '', 'no' );
|
232 |
+
}
|
233 |
+
|
234 |
+
}
|
classes/class.attachments.php
CHANGED
@@ -32,6 +32,8 @@ if ( !class_exists( 'Attachments' ) ) :
|
|
32 |
private $fields; // stores all registered field types
|
33 |
private $attachments; // stores all of the Attachments for the given instance
|
34 |
|
|
|
|
|
35 |
private $image_sizes = array( 'full' ); // store all registered image sizes
|
36 |
private $default_instance = true; // use the default instance?
|
37 |
private $attachments_ref = -1; // flags where a get() loop last did it's thing
|
@@ -56,7 +58,8 @@ if ( !class_exists( 'Attachments' ) ) :
|
|
56 |
global $_wp_additional_image_sizes;
|
57 |
|
58 |
// establish our environment variables
|
59 |
-
|
|
|
60 |
$this->url = ATTACHMENTS_URL;
|
61 |
$this->dir = ATTACHMENTS_DIR;
|
62 |
|
@@ -64,47 +67,35 @@ if ( !class_exists( 'Attachments' ) ) :
|
|
64 |
include_once( ATTACHMENTS_DIR . 'upgrade.php' );
|
65 |
include_once( ATTACHMENTS_DIR . '/classes/class.field.php' );
|
66 |
|
|
|
|
|
|
|
67 |
// deal with our legacy issues if the user hasn't dismissed or migrated already
|
68 |
-
|
69 |
-
{
|
70 |
-
// TODO: this will not retrieve posts that have exclude_from_search = true
|
71 |
-
// TODO: make this reusable elsewhere
|
72 |
-
$legacy = new WP_Query( 'post_type=any&post_status=any&posts_per_page=1&meta_key=_attachments' );
|
73 |
-
$this->legacy = empty( $legacy->found_posts ) ? false : true;
|
74 |
-
}
|
75 |
-
else
|
76 |
-
{
|
77 |
-
$this->legacy = false;
|
78 |
-
}
|
79 |
|
80 |
// set our image sizes
|
81 |
$this->image_sizes = array_merge( $this->image_sizes, get_intermediate_image_sizes() );
|
82 |
|
83 |
-
// include our fields
|
84 |
-
$this->fields = $this->get_field_types();
|
85 |
-
|
86 |
// hook into WP
|
87 |
-
add_action( 'admin_enqueue_scripts',
|
88 |
-
add_action( 'admin_enqueue_scripts',
|
89 |
|
90 |
// register our user-defined instances
|
91 |
-
add_action( 'init',
|
92 |
|
93 |
// determine which instances apply to the current post type
|
94 |
-
add_action( 'init',
|
95 |
-
|
96 |
-
add_action( 'add_meta_boxes', array( $this, 'meta_box_init' ) );
|
97 |
-
|
98 |
-
add_action( 'admin_footer', array( $this, 'admin_footer' ) );
|
99 |
|
100 |
-
add_action( '
|
101 |
-
|
102 |
-
add_action( '
|
|
|
103 |
|
104 |
// with version 3 we'll be giving at least one admin notice
|
105 |
-
add_action( 'admin_notices',
|
106 |
|
107 |
-
add_action( '
|
|
|
108 |
|
109 |
// set our attachments if necessary
|
110 |
if( !is_null( $instance ) )
|
@@ -113,6 +104,59 @@ if ( !class_exists( 'Attachments' ) ) :
|
|
113 |
|
114 |
|
115 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
116 |
/**
|
117 |
* Returns whether or not the current object has any Attachments
|
118 |
*
|
@@ -496,7 +540,7 @@ if ( !class_exists( 'Attachments' ) ) :
|
|
496 |
|
497 |
// only thumbnails have sizes which is what we're on the hunt for
|
498 |
if(attachments_isset(attachment.attributes.sizes)){
|
499 |
-
|
500 |
if(attachments_isset(attachment.attributes.sizes.thumbnail.url)){
|
501 |
// use the thumbnail
|
502 |
attachment.attributes.attachment_thumb = attachment.attributes.sizes.thumbnail.url;
|
@@ -936,19 +980,26 @@ if ( !class_exists( 'Attachments' ) ) :
|
|
936 |
|
937 |
|
938 |
|
|
|
|
|
|
|
|
|
|
|
939 |
function field_assets()
|
940 |
{
|
|
|
|
|
|
|
|
|
|
|
|
|
941 |
// all metaboxes have been put in place, we can now determine which field assets need to be included
|
942 |
|
943 |
// first we'll get a list of the field types on screen
|
944 |
$fieldtypes = array();
|
945 |
foreach( $this->instances_for_post_type as $instance )
|
946 |
-
{
|
947 |
foreach( $this->instances[$instance]['fields'] as $field )
|
948 |
-
{
|
949 |
$fieldtypes[] = $field['type'];
|
950 |
-
}
|
951 |
-
}
|
952 |
|
953 |
// we only want to dump out assets once for each field type
|
954 |
$fieldtypes = array_unique( $fieldtypes );
|
@@ -963,6 +1014,40 @@ if ( !class_exists( 'Attachments' ) ) :
|
|
963 |
|
964 |
|
965 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
966 |
/**
|
967 |
* Outputs all necessary Backbone templates
|
968 |
* Each Backbone template includes each field present in an instance
|
@@ -1287,4 +1372,4 @@ if ( !class_exists( 'Attachments' ) ) :
|
|
1287 |
|
1288 |
endif; // class_exists check
|
1289 |
|
1290 |
-
new Attachments();
|
32 |
private $fields; // stores all registered field types
|
33 |
private $attachments; // stores all of the Attachments for the given instance
|
34 |
|
35 |
+
private $legacy = false; // whether or not there is legacy Attachments data
|
36 |
+
private $legacy_pro = false; // whether or not there is legacy Attachment Pro data
|
37 |
private $image_sizes = array( 'full' ); // store all registered image sizes
|
38 |
private $default_instance = true; // use the default instance?
|
39 |
private $attachments_ref = -1; // flags where a get() loop last did it's thing
|
58 |
global $_wp_additional_image_sizes;
|
59 |
|
60 |
// establish our environment variables
|
61 |
+
|
62 |
+
$this->version = '3.1.3';
|
63 |
$this->url = ATTACHMENTS_URL;
|
64 |
$this->dir = ATTACHMENTS_DIR;
|
65 |
|
67 |
include_once( ATTACHMENTS_DIR . 'upgrade.php' );
|
68 |
include_once( ATTACHMENTS_DIR . '/classes/class.field.php' );
|
69 |
|
70 |
+
// include our fields
|
71 |
+
$this->fields = $this->get_field_types();
|
72 |
+
|
73 |
// deal with our legacy issues if the user hasn't dismissed or migrated already
|
74 |
+
$this->check_for_legacy_data();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
75 |
|
76 |
// set our image sizes
|
77 |
$this->image_sizes = array_merge( $this->image_sizes, get_intermediate_image_sizes() );
|
78 |
|
|
|
|
|
|
|
79 |
// hook into WP
|
80 |
+
add_action( 'admin_enqueue_scripts', array( $this, 'assets' ), 999, 1 );
|
81 |
+
add_action( 'admin_enqueue_scripts', array( $this, 'admin_pointer' ), 999 );
|
82 |
|
83 |
// register our user-defined instances
|
84 |
+
add_action( 'init', array( $this, 'do_actions_filters' ) );
|
85 |
|
86 |
// determine which instances apply to the current post type
|
87 |
+
add_action( 'init', array( $this, 'set_instances_for_current_post_type' ) );
|
|
|
|
|
|
|
|
|
88 |
|
89 |
+
add_action( 'add_meta_boxes', array( $this, 'meta_box_init' ) );
|
90 |
+
add_action( 'admin_footer', array( $this, 'admin_footer' ) );
|
91 |
+
add_action( 'save_post', array( $this, 'save' ) );
|
92 |
+
add_action( 'admin_menu', array( $this, 'admin_page' ) );
|
93 |
|
94 |
// with version 3 we'll be giving at least one admin notice
|
95 |
+
add_action( 'admin_notices', array( $this, 'admin_notice' ) );
|
96 |
|
97 |
+
add_action( 'admin_head', array( $this, 'field_inits' ) );
|
98 |
+
add_action( 'admin_print_footer_scripts', array( $this, 'field_assets' ) );
|
99 |
|
100 |
// set our attachments if necessary
|
101 |
if( !is_null( $instance ) )
|
104 |
|
105 |
|
106 |
|
107 |
+
/**
|
108 |
+
* Stores whether or not this environment has active legacy Attachments/Pro data
|
109 |
+
*
|
110 |
+
* @since 3.1.3
|
111 |
+
*/
|
112 |
+
function check_for_legacy_data()
|
113 |
+
{
|
114 |
+
// deal with our legacy issues if the user hasn't dismissed or migrated already
|
115 |
+
if( false == get_option( 'attachments_migrated' ) && false == get_option( 'attachments_ignore_migration' ) )
|
116 |
+
{
|
117 |
+
$legacy_attachments_settings = get_option( 'attachments_settings' );
|
118 |
+
|
119 |
+
if( $legacy_attachments_settings && is_array( $legacy_attachments_settings['post_types'] ) && count( $legacy_attachments_settings['post_types'] ) )
|
120 |
+
{
|
121 |
+
// we have legacy settings, so we're going to use the post types
|
122 |
+
// that Attachments is currently utilizing
|
123 |
+
|
124 |
+
// the keys are the actual CPT names, so we need those
|
125 |
+
foreach( $legacy_attachments_settings['post_types'] as $post_type => $value )
|
126 |
+
if( $value )
|
127 |
+
$post_types[] = $post_type;
|
128 |
+
|
129 |
+
// set up our WP_Query args to grab anything with legacy data
|
130 |
+
$args = array(
|
131 |
+
'post_type' => isset( $post_types ) ? $post_types : array(),
|
132 |
+
'post_status' => 'any',
|
133 |
+
'posts_per_page' => 1,
|
134 |
+
'meta_key' => '_attachments',
|
135 |
+
);
|
136 |
+
|
137 |
+
$legacy = new WP_Query( $args );
|
138 |
+
$this->legacy = empty( $legacy->found_posts ) ? false : true;
|
139 |
+
}
|
140 |
+
}
|
141 |
+
|
142 |
+
// deal with our legacy Pro issues if the user hasn't dismissed or migrated already
|
143 |
+
if( false == get_option( 'attachments_pro_migrated' ) && false == get_option( 'attachments_pro_ignore_migration' ) )
|
144 |
+
{
|
145 |
+
// set up our WP_Query args to grab anything (really anything) with legacy data
|
146 |
+
$args = array(
|
147 |
+
'post_type' => get_post_types(),
|
148 |
+
'post_status' => 'any',
|
149 |
+
'posts_per_page' => 1,
|
150 |
+
'meta_key' => '_attachments_pro',
|
151 |
+
);
|
152 |
+
|
153 |
+
$legacy_pro = new WP_Query( $args );
|
154 |
+
$this->legacy_pro = empty( $legacy_pro->found_posts ) ? false : true;
|
155 |
+
}
|
156 |
+
}
|
157 |
+
|
158 |
+
|
159 |
+
|
160 |
/**
|
161 |
* Returns whether or not the current object has any Attachments
|
162 |
*
|
540 |
|
541 |
// only thumbnails have sizes which is what we're on the hunt for
|
542 |
if(attachments_isset(attachment.attributes.sizes)){
|
543 |
+
if(attachments_isset(attachment.attributes.sizes.thumbnail)){
|
544 |
if(attachments_isset(attachment.attributes.sizes.thumbnail.url)){
|
545 |
// use the thumbnail
|
546 |
attachment.attributes.attachment_thumb = attachment.attributes.sizes.thumbnail.url;
|
980 |
|
981 |
|
982 |
|
983 |
+
/**
|
984 |
+
* Callback to fire the assets() function for reach registered field
|
985 |
+
*
|
986 |
+
* @since 3.1
|
987 |
+
*/
|
988 |
function field_assets()
|
989 |
{
|
990 |
+
global $post;
|
991 |
+
|
992 |
+
// we only want to enqueue if we're on an edit screen and it's applicable
|
993 |
+
if( empty( $this->instances_for_post_type ) || empty( $post ) )
|
994 |
+
return;
|
995 |
+
|
996 |
// all metaboxes have been put in place, we can now determine which field assets need to be included
|
997 |
|
998 |
// first we'll get a list of the field types on screen
|
999 |
$fieldtypes = array();
|
1000 |
foreach( $this->instances_for_post_type as $instance )
|
|
|
1001 |
foreach( $this->instances[$instance]['fields'] as $field )
|
|
|
1002 |
$fieldtypes[] = $field['type'];
|
|
|
|
|
1003 |
|
1004 |
// we only want to dump out assets once for each field type
|
1005 |
$fieldtypes = array_unique( $fieldtypes );
|
1014 |
|
1015 |
|
1016 |
|
1017 |
+
/**
|
1018 |
+
* Callback to fire the init() function for reach registered field
|
1019 |
+
*
|
1020 |
+
* @since 3.1
|
1021 |
+
*/
|
1022 |
+
function field_inits()
|
1023 |
+
{
|
1024 |
+
global $post;
|
1025 |
+
|
1026 |
+
// we only want to enqueue if we're on an edit screen and it's applicable
|
1027 |
+
if( empty( $this->instances_for_post_type ) || empty( $post ) )
|
1028 |
+
return;
|
1029 |
+
|
1030 |
+
// all metaboxes have been put in place, we can now determine which field assets need to be included
|
1031 |
+
|
1032 |
+
// first we'll get a list of the field types on screen
|
1033 |
+
$fieldtypes = array();
|
1034 |
+
foreach( $this->instances_for_post_type as $instance )
|
1035 |
+
foreach( $this->instances[$instance]['fields'] as $field )
|
1036 |
+
$fieldtypes[] = $field['type'];
|
1037 |
+
|
1038 |
+
// we only want to dump out assets once for each field type
|
1039 |
+
$fieldtypes = array_unique( $fieldtypes );
|
1040 |
+
|
1041 |
+
// loop through and dump out all the assets
|
1042 |
+
foreach( $fieldtypes as $fieldtype )
|
1043 |
+
{
|
1044 |
+
$field = new $this->fields[$fieldtype];
|
1045 |
+
$field->init();
|
1046 |
+
}
|
1047 |
+
}
|
1048 |
+
|
1049 |
+
|
1050 |
+
|
1051 |
/**
|
1052 |
* Outputs all necessary Backbone templates
|
1053 |
* Each Backbone template includes each field present in an instance
|
1372 |
|
1373 |
endif; // class_exists check
|
1374 |
|
1375 |
+
new Attachments();
|
classes/class.field.php
CHANGED
@@ -15,6 +15,7 @@ if ( !class_exists( 'Attachments_Field' ) ) :
|
|
15 |
public function html( $field );
|
16 |
public function format_value_for_input( $value, $field = null );
|
17 |
public function assets();
|
|
|
18 |
}
|
19 |
|
20 |
class Attachments_Field implements Attachments_Field_Template
|
@@ -80,6 +81,11 @@ if ( !class_exists( 'Attachments_Field' ) ) :
|
|
80 |
return;
|
81 |
}
|
82 |
|
|
|
|
|
|
|
|
|
|
|
83 |
}
|
84 |
|
85 |
endif; // class_exists check
|
15 |
public function html( $field );
|
16 |
public function format_value_for_input( $value, $field = null );
|
17 |
public function assets();
|
18 |
+
public function init();
|
19 |
}
|
20 |
|
21 |
class Attachments_Field implements Attachments_Field_Template
|
81 |
return;
|
82 |
}
|
83 |
|
84 |
+
public function init()
|
85 |
+
{
|
86 |
+
return;
|
87 |
+
}
|
88 |
+
|
89 |
}
|
90 |
|
91 |
endif; // class_exists check
|
classes/fields/class.field.text.php
CHANGED
@@ -32,4 +32,9 @@ class Attachments_Field_Text extends Attachments_Field implements Attachments_Fi
|
|
32 |
return;
|
33 |
}
|
34 |
|
|
|
|
|
|
|
|
|
|
|
35 |
}
|
32 |
return;
|
33 |
}
|
34 |
|
35 |
+
function init()
|
36 |
+
{
|
37 |
+
return;
|
38 |
+
}
|
39 |
+
|
40 |
}
|
classes/fields/class.field.textarea.php
CHANGED
@@ -32,4 +32,9 @@ class Attachments_Field_Textarea extends Attachments_Field implements Attachment
|
|
32 |
return;
|
33 |
}
|
34 |
|
|
|
|
|
|
|
|
|
|
|
35 |
}
|
32 |
return;
|
33 |
}
|
34 |
|
35 |
+
function init()
|
36 |
+
{
|
37 |
+
return;
|
38 |
+
}
|
39 |
+
|
40 |
}
|
classes/fields/class.field.wysiwyg.php
CHANGED
@@ -14,7 +14,19 @@ class Attachments_Field_WYSIWYG extends Attachments_Field implements Attachments
|
|
14 |
{
|
15 |
parent::__construct( $name, $label, $value );
|
16 |
|
17 |
-
add_filter( 'wp_default_editor',
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
18 |
}
|
19 |
|
20 |
function html( $field )
|
@@ -57,6 +69,7 @@ class Attachments_Field_WYSIWYG extends Attachments_Field implements Attachments
|
|
57 |
var input_id = $(this).attr('id');
|
58 |
|
59 |
// create wysiwyg
|
|
|
60 |
tinyMCE.settings.theme_advanced_buttons2 += ',code';
|
61 |
tinyMCE.settings.wpautop = false;
|
62 |
tinyMCE.execCommand('mceAddControl', false, input_id);
|
14 |
{
|
15 |
parent::__construct( $name, $label, $value );
|
16 |
|
17 |
+
add_filter( 'wp_default_editor', array( $this, 'wp_default_editor' ) );
|
18 |
+
}
|
19 |
+
|
20 |
+
function init()
|
21 |
+
{
|
22 |
+
global $post;
|
23 |
+
|
24 |
+
// ensure we've got TinyMCE to work with
|
25 |
+
$has_editor = post_type_supports( $post->post_type, 'editor' );
|
26 |
+
add_post_type_support( $post->post_type, 'editor' );
|
27 |
+
|
28 |
+
if( !$has_editor )
|
29 |
+
echo '<style type="text/css">#poststuff .postarea { display:none; }</style>';
|
30 |
}
|
31 |
|
32 |
function html( $field )
|
69 |
var input_id = $(this).attr('id');
|
70 |
|
71 |
// create wysiwyg
|
72 |
+
|
73 |
tinyMCE.settings.theme_advanced_buttons2 += ',code';
|
74 |
tinyMCE.settings.wpautop = false;
|
75 |
tinyMCE.execCommand('mceAddControl', false, input_id);
|
index.php
CHANGED
@@ -6,7 +6,7 @@
|
|
6 |
* Description: Attachments gives the ability to append any number of Media Library items to Pages, Posts, and Custom Post Types
|
7 |
* Author: Jonathan Christopher
|
8 |
* Author URI: http://mondaybynoon.com/
|
9 |
-
* Version: 3.1.
|
10 |
* Text Domain: attachments
|
11 |
* Domain Path: /languages/
|
12 |
* License: GPLv2 or later
|
6 |
* Description: Attachments gives the ability to append any number of Media Library items to Pages, Posts, and Custom Post Types
|
7 |
* Author: Jonathan Christopher
|
8 |
* Author URI: http://mondaybynoon.com/
|
9 |
+
* Version: 3.1.3
|
10 |
* Text Domain: attachments
|
11 |
* Domain Path: /languages/
|
12 |
* License: GPLv2 or later
|
readme.txt
CHANGED
@@ -4,7 +4,7 @@ Donate link: http://mondaybynoon.com/donate/
|
|
4 |
Tags: post, page, posts, pages, images, PDF, doc, Word, image, jpg, jpeg, picture, pictures, photos, attachment
|
5 |
Requires at least: 3.0
|
6 |
Tested up to: 3.5
|
7 |
-
Stable tag: 3.1.
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
|
@@ -95,6 +95,11 @@ Attachments uses WordPress' built in Media library for uploads and storage.
|
|
95 |
|
96 |
== Changelog ==
|
97 |
|
|
|
|
|
|
|
|
|
|
|
98 |
= 3.1.2 =
|
99 |
* Fixed a regression that prevented successful migration of legacy Attachments data
|
100 |
|
4 |
Tags: post, page, posts, pages, images, PDF, doc, Word, image, jpg, jpeg, picture, pictures, photos, attachment
|
5 |
Requires at least: 3.0
|
6 |
Tested up to: 3.5
|
7 |
+
Stable tag: 3.1.3
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
|
95 |
|
96 |
== Changelog ==
|
97 |
|
98 |
+
= 3.1.3 =
|
99 |
+
* Fixed a potential issue with the WYSIWYG field not working on CPT without editor support
|
100 |
+
* Field assets are less aggressive and only fire when necessary
|
101 |
+
* Reorganized the migration process a bit in prep for Attachments Pro support
|
102 |
+
|
103 |
= 3.1.2 =
|
104 |
* Fixed a regression that prevented successful migration of legacy Attachments data
|
105 |
|
views/options.php
CHANGED
@@ -1,127 +1,15 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
//
|
4 |
-
|
5 |
-
|
6 |
-
/**
|
7 |
-
* Migrate Attachments 1.x records to 3.0's format
|
8 |
-
*
|
9 |
-
* @since 3.0
|
10 |
-
*/
|
11 |
-
function attachments_migrate( $instance = null, $title = null, $caption = null )
|
12 |
-
{
|
13 |
-
// sanitize
|
14 |
-
if( is_null( $instance ) || empty( $instance ) || is_null( $title ) || is_null( $caption ) )
|
15 |
-
return false;
|
16 |
-
|
17 |
-
$instance = str_replace( '-', '_', sanitize_title( $instance ) );
|
18 |
-
$title = empty( $title ) ? false : str_replace( '-', '_', sanitize_title( $title ) );
|
19 |
-
$caption = empty( $caption ) ? false : str_replace( '-', '_', sanitize_title( $caption ) );
|
20 |
-
|
21 |
-
// we need our deprecated functions
|
22 |
-
include_once( ATTACHMENTS_DIR . '/deprecated/get-attachments.php' );
|
23 |
-
|
24 |
-
// grab all of the posts we need to migrate
|
25 |
-
// TODO: this will not retrieve posts that have exclude_from_search = true
|
26 |
-
// TODO: make this reusable elsewhere
|
27 |
-
$query = new WP_Query( 'post_type=any&post_status=any&posts_per_page=-1&meta_key=_attachments' );
|
28 |
-
|
29 |
-
$count = 0;
|
30 |
-
|
31 |
-
// loop through each post
|
32 |
-
while( $query->have_posts() )
|
33 |
-
{
|
34 |
-
// set up postdata
|
35 |
-
$query->the_post();
|
36 |
-
|
37 |
-
// let's first decode our Attachments data
|
38 |
-
$existing_attachments = get_post_meta( $query->post->ID, '_attachments', false );
|
39 |
-
|
40 |
-
$post_attachments = array();
|
41 |
-
|
42 |
-
// check to make sure we've got data
|
43 |
-
if( is_array( $existing_attachments ) && count( $existing_attachments ) > 0 )
|
44 |
-
{
|
45 |
-
// loop through each existing attachment
|
46 |
-
foreach( $existing_attachments as $attachment )
|
47 |
-
{
|
48 |
-
// decode and unserialize the data
|
49 |
-
$data = unserialize( base64_decode( $attachment ) );
|
50 |
-
|
51 |
-
array_push( $post_attachments, array(
|
52 |
-
'id' => stripslashes( $data['id'] ),
|
53 |
-
'title' => stripslashes( $data['title'] ),
|
54 |
-
'caption' => stripslashes( $data['caption'] ),
|
55 |
-
'order' => stripslashes( $data['order'] )
|
56 |
-
));
|
57 |
-
}
|
58 |
-
|
59 |
-
// sort attachments
|
60 |
-
if( count( $post_attachments ) > 1 )
|
61 |
-
{
|
62 |
-
usort( $post_attachments, 'attachments_cmp' );
|
63 |
-
}
|
64 |
-
}
|
65 |
-
|
66 |
-
// we have our Attachments entries
|
67 |
-
|
68 |
-
// let's check to see if we're migrating after population has taken place
|
69 |
-
$existing_attachments = get_post_meta( $query->post->ID, 'attachments', false );
|
70 |
-
|
71 |
-
if( !isset( $existing_attachments[0] ) )
|
72 |
-
$existing_attachments[0] = '';
|
73 |
-
|
74 |
-
$existing_attachments = json_decode( $existing_attachments[0] );
|
75 |
-
|
76 |
-
if( !is_object( $existing_attachments ) )
|
77 |
-
$existing_attachments = new stdClass();
|
78 |
-
|
79 |
-
// we'll loop through the legacy Attachments and save them in the new format
|
80 |
-
foreach( $post_attachments as $legacy_attachment )
|
81 |
-
{
|
82 |
-
// convert to the new format
|
83 |
-
$converted_attachment = array( 'id' => $legacy_attachment['id'] );
|
84 |
-
|
85 |
-
// fields are technically optional so we'll add those separately
|
86 |
-
// we're also going to encode them in the same way the main class does
|
87 |
-
if( $title )
|
88 |
-
$converted_attachment['fields'][$title] = htmlentities( stripslashes( $legacy_attachment['title'] ), ENT_QUOTES, 'UTF-8' );
|
89 |
-
|
90 |
-
if( $caption )
|
91 |
-
$converted_attachment['fields'][$caption] = htmlentities( stripslashes( $legacy_attachment['caption'] ), ENT_QUOTES, 'UTF-8' );
|
92 |
-
|
93 |
-
// check to see if the existing Attachments have our target instance
|
94 |
-
if( !isset( $existing_attachments->$instance ) )
|
95 |
-
{
|
96 |
-
// the instance doesn't exist so we need to create it
|
97 |
-
$existing_attachments->$instance = array();
|
98 |
-
}
|
99 |
-
|
100 |
-
// we need to convert our array to an object
|
101 |
-
$converted_attachment['fields'] = (object) $converted_attachment['fields'];
|
102 |
-
$converted_attachment = (object) $converted_attachment;
|
103 |
-
|
104 |
-
// append this legacy attachment to the existing instance
|
105 |
-
array_push( $existing_attachments->$instance, $converted_attachment );
|
106 |
-
}
|
107 |
-
|
108 |
-
// we're done! let's save everything in our new format
|
109 |
-
$existing_attachments = version_compare( PHP_VERSION, '5.4.0', '>=' ) ? json_encode( $existing_attachments, JSON_UNESCAPED_UNICODE ) : json_encode( $existing_attachments );
|
110 |
-
|
111 |
-
// save it to the database
|
112 |
-
update_post_meta( $query->post->ID, 'attachments', $existing_attachments );
|
113 |
-
|
114 |
-
// increment our counter
|
115 |
-
$count++;
|
116 |
-
}
|
117 |
-
|
118 |
-
return $count;
|
119 |
-
}
|
120 |
|
121 |
if( isset( $_GET['dismiss'] ) )
|
122 |
{
|
123 |
-
if( !wp_verify_nonce( $_GET['nonce'], 'attachments-dismiss') )
|
|
|
124 |
|
|
|
125 |
add_option( 'attachments_ignore_migration', true, '', 'no' );
|
126 |
}
|
127 |
?>
|
@@ -173,93 +61,31 @@
|
|
173 |
<?php endif; ?>
|
174 |
|
175 |
<?php
|
176 |
-
|
177 |
-
// check for any legacy Attachments
|
178 |
-
// TODO: this will not retrieve posts that have exclude_from_search = true
|
179 |
-
// TODO: make this reusable elsewhere
|
180 |
-
$legacy = new WP_Query( 'post_type=any&post_status=any&posts_per_page=1&meta_key=_attachments' );
|
181 |
-
|
182 |
// check to see if we're migrating
|
183 |
if( isset( $_GET['migrate'] ) )
|
184 |
{
|
185 |
switch( intval( $_GET['migrate'] ) )
|
186 |
{
|
187 |
case 1:
|
188 |
-
|
189 |
-
?>
|
190 |
-
<h3><?php _e( 'Migration Step 1', 'attachments' ); ?></h3>
|
191 |
-
<p><?php _e( "In order to migrate Attachments 1.x data, you need to set which instance and fields in version 3.0+ you'd like to use:", 'attachments' ); ?></p>
|
192 |
-
<form action="options-general.php" method="get">
|
193 |
-
<input type="hidden" name="page" value="attachments" />
|
194 |
-
<input type="hidden" name="migrate" value="2" />
|
195 |
-
<input type="hidden" name="nonce" value="<?php echo wp_create_nonce( 'attachments-migrate-2' ); ?>" />
|
196 |
-
<table class="form-table">
|
197 |
-
<tbody>
|
198 |
-
<tr valign="top">
|
199 |
-
<th scope="row">
|
200 |
-
<label for="attachments-instance"><?php _e( 'Attachments 3.x Instance', 'attachments' ); ?></label>
|
201 |
-
</th>
|
202 |
-
<td>
|
203 |
-
<input name="attachments-instance" id="attachments-instance" value="attachments" class="regular-text" />
|
204 |
-
<p class="description"><?php _e( 'The instance name you would like to use in the migration. Required.', 'attachments' ); ?></p>
|
205 |
-
</td>
|
206 |
-
</tr>
|
207 |
-
<tr valign="top">
|
208 |
-
<th scope="row">
|
209 |
-
<label for="attachments-title"><?php _e( 'Attachments 3.x Title', 'attachments' ); ?></label>
|
210 |
-
</th>
|
211 |
-
<td>
|
212 |
-
<input name="attachments-title" id="attachments-title" value="title" class="regular-text" />
|
213 |
-
<p class="description"><?php _e( 'The <code>Title</code> field data will be migrated to this field name in Attachments 3.x. Leave empty to disregard.', 'attachments' ); ?></p>
|
214 |
-
</td>
|
215 |
-
</tr>
|
216 |
-
<tr valign="top">
|
217 |
-
<th scope="row">
|
218 |
-
<label for="attachments-caption"><?php _e( 'Attachments 3.x Caption', 'attachments' ); ?></label>
|
219 |
-
</th>
|
220 |
-
<td>
|
221 |
-
<input name="attachments-caption" id="attachments-caption" value="caption" class="regular-text" />
|
222 |
-
<p class="description"><?php _e( 'The <code>Caption</code> field data will be migrated to this field name in Attachments 3.x. Leave empty to disregard.', 'attachments' ); ?></p>
|
223 |
-
</td>
|
224 |
-
</tr>
|
225 |
-
</tbody>
|
226 |
-
</table>
|
227 |
-
<p class="submit">
|
228 |
-
<input type="submit" name="submit" id="submit" class="button button-primary" value="<?php esc_attr_e( 'Start Migration', 'attachments' ); ?>" />
|
229 |
-
</p>
|
230 |
-
</form>
|
231 |
-
<?php
|
232 |
break;
|
233 |
|
234 |
case 2:
|
235 |
-
|
236 |
-
|
237 |
-
$total = attachments_migrate( $_GET['attachments-instance'], $_GET['attachments-title'], $_GET['attachments-caption'] );
|
238 |
-
|
239 |
-
if( false == get_option( 'attachments_migrated' ) ) :
|
240 |
-
?>
|
241 |
-
<h3><?php _e( 'Migration Complete!', 'attachments' ); ?></h3>
|
242 |
-
<p><?php _e( 'The migration has completed.', 'attachments' ); ?> <strong><?php _e( 'Migrated', 'attachments'); ?>: <?php echo $total; ?></strong>.</p>
|
243 |
-
<?php else : ?>
|
244 |
-
<h3><?php _e( 'Migration Already Run!', 'attachments' ); ?></h3>
|
245 |
-
<p><?php _e( 'The migration has already been run. The migration process has not been repeated.', 'attachments' ); ?></p>
|
246 |
-
<?php endif;
|
247 |
-
|
248 |
-
// make sure the database knows the migration has run
|
249 |
-
add_option( 'attachments_migrated', true, '', 'no' );
|
250 |
-
|
251 |
break;
|
252 |
}
|
253 |
}
|
254 |
else
|
255 |
{ ?>
|
256 |
-
|
257 |
-
|
|
|
258 |
<p><?php _e( 'Attachments has found records from version 1.x. Would you like to migrate them to version 3?', 'attachments' ); ?></p>
|
259 |
-
<p><a href="?page=attachments&migrate=1&nonce=<?php echo wp_create_nonce( 'attachments-migrate-1' ); ?>" class="button-primary button"><?php _e( 'Migrate legacy
|
260 |
<?php elseif( true == get_option( 'attachments_migrated' ) ) : ?>
|
261 |
-
<p><?php _e( 'You have already migrated your legacy Attachments.', 'attachments' ); ?></p>
|
262 |
<?php endif; ?>
|
|
|
263 |
<h2><?php _e( 'Revert to version 1.x', 'attachments' ); ?></h2>
|
264 |
<p><?php _e( 'If you would like to forcefully revert to the 1.x version branch of Attachments, add the following to your', 'attachments' ); ?> <code>wp-config.php</code>:</p>
|
265 |
<p><code>define( 'ATTACHMENTS_LEGACY', true );</code></p>
|
1 |
<?php
|
2 |
|
3 |
+
// instantiate our migration class
|
4 |
+
include_once( ATTACHMENTS_DIR . '/classes/class.attachments.migrate.php' );
|
5 |
+
$migrator = new AttachmentsMigrate();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
|
7 |
if( isset( $_GET['dismiss'] ) )
|
8 |
{
|
9 |
+
if( !wp_verify_nonce( $_GET['nonce'], 'attachments-dismiss') )
|
10 |
+
wp_die( __( 'Invalid request', 'attachments' ) );
|
11 |
|
12 |
+
// set our flag that the user wants to ignore the migration message
|
13 |
add_option( 'attachments_ignore_migration', true, '', 'no' );
|
14 |
}
|
15 |
?>
|
61 |
<?php endif; ?>
|
62 |
|
63 |
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
64 |
// check to see if we're migrating
|
65 |
if( isset( $_GET['migrate'] ) )
|
66 |
{
|
67 |
switch( intval( $_GET['migrate'] ) )
|
68 |
{
|
69 |
case 1:
|
70 |
+
$migrator->prepare_migration();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
71 |
break;
|
72 |
|
73 |
case 2:
|
74 |
+
$migrator->init_migration();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
75 |
break;
|
76 |
}
|
77 |
}
|
78 |
else
|
79 |
{ ?>
|
80 |
+
|
81 |
+
<?php if( false == get_option( 'attachments_migrated' ) && $migrator->legacy ) : ?>
|
82 |
+
<h2><?php _e( 'Migrate legacy Attachments data', 'attachments' ); ?></h2>
|
83 |
<p><?php _e( 'Attachments has found records from version 1.x. Would you like to migrate them to version 3?', 'attachments' ); ?></p>
|
84 |
+
<p><a href="?page=attachments&migrate=1&nonce=<?php echo wp_create_nonce( 'attachments-migrate-1' ); ?>" class="button-primary button"><?php _e( 'Migrate legacy data', 'attachments' ); ?></a></p>
|
85 |
<?php elseif( true == get_option( 'attachments_migrated' ) ) : ?>
|
86 |
+
<p><?php _e( 'You have already migrated your legacy Attachments data.', 'attachments' ); ?></p>
|
87 |
<?php endif; ?>
|
88 |
+
|
89 |
<h2><?php _e( 'Revert to version 1.x', 'attachments' ); ?></h2>
|
90 |
<p><?php _e( 'If you would like to forcefully revert to the 1.x version branch of Attachments, add the following to your', 'attachments' ); ?> <code>wp-config.php</code>:</p>
|
91 |
<p><code>define( 'ATTACHMENTS_LEGACY', true );</code></p>
|