Browse code

予約更新のロールバック機能追加。 日時指定で予約更新前の記事内容に戻す。

nita authored on 2015/10/19 02:05:30
Showing 4 changed files
... ...
@@ -37,6 +37,10 @@ class Class_Rucy_Component {
37 37
         $post_meta_keys->feature_img = 'rc_reserv_feature_image';
38 38
         $post_meta_keys->accept_feature_img = 'rc_reserv_accept_feature_image';
39 39
         $post_meta_keys->accept_update = 'rc_reserv_accept_post_update';
40
+        $post_meta_keys->accept_rollback = 'rc_rollback_accept';
41
+        $post_meta_keys->rollback_date = 'rc_rollback_date';
42
+        $post_meta_keys->accept_rollback_update = 'rc_rollback_accept_update_date';
43
+        $post_meta_keys->accept_rollback_feature_img = 'rc_rollback_accept_feature_image';
40 44
         return $post_meta_keys;
41 45
     }
42 46
     
... ...
@@ -14,12 +14,16 @@ class Class_Rucy_Cron {
14 14
         if ( $post_metas->accept != "1" ) {
15 15
             return;
16 16
         }
17
+        // rollback
18
+        $rollback_data = array();
19
+        if( $post_metas->accept_rollback == "1" ) {
20
+            $rollback_data = $this->get_rollback_post( (int)$post_id, $post_metas->accept_rollback_date, $post_metas->accept_rollback_feature_img );
21
+        }
17 22
         // set update content
18 23
         $updates = array( 
19 24
             'ID' => (int)$post_id,    
20 25
             'post_content' => apply_filters( 'the_content', $post_metas->content ),
21 26
         );
22
-        wp_update_post( $updates, true );
23 27
         // set update post date
24 28
         if ( $post_metas->accept_update == "1" ) {
25 29
             $updates['post_date'] = $post_metas->date;
... ...
@@ -44,6 +48,11 @@ class Class_Rucy_Cron {
44 44
         }
45 45
         // clear schedule on wp_cron
46 46
         wp_clear_scheduled_hook( RC_CRON_HOOK, array( $post_id ) );
47
+        // save post meta for rollback
48
+        if ( $post_metas->accept_rollback == "1" ) {
49
+            $reserve_date = strtotime( get_gmt_from_date( $post_metas->rollback_date ) . "GMT" );
50
+            $this->set_rollback_setting( $post_id, $reserve_date, $rollback_data );
51
+        }
47 52
     }
48 53
     
49 54
     public function rc_content_allow_iframe( $content ) {
... ...
@@ -89,4 +98,34 @@ class Class_Rucy_Cron {
89 89
             return $res;
90 90
         }
91 91
     }
92
+    
93
+    private function get_rollback_post( $post_id, $accept_rollback_date = "0", $accept_rollback_feature_image = "0" ) {
94
+        $post_data = get_post( $post_id );
95
+        $component = new Class_Rucy_Component();
96
+        $post_meta_keys = $component->get_post_meta_keys();
97
+        
98
+        $res = array(
99
+            $post_meta_keys->content => $post_data->post_content,
100
+            $post_meta_keys->accept => "1",
101
+        );
102
+        if ( $accept_rollback_date == "1" ) {
103
+            $res[$post_meta_keys->accept_update] = "1";
104
+            $res[$post_meta_keys->date] = $post_data->post_date;
105
+        }
106
+        if ( $accept_rollback_feature_image == "1" ) {
107
+            $res[$post_meta_keys->accept_feature_img] = "1";
108
+            $feature_image = wp_get_attachment_image_src( get_post_thumbnail_id( $post_id ), 'full' );
109
+            $res[$post_meta_keys->feature_img] = $feature_image[0];
110
+        }
111
+        
112
+        return $res;
113
+    }
114
+    
115
+    private function set_rollback_setting( $post_id, $reserve_date, array $rollback_data ) {
116
+        $component = new Class_Rucy_Component();
117
+        foreach ( $rollback_data as $key => $value ) {
118
+            $component->save_rc_post_meta_base( (int)$post_id, $key, $rollback_data );
119
+        }
120
+         wp_schedule_single_event( $reserve_date, RC_CRON_HOOK, array( $post_id ) );
121
+    }
92 122
 }
... ...
@@ -30,7 +30,6 @@ class Class_Rucy_Editer {
30 30
         $this->post_metas = $component->get_post_rc_meta( $post->ID );
31 31
         $this->current_post_content = $post->post_content;
32 32
         $dismissed = explode( ',', get_user_meta( get_current_user_id(), 'dismissed_wp_pointers', true ) );
33
-        
34 33
         $reserve_date = ( $this->post_metas->date == "" ) ? date_i18n( 'Y-m-d H:i:s' ) : $this->post_metas->date;
35 34
         $arr_reserve_date = getdate(strtotime( $reserve_date ) );
36 35
         $arr_date = array(
... ...
@@ -41,6 +40,16 @@ class Class_Rucy_Editer {
41 41
             'rc_minutes' => date_i18n( 'i', $arr_reserve_date[0] ),
42 42
                 );
43 43
         $reserve_content = ( $this->post_metas->content == "" ) ? $this->current_post_content : $this->post_metas->content;
44
+        // rollback settings
45
+        $rollback_date = ( $this->post_metas->rollback_date == "" ) ? date_i18n( 'Y-m-d H:i:s' ) : $this->post_metas->rollback_date;
46
+        $arr_rollback_date = getdate(strtotime( $rollback_date ) );
47
+        $arr_rb_date = array(
48
+            'rc_rb_year' => date_i18n( 'Y', $arr_rollback_date[0] ),
49
+            'rc_rb_month' => date_i18n( 'm', $arr_rollback_date[0] ),
50
+            'rc_rb_day' => date_i18n( 'd', $arr_rollback_date[0] ),
51
+            'rc_rb_hour' => date_i18n( 'H', $arr_rollback_date[0] ),
52
+            'rc_rb_minutes' => date_i18n( 'i', $arr_rollback_date[0] ),
53
+        );
44 54
 ?>
45 55
 <div id="rc-post-wrap" class="curtime">
46 56
     <input type="hidden" id="schroeder" name="schroeder" value="<?php echo wp_create_nonce(plugin_basename(__FILE__)); ?>" />
... ...
@@ -153,6 +162,73 @@ class Class_Rucy_Editer {
153 153
 <input type="hidden" id="rc_feature_image" name="<?php echo $this->post_meta_keys->feature_img; ?>" value="<?php echo $this->post_metas->feature_img; ?>" />
154 154
 </div>
155 155
 </fieldset>
156
+<fieldset id="rc-rollback-container" class="curtime">
157
+    <h3><?php _e( 'Setting Rollback post content.', RC_TXT_DOMAIN ); ?></h3>
158
+    <label for="rc-accept-rollback-content">
159
+        <input type="checkbox" name="<?php echo $this->post_meta_keys->accept_rollback ?>" value="1" id="rc-accept-rollback-content" class="rc-accept-rollback-content" <?php echo ( $this->post_metas->accept_rollback == "1" ) ? "checked" : ""; ?> > <?php _e( 'Accept rollback content.', RC_TXT_DOMAIN ); ?>
160
+    </label>
161
+    <div class="rc-rollback-datetime" id="timestamp">
162
+        <?php _e( 'Rollback DateTime', RC_TXT_DOMAIN ); ?> : <strong><?php echo date_i18n("Y/m/d @ H:i", strtotime( $rollback_date ) ); ?></strong>
163
+    </div>
164
+    <a href="#edit-rollback-datetime" class="edit-timestamp rc-rollback-datetime-edit"><?php _e('Edit'); ?></a>
165
+    <div class="rc-rollback-datetime-wrap">
166
+        <select name="rc_rb_year" id="">
167
+    <?php  for( $y = $current_year; $y <= ( $current_year + 3); $y++ ): 
168
+        $selected_y = ( $y == date_i18n( 'Y', $arr_rollback_date[0] ) ) ? "selected" : ""; ?>
169
+        <option value="<?php echo $y; ?>" <?php echo $selected_y; ?>><?php echo $y; ?></option>
170
+    <?php endfor; ?>
171
+    </select> / 
172
+    <select name="rc_rb_month" id="">
173
+    <?php for( $i = 1; $i <= 12; $i++ ):
174
+        $m = sprintf( "%02d", $i );
175
+        $selected_m = ( $m == date_i18n( 'm', $arr_rollback_date[0] ) ) ? "selected" : "";
176
+    ?>
177
+        <option value="<?php echo $m; ?>" <?php echo $selected_m; ?>><?php echo $m; ?></option>
178
+    <?php endfor; ?>
179
+    </select> / 
180
+    <select name="rc_rb_day" id="">
181
+    <?php  for( $d = 1; $d<=31; $d++ ):
182
+        $d = sprintf( "%02d", $d );
183
+        $selected_d = ( $d == date_i18n( 'd', $arr_rollback_date[0] ) ) ? "selected" : "";
184
+    ?>
185
+        <option value="<?php echo $d; ?>" <?php echo $selected_d; ?>><?php echo $d; ?></option>
186
+    <?php endfor; ?>
187
+    </select>@
188
+    <select name="rc_rb_hour" id="">
189
+    <?php for( $h = 0; $h <= 23; $h++ ): 
190
+        $h = sprintf("%02d",$h);
191
+        $selected_h = ( $h == date_i18n( 'H', $arr_rollback_date[0] ) ) ? "selected" : "";
192
+    ?>
193
+        <option value="<?php echo $h; ?>" <?php echo $selected_h; ?>><?php echo $h; ?></option>
194
+    <?php endfor; ?>
195
+    </select>:
196
+    <select name="rc_rb_minutes" id="">
197
+    <?php for( $min = 0; $min <= 59; $min++ ): 
198
+        $min = sprintf( "%02d", $min );
199
+        $selected_min = ( $min == date_i18n( 'i', $arr_rollback_date[0] ) ) ? "selected" : "";
200
+        ?>
201
+        <option value="<?php echo $min; ?>" <?php echo $selected_min; ?>><?php echo $min; ?></option>
202
+    <?php endfor; ?>
203
+    </select>
204
+    <a href="#edit-rollback-datetime" class="rc-rollback-datetime-update button"><?php _e('OK',RC_TXT_DOMAIN) ?></a>
205
+    <a href="#edit-rollback-datetime" class="rc-rollback-datetime-cancel"><?php _e('Cancel',RC_TXT_DOMAIN) ?></a>
206
+    </div>
207
+    <?php foreach ( $arr_rb_date as $k => $v ):  ?>
208
+    <input type="hidden" name="<?php echo $k; ?>_cr" id="<?php echo $k; ?>_cr" value="<?php echo $v; ?>"/>
209
+    <?php endforeach; ?>
210
+    <div id="rc-accept-rollback-updatetime-wrap">
211
+        <label for="rc-accept-rollback-updatetime">
212
+            <input id="rc-accept-rollback-updatetime" type="checkbox" value="1" name="<?php echo $this->post_meta_keys->accept_rollback_update; ?>" <?php echo ( $this->post_metas->accept_rollback_update == "1" ) ? "checked" : ""; ?>> <?php _e( 'Accept Rollback post date.', RC_TXT_DOMAIN ); ?>
213
+        </label>
214
+    </div>
215
+    <?php if( current_theme_supports( 'post-thumbnails' ) ):  ?>
216
+    <div id="rc-accept-rollback-feature-image-wrap">
217
+        <label for="rc-accept-rollback-feature-image">
218
+            <input id="rc-accept-rollback-feature-image" type="checkbox" value="1" name="<?php echo $this->post_meta_keys->accept_rollback_feature_img; ?>" <?php echo ( $this->post_metas->accept_rollback_feature_img == "1" ) ? "checked" : ""; ?>> <?php _e( 'Accept Rollback feature image.', RC_TXT_DOMAIN ); ?>
219
+        </label>
220
+    </div>
221
+    <?php endif; ?>
222
+</fieldset>
156 223
 <?php 
157 224
  endif;
158 225
     }
... ...
@@ -183,6 +259,22 @@ class Class_Rucy_Editer {
183 183
         if( !isset( $_POST[$post_meta_keys->accept] ) || $_POST[$post_meta_keys->accept] != "1" ){
184 184
                 $_POST[$post_meta_keys->accept]  = "0";
185 185
         }
186
+        // rollback setting
187
+        $rdate = mktime( $_POST['rc_rb_hour'], $_POST['rc_rb_minutes'], 00, $_POST['rc_rb_month'], $_POST['rc_rb_day'], $_POST['rc_rb_year'] );
188
+        if ( $rdate ) {
189
+            $_POST[$post_meta_keys->rollback_date] = date_i18n( 'Y-m-d H:i:s', $rdate );
190
+        } else {
191
+            $_POST[$post_meta_keys->rollback_date] = "";
192
+        }
193
+        if( !isset( $_POST[$post_meta_keys->accept_rollback] ) || $_POST[$post_meta_keys->accept_rollback] != "1" ){
194
+            $_POST[$post_meta_keys->accept_rollback] = "0";
195
+        }
196
+        if( !isset( $_POST[$post_meta_keys->accept_rollback_update] ) || $_POST[$post_meta_keys->accept_rollback_update] != "1" ){
197
+            $_POST[$post_meta_keys->accept_rollback_update] = "0";
198
+        }
199
+        if( !isset( $_POST[$post_meta_keys->accept_rollback_feature_img] ) || $_POST[$post_meta_keys->accept_rollback_feature_img] != "1" ){
200
+            $_POST[$post_meta_keys->accept_rollback_feature_img] = "0";
201
+        }
186 202
         // save post meta 
187 203
         foreach ( $post_meta_keys as $key => $value ) {
188 204
             $component->save_rc_post_meta_base( $post_id, $value, $_POST );
... ...
@@ -218,6 +310,12 @@ class Class_Rucy_Editer {
218 218
         $add_message_date = date_i18n( 'Y/m/d @ H:i', strtotime( $post_metas->date ) );
219 219
         $base_str = __( 'registered reservation update content _RC_DATETIME_', RC_TXT_DOMAIN );
220 220
         $add_message = '<br>' . strtr( $base_str, array( '_RC_DATETIME_' => $add_message_date ) );
221
+        
222
+        if( $post_metas->accept_rollback == "1" ) {
223
+            $rollback_date = date_i18n( 'Y/m/d @ H:i', strtotime( $post_metas->rollback_date ) );
224
+            $rollback_base_str = __( 'registered rollback content _RC_ROLLBACK_DATETIME_ ', RC_TXT_DOMAIN );
225
+            $add_message .= '<br>' . strtr( $rollback_base_str , array( '_RC_ROLLBACK_DATETIME_' => $rollback_date ) );
226
+         }
221 227
         // published
222 228
         $messages[$post_type][1] .= $add_message;
223 229
         $messages[$post_type][4] .= $add_message;
... ...
@@ -45,7 +45,7 @@ jQuery(document).ready(function(){
45 45
         var day = jQuery('#rc_day_cr').val();
46 46
         var hour = jQuery('#rc_hour_cr').val();
47 47
         var min = jQuery('#rc_minutes_cr').val();
48
-        jQuery('.rc-datetime > b').html(year + "/" + month + "/" + day + " @ " + hour + ":" + min);
48
+        jQuery('.rc-datetime > strong').html(year + "/" + month + "/" + day + " @ " + hour + ":" + min);
49 49
         jQuery('select[name="rc_year"]').val(year);
50 50
         jQuery('select[name="rc_month"]').val(month);
51 51
         jQuery('select[name="rc_day"]').val(day);
... ...
@@ -109,6 +109,60 @@ jQuery(document).ready(function(){
109 109
         }
110 110
         
111 111
     });
112
-
112
+    // rollback settings
113
+    jQuery('.rc-rollback-datetime-edit').on('click',function(){
114
+        jQuery(this).hide();
115
+        jQuery('.rc-rollback-datetime-wrap').slideDown('normal');
116
+        return false;
117
+    });
118
+    // edit rollback date
119
+    jQuery('.rc-rollback-datetime-update').on('click', function(){
120
+        var rb_year = jQuery('select[name="rc_rb_year"]').val();
121
+        var rb_month = jQuery('select[name="rc_rb_month"]').val();
122
+        var rb_day = jQuery('select[name="rc_rb_day"]').val();
123
+        var rb_hour = jQuery('select[name="rc_rb_hour"]').val();
124
+        var rb_min = jQuery('select[name="rc_rb_minutes"]').val();
125
+        var rbDate = new Date(rb_year, rb_month - 1, rb_day, rb_hour, rb_min);
126
+        var rb_now = new Date();
127
+        var rb_flg = false;
128
+        if(rbDate.getFullYear() != rb_year || (1 + rbDate.getMonth()) != rb_month || rbDate.getDate() != rb_day || rbDate.getMinutes() != rb_min){
129
+            rb_flg = false;
130
+        } else if (rbDate.getTime() < rb_now.getTime()) {
131
+            rb_flg = false;
132
+        } else {
133
+            rb_flg = true;
134
+        }
135
+        if(rb_flg === true){
136
+            jQuery('.rc-rollback-datetime-wrap').removeClass('form-invalid');
137
+        } else {
138
+            jQuery('.rc-rollback-datetime-wrap').addClass('form-invalid');
139
+            return false;
140
+        }
141
+        jQuery('.rc-rollback-datetime > strong').html(rb_year + "/" + rb_month + "/" + rb_day + " @ " + rb_hour + ":" + rb_min);
142
+        jQuery('#rc_rb_year_cr').val(rb_year);
143
+        jQuery('#rc_rb_month_cr').val(rb_month);
144
+        jQuery('#rc_rb_day_cr').val(rb_day);
145
+        jQuery('#rc_rb_hour_cr').val(rb_hour);
146
+        jQuery('#rc_rb_minutes_cr').val(rb_min);
147
+        jQuery('.rc-rollback-datetime-wrap').slideUp('normal');
148
+        jQuery('.rc-rollback-datetime-edit').show();
149
+    });
150
+    // cancel rollback date
151
+    jQuery('.rc-rollback-datetime-cancel').on('click',function(){
152
+        var rb_year = jQuery('#rc_rb_year_cr').val();
153
+        var rb_month = jQuery('#rc_rb_month_cr').val();
154
+        var rb_day = jQuery('#rc_rb_day_cr').val();
155
+        var rb_hour = jQuery('#rc_rb_hour_cr').val();
156
+        var rb_min = jQuery('#rc_rb_minutes_cr').val();
157
+        jQuery('.rc-rollback-datetime > strong').html(rb_year + "/" + rb_month + "/" + rb_day + " @ " + rb_hour + ":" + rb_min);
158
+        jQuery('select[name="rc_rb_year"]').val(rb_year);
159
+        jQuery('select[name="rc_rb_month"]').val(rb_month);
160
+        jQuery('select[name="rc_rb_day"]').val(rb_day);
161
+        jQuery('select[name="rc_rb_hour"]').val(rb_hour);
162
+        jQuery('select[name="rc_rb_minutes"]').val(rb_min);
163
+        jQuery('.rc-rollback-datetime-wrap').slideUp('normal');
164
+        jQuery('.rc-rollback-datetime-edit').show();
165
+        return false;
166
+    });
113 167
 });
114 168