Changeset 1013039
- Timestamp:
- 10/23/2014 07:11:39 PM (11 years ago)
- Location:
- post-status-scheduler
- Files:
-
- 1 deleted
- 14 edited
- 10 copied
-
assets/screenshot-1.png (modified) (previous)
-
tags/1.0.0 (copied) (copied from post-status-scheduler/trunk)
-
tags/1.0.0/assets (deleted)
-
tags/1.0.0/classes/event.php (copied) (copied from post-status-scheduler/trunk/classes/event.php) (5 diffs)
-
tags/1.0.0/classes/scheduler.php (copied) (copied from post-status-scheduler/trunk/classes/scheduler.php) (19 diffs)
-
tags/1.0.0/classes/settings.php (copied) (copied from post-status-scheduler/trunk/classes/settings.php) (12 diffs)
-
tags/1.0.0/classes/shortcode.php (copied) (copied from post-status-scheduler/trunk/classes/shortcode.php)
-
tags/1.0.0/classes/taxonomy.php (copied) (copied from post-status-scheduler/trunk/classes/taxonomy.php)
-
tags/1.0.0/js/scheduler.js (modified) (3 diffs)
-
tags/1.0.0/languages/post-status-scheduler-sv_SE.mo (copied) (copied from post-status-scheduler/trunk/languages/post-status-scheduler-sv_SE.mo)
-
tags/1.0.0/languages/post-status-scheduler-sv_SE.pot (copied) (copied from post-status-scheduler/trunk/languages/post-status-scheduler-sv_SE.pot) (4 diffs)
-
tags/1.0.0/languages/post-status-scheduler.mo (modified) (previous)
-
tags/1.0.0/languages/post-status-scheduler.pot (modified) (2 diffs)
-
tags/1.0.0/post-status-scheduler.php (copied) (copied from post-status-scheduler/trunk/post-status-scheduler.php) (3 diffs)
-
tags/1.0.0/readme.txt (copied) (copied from post-status-scheduler/trunk/readme.txt) (4 diffs)
-
trunk/classes/event.php (modified) (5 diffs)
-
trunk/classes/scheduler.php (modified) (19 diffs)
-
trunk/classes/settings.php (modified) (12 diffs)
-
trunk/js/scheduler.js (modified) (3 diffs)
-
trunk/languages/post-status-scheduler-sv_SE.mo (modified) (previous)
-
trunk/languages/post-status-scheduler-sv_SE.pot (modified) (4 diffs)
-
trunk/languages/post-status-scheduler.mo (modified) (previous)
-
trunk/languages/post-status-scheduler.pot (modified) (2 diffs)
-
trunk/post-status-scheduler.php (modified) (3 diffs)
-
trunk/readme.txt (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
post-status-scheduler/tags/1.0.0/classes/event.php
r960367 r1013039 26 26 $this->id = $post_id; 27 27 28 // Load the event post 29 $this->post = get_post( $post_id ); 30 31 // Load the event date 28 32 $this->date = get_post_meta( $post_id, 'scheduler_date', true ); 29 33 … … 49 53 $this->meta_key = get_post_meta( $post_id, 'scheduler_meta_key', true ); 50 54 51 //$this->date = get_post_meta( $post->ID, 'post_status_scheduler_date', true ); 55 // Get email notify 56 $email_notify = get_post_meta( $post_id, 'scheduler_email_notify', true ); 57 $this->email_notify = !empty( $email_notify ) ? $email_notify : false; 52 58 53 59 } 54 60 55 61 62 /** 63 * save 64 * 65 * Save the scheduler postmeta 66 */ 56 67 public function save() { 57 68 … … 72 83 update_post_meta( $this->id, 'scheduler_check_meta', $this->check_meta ); 73 84 update_post_meta( $this->id, 'scheduler_meta_key', $this->meta_key ); 85 86 // Email notification 87 if( isset( $this->email_notify ) && $this->email_notify == true ) { 88 update_post_meta( $this->id, 'scheduler_email_notify', true ); 89 } else { 90 update_post_meta( $this->id, 'scheduler_email_notify', false ); 91 } 74 92 75 93 } … … 107 125 delete_post_meta( $post_id, 'scheduler_meta_key' ); 108 126 127 // Email notification 128 delete_post_meta( $post_id, 'scheduler_email_notify' ); 129 109 130 } 110 131 111 132 133 /** 134 * __get 135 * 136 * Automagical get function for object 137 * Returns the requested property if exists 138 * 139 * @param string $key 140 * 141 * @return $value|null 142 */ 112 143 public function __get( $key ) { 113 144 return isset( $this->data[$key] ) ? $this->data[$key] : null; … … 115 146 116 147 148 /** 149 * __set 150 * 151 * Automagical set function for object 152 * Sets the property to the given value 153 * 154 * @param $key The property to set 155 * @param $value The value to set the property with 156 */ 117 157 public function __set( $key, $value ) { 118 158 $this->data[$key] = $value; 119 159 } 160 161 162 /** 163 * __isset 164 * 165 * Automagical isset function for object 166 * 167 * @param string $value 168 * 169 * @return boolean 170 */ 171 public function __isset( $value ) { 172 return isset( $this->data[$value] ); 173 } 120 174 121 175 -
post-status-scheduler/tags/1.0.0/classes/scheduler.php
r960367 r1013039 17 17 require_once( 'event.php' ); 18 18 require_once( 'taxonomy.php' ); 19 require_once( 'email.php' ); 19 20 20 21 use \post_status_scheduler\Event as Event; 21 22 use \post_status_scheduler\Taxonomy as Taxonomy; 23 use \post_status_scheduler\Settings as Settings; 24 use \post_status_scheduler\Email as Email; 22 25 26 if( !defined( 'POST_STATUS_SCHEDULER_TEXTDOMAIN' ) ) define( 'POST_STATUS_SCHEDULER_TEXTDOMAIN', 'post_status_scheduler' ); 27 23 28 class Scheduler { 24 29 … … 45 50 if( is_admin() ) { 46 51 47 $this->options = get_option( 'post_status_scheduler');52 $this->options = Settings::get_options(); 48 53 49 54 if( !is_array( $this->options ) ) { … … 61 66 62 67 // Get saved options 63 $scheduler_options = get_option( 'post_status_scheduler' );68 $scheduler_options = $this->options; 64 69 $scheduler_options = isset( $scheduler_options['allowed_posttypes'] ) ? $scheduler_options['allowed_posttypes'] : null; 65 70 … … 67 72 if( isset( $pagenow ) && $pagenow == 'edit.php' ) { 68 73 69 // Set the post type to post if it is not in address field 70 if( !isset( $_GET['post_type'] ) ) { 74 if( isset( $this->options['extra_column_enabled'] ) && $this->options['extra_column_enabled'] == true ) { 71 75 72 $post_type = 'post'; 73 74 } else { 75 76 $post_type = $_GET['post_type']; 77 78 } 79 80 // Is this post type set to have unpublishing options? 81 if( isset( $post_type ) && is_array( $scheduler_options ) && in_array( $post_type, $scheduler_options ) ) { 82 83 foreach( $scheduler_options as $type ) { 76 // Set the post type to post if it is not in address field 77 if( !isset( $_GET['post_type'] ) ) { 84 78 85 // Add new columns 86 add_filter( 'manage_'.$type.'_posts_columns', array( $this, 'add_column' ) ); 87 // Set column content 88 add_action( 'manage_'.$type.'_posts_custom_column', array( $this, 'custom_column' ), 10, 2); 89 // Register column as sortable 90 add_filter( "manage_edit-".$type."_sortable_columns", array( $this, 'register_sortable' ) ); 79 $post_type = 'post'; 80 81 } else { 82 83 $post_type = $_GET['post_type']; 91 84 92 85 } 93 94 // The request to use as orderby 95 add_filter( 'request', array( $this, 'orderby' ) ); 86 87 // Is this post type set to have unpublishing options? 88 if( isset( $post_type ) && is_array( $scheduler_options ) && in_array( $post_type, $scheduler_options ) ) { 89 90 foreach( $scheduler_options as $type ) { 91 92 // Add new columns 93 add_filter( 'manage_'.$type.'_posts_columns', array( $this, 'add_column' ) ); 94 // Set column content 95 add_action( 'manage_'.$type.'_posts_custom_column', array( $this, 'custom_column' ), 10, 2); 96 // Register column as sortable 97 add_filter( "manage_edit-".$type."_sortable_columns", array( $this, 'register_sortable' ) ); 98 99 } 100 101 // The request to use as orderby 102 add_filter( 'request', array( $this, 'orderby' ) ); 103 104 } 96 105 97 106 } … … 173 182 $event->meta_key = isset( $postdata['scheduler']['meta_key'] ) ? $postdata['scheduler']['meta_key'] : null; 174 183 184 $event->email_notify = isset( $postdata['scheduler']['email-notify'] ) ? true : false; 185 175 186 // Check if there is an old timestamp to clear away 176 187 //$old_timestamp = get_post_meta( $post->ID, 'post_status_scheduler_date', true ); … … 253 264 $scheduler_status = $filter_result['status']; 254 265 $valid_statuses = $filter_result['valid_statuses']; 266 267 $executed_events = array(); 255 268 256 269 if( $event->check_status ) { … … 275 288 } 276 289 290 // Add the executed event 291 $executed_events []= 'check_status'; 292 277 293 } 278 294 … … 284 300 if( !empty( $event->meta_key ) ) { 285 301 delete_post_meta( $post_id, $event->meta_key ); 302 303 // Add the executed event 304 $executed_events []= 'check_meta'; 286 305 } 287 306 … … 311 330 // Update the categories 312 331 Taxonomy::set_terms( $post_id, array( $scheduler_category_to_add ), $scheduler_category_taxonomy, true ); 332 333 // Add the executed event 334 $executed_events []= 'check_category'; 313 335 314 336 } … … 356 378 Taxonomy::set_terms( $post_id, $new_categories, $scheduler_category_taxonomy ); 357 379 380 // Add the executed event 381 $executed_events []= 'check_category'; 382 358 383 } 359 384 … … 373 398 // Remove post meta 374 399 Event::delete( $post_id ); 400 401 $options = Settings::get_options(); 402 403 // Checkto see if we should send an email notification 404 //if( isset( $options['notification_email_enabled'] ) && $options['notification_email_enabled'] == true ) { 405 406 // Is the email notification checked on this event 407 if( isset( $event->email_notify ) && $event->email_notify == true ) { 408 409 if( is_object( $event->post ) ) { 410 411 Email::update_notification( $event->post ); 412 413 } 414 415 } 416 417 //} 375 418 376 419 apply_filters( 'post_status_scheduler_after_execution', array( 'status' => $scheduler_status, 'valid_statuses' => $valid_statuses ), $post_id ); … … 422 465 // Get valid post types set in module settings page 423 466 $allowed_posttypes = isset( $this->options['allowed_posttypes'] ) ? $this->options['allowed_posttypes'] : array(); 467 // Check if there are any meta keys to be shown 424 468 $meta_keys = isset( $this->options['meta_keys'] ) ? $this->options['meta_keys'] : array(); 469 // Check if email notification is set 470 $use_notification = isset( $this->options['email_notification'] ) ? true : false; 471 425 472 $categories = Taxonomy::get_posttype_terms( $post_type ); 426 473 … … 458 505 echo '<div class="misc-pub-section misc-pub-section-last" id="scheduler-wrapper"> 459 506 <span id="timestamp" class="calendar-link before">' 460 . '<label> ' . __( 'Schedule Status Change', 'post-status-scheduler') . '</label> <input type="checkbox" id="scheduler-use" name="scheduler[use]" ' . $checked . ' /><br />'507 . '<label> ' . __( 'Schedule Status Change', POST_STATUS_SCHEDULER_TEXTDOMAIN ) . '</label> <input type="checkbox" id="scheduler-use" name="scheduler[use]" ' . $checked . ' /><br />' 461 508 . '<div id="scheduler-settings" ' . $show . ' >' 462 . '<label>' . __( 'Date', 'post-status-scheduler') . '</label> '509 . '<label>' . __( 'Date', POST_STATUS_SCHEDULER_TEXTDOMAIN ) . '</label> ' 463 510 . '<input type="text" id="schedulerdate" name="scheduler[date]" value="' .$date. '" maxlengt="10" readonly="true" /> ' 464 . '<label>' . __( 'Time', 'post-status-scheduler') . '</label> '511 . '<label>' . __( 'Time', POST_STATUS_SCHEDULER_TEXTDOMAIN ) . '</label> ' 465 512 . '<input type="text" id="schedulertime" name="scheduler[time]" value="' . $time . '" maxlength="5" readonly="true" /><br /><br />' 466 513 … … 468 515 . '<input type="checkbox" name="scheduler[post-status-check]" id="scheduler-status" ' . $scheduler_check_status_checked . ' /> ' . __( 'Change status', 'post-status-scheduler' ) . '<br />' 469 516 . '<div id="scheduler-status-box" ' . $scheduler_check_status_show . ' >' 470 . '<label>' . __( 'Set status to', 'post-status-scheduler') . '</label> '517 . '<label>' . __( 'Set status to', POST_STATUS_SCHEDULER_TEXTDOMAIN ) . '</label> ' 471 518 . '<select name="scheduler[status]" style="width: 98%;">'; 472 519 … … 485 532 echo '<input type="checkbox" name="scheduler[category-check]" id="scheduler-category" ' . $scheduler_check_category_checked . ' /> ' . __( 'Change categories', 'post-status-scheduler' ) . '<br />' 486 533 .'<div id="scheduler-category-box" ' . $scheduler_check_category_show . '>'; 487 echo __( 'The post will have the following categories on scheduled time', 'post-status-scheduler');534 echo __( 'The post will have the following categories on scheduled time', POST_STATUS_SCHEDULER_TEXTDOMAIN ); 488 535 echo '<select name="scheduler[category][]" multiple size="5">'; 489 536 … … 535 582 // Meta keys 536 583 if( count( $meta_keys ) > 0 ) { 537 echo '<input type="checkbox" name="scheduler[postmeta-check]" id="scheduler-postmeta" ' . $scheduler_check_meta_checked . ' /> ' . __( 'Remove postmeta', 'post-status-scheduler') . '<br />'584 echo '<input type="checkbox" name="scheduler[postmeta-check]" id="scheduler-postmeta" ' . $scheduler_check_meta_checked . ' /> ' . __( 'Remove postmeta', POST_STATUS_SCHEDULER_TEXTDOMAIN ) . '<br />' 538 585 .'<div id="scheduler-postmeta-box" ' . $scheduler_check_meta_show . ' >' 539 586 . '<select name="scheduler[meta_key]">'; … … 551 598 } 552 599 600 // Email notification option 601 if( isset( $this->options['notification_email_enabled'] ) && $this->options['notification_email_enabled'] == true ) { 602 603 echo '<hr />'; 604 605 if( isset( $event->email_notify ) && $event->email_notify == true ) { 606 $email_notify_checked = ' checked="checked" '; 607 } else { 608 $email_notify_checked = ''; 609 } 610 611 // The checkbox for sending a notification email to author 612 echo '<input type="checkbox" id="scheduler-email-notification" name="scheduler[email-notify]" disabled="" ' . $email_notify_checked . '/> ' . __( 'Send email notification on change', POST_STATUS_SCHEDULER_TEXTDOMAIN ); 613 echo '<p class="description">(' . get_the_author_meta( 'user_email', $post->post_author ) . ')</p>'; 614 } 553 615 echo '</div>' 554 616 .'</span></div>'; … … 573 635 if( $key == 'date' ) { 574 636 575 $new_columns['scheduler_date'] = __( 'Scheduled date', 'post-status-scheduler');637 $new_columns['scheduler_date'] = __( 'Scheduled date', POST_STATUS_SCHEDULER_TEXTDOMAIN ); 576 638 577 639 } … … 779 841 // All valid post statuses to choose from 780 842 return array( 781 'draft' => __( 'Draft', 'post-status-scheduler'),782 'pending' => __( 'Pending', 'post-status-scheduler'),783 'private' => __( 'Private', 'post-status-scheduler'),784 'trash' => __( 'Trashbin', 'post-status-scheduler'),785 'deleted' => __( 'Delete (forced)', 'post-status-scheduler'),843 'draft' => __( 'Draft', POST_STATUS_SCHEDULER_TEXTDOMAIN ), 844 'pending' => __( 'Pending', POST_STATUS_SCHEDULER_TEXTDOMAIN ), 845 'private' => __( 'Private', POST_STATUS_SCHEDULER_TEXTDOMAIN ), 846 'trash' => __( 'Trashbin', POST_STATUS_SCHEDULER_TEXTDOMAIN ), 847 'deleted' => __( 'Delete (forced)', POST_STATUS_SCHEDULER_TEXTDOMAIN ), 786 848 ); 787 849 -
post-status-scheduler/tags/1.0.0/classes/settings.php
r960367 r1013039 89 89 add_settings_section( 90 90 'posttypes', // ID 91 __( 'Post Types ', 'post-status-scheduler' ), // Title91 __( 'Post Types and meta keys', 'post-status-scheduler' ), // Title 92 92 array( $this, 'print_section_info' ), // Callback 93 93 'post-status-scheduler' // Page … … 97 97 'allowed_posttypes', // ID 98 98 __( 'Check the post types you wish to display the Scheduler on', 'post-status-scheduler' ), // Title 99 array( $this, ' id_number_callback' ), // Callback99 array( $this, 'allowed_posttypes_callback' ), // Callback 100 100 'post-status-scheduler', // Page 101 101 'posttypes' // Section … … 113 113 /* SECTION NOTIFICATION EMAIL */ 114 114 115 /* Planned for release 0.4.0 */ 116 117 /*add_settings_section( 115 add_settings_section( 118 116 'notifications', // ID 119 117 __( 'Notification', 'post-status-scheduler' ), // Title … … 124 122 add_settings_field( 125 123 'notification_email_enabled', // ID 126 __( 'Enable email notification option on scheduled changes', 'post-status-scheduler' ), // Title124 __( 'Enable email notification option', 'post-status-scheduler' ), // Title 127 125 array( $this, 'notification_email_enabled_callback' ), // Callback 128 126 'post-status-scheduler', // Page … … 130 128 ); 131 129 130 131 /* SECTION EXTRA COLUMN ON EDIT PAGE */ 132 133 add_settings_section( 134 'column', // ID 135 __( 'Extra column', 'post-status-scheduler' ), // Title 136 array( $this, 'print_column_section_info' ), // Callback 137 'post-status-scheduler' // Page 138 ); 139 132 140 add_settings_field( 133 ' notification_email_subject', // ID134 __( 'E mail subject', 'post-status-scheduler' ), // Title135 array( $this, ' notification_email_subject_callback' ), // Callback141 'extra_column_enabled', // ID 142 __( 'Enable extra column on posttype edit page', 'post-status-scheduler' ), // Title 143 array( $this, 'extra_column_enabled_callback' ), // Callback 136 144 'post-status-scheduler', // Page 137 'notifications' // Section 138 ); 139 140 add_settings_field( 141 'notification_email_body', // ID 142 __( 'Email body', 'post-status-scheduler' ), // Title 143 array( $this, 'notification_email_body_callback' ), // Callback 144 'post-status-scheduler', // Page 145 'notifications' // Section 146 );*/ 147 145 'column' // Section 146 ); 148 147 149 148 } … … 186 185 } 187 186 188 /*if( isset( $input['notification_email_enabled'] ) ) {187 if( isset( $input['notification_email_enabled'] ) ) { 189 188 190 189 $new_input['notification_email_enabled'] = true; … … 196 195 } 197 196 198 if( isset( $input['notification_email_subject'] ) ) { 199 200 $new_input['notification_email_subject'] = esc_attr( $input['notification_email_subject'] ); 201 202 } 203 204 if( isset( $input['notification_email_body'] ) ) { 205 206 $new_input['notification_email_body'] = esc_attr( $input['notification_email_body'] ); 207 208 }*/ 197 if( isset( $input['extra_column_enabled'] ) ) { 198 199 $new_input['extra_column_enabled'] = true; 200 201 } else { 202 203 $new_input['extra_column_enabled'] = false; 204 205 } 209 206 210 207 return $new_input; 211 208 212 209 } 210 213 211 214 212 /** … … 221 219 } 222 220 221 223 222 /** 224 223 * Print the Section text … … 226 225 public function print_notification_section_info() { 227 226 228 print __( 'Edit the email settings used by the notification email on a scheduled change:', 'post-status-scheduler' ); 227 print __( 'Enabling this option makes it possible to send an email notification to the post author on a scheduled change execution.', 'post-status-scheduler' ); 228 229 } 230 231 232 /** 233 * Print the Section text 234 */ 235 public function print_column_section_info() { 236 237 print __( 'Settings for adding extra column "Scheduled date" on edit page. This column will only be displayed on posttypes that are allowed for scheduling', 'post-status-scheduler' ); 229 238 230 239 } … … 236 245 * Callback for the posttypes allowed 237 246 */ 238 public function id_number_callback() {247 public function allowed_posttypes_callback() { 239 248 240 249 // Get all valid public post types … … 317 326 public function notification_email_enabled_callback() { 318 327 319 $options = get_option( 'post_status_scheduler');328 $options = self::get_options(); 320 329 $enabled = !empty( $options['notification_email_enabled'] ) ? $options['notification_email_enabled'] : ''; 321 330 ?> … … 327 336 328 337 329 330 /** 331 * notification_email_subject_callback 338 /** 339 * notification_email_enabled_callback 332 340 * 333 * Callback for the subject of the notification email 334 */ 335 public function notification_email_subject_callback() { 336 337 $options = get_option( 'post_status_scheduler' ); 338 $subject = !empty( $options['notification_email_subject'] ) ? $options['notification_email_subject'] : ''; 339 printf( '<input type="text" name="post_status_scheduler[notification_email_subject]" value="%s" />', $subject ); 340 341 } 342 343 344 /** 345 * notification_email_body_callback 346 * 347 * Callback for the body of the notification email 348 */ 349 public function notification_email_body_callback() { 350 351 $options = get_option( 'post_status_scheduler' ); 352 $body = !empty( $options['notification_email_body'] ) ? $options['notification_email_body'] : ''; 353 354 printf( '<textarea name="post_status_scheduler[notification_email_body]">%s</textarea>', $body ); 355 356 } 357 341 * Callback for the enabling of notification option 342 */ 343 public function extra_column_enabled_callback() { 344 345 $options = self::get_options(); 346 $enabled = !empty( $options['extra_column_enabled'] ) ? $options['extra_column_enabled'] : ''; 347 ?> 348 349 <input type="checkbox" name="post_status_scheduler[extra_column_enabled]" <?php checked( $enabled, true ); ?> /> 350 351 <?php 352 } 353 354 355 public static function get_options() { 356 357 return get_option('post_status_scheduler'); 358 359 } 358 360 359 361 } 360 362 361 362 363 ?> -
post-status-scheduler/tags/1.0.0/js/scheduler.js
r933176 r1013039 33 33 34 34 } 35 36 toggle_email_notification(); 35 37 }); 36 38 … … 45 47 46 48 } 49 50 toggle_email_notification(); 47 51 }); 48 52 … … 57 61 58 62 } 63 64 toggle_email_notification(); 59 65 }); 60 66 67 toggle_email_notification(); 68 69 function toggle_email_notification() { 70 71 if( $('#scheduler-status').is(':checked') || $('#scheduler-category').is(':checked') || $('#scheduler-postmeta').is(':checked') ) { 72 73 $('#scheduler-email-notification').removeAttr('disabled'); 74 75 } else { 76 77 $('#scheduler-email-notification').attr('disabled', 'disabled'); 78 $('#scheduler-email-notification').removeAttr('checked', 'checked'); 79 80 } 81 82 } 83 61 84 }); -
post-status-scheduler/tags/1.0.0/languages/post-status-scheduler-sv_SE.pot
r960367 r1013039 2 2 msgstr "" 3 3 "Project-Id-Version: post-status-scheduler\n" 4 "POT-Creation-Date: 2014- 08-05 09:46+0100\n"5 "PO-Revision-Date: 2014- 08-05 09:49+0100\n"4 "POT-Creation-Date: 2014-10-23 15:58+0100\n" 5 "PO-Revision-Date: 2014-10-23 16:00+0100\n" 6 6 "Last-Translator: Andeas Färnstrand <[email protected]>\n" 7 7 "Language-Team: <[email protected]>\n" … … 15 15 "X-Poedit-SearchPath-0: .\n" 16 16 17 #: classes/scheduler.php:460 17 #: classes/email.php:25 18 msgid "Post Status Scheduler update" 19 msgstr "Uppdatering Post Status Scheduler" 20 21 #: classes/email.php:33 22 msgid "A scheduled update has been executed at" 23 msgstr "En schemalagd ändring har blivit exekverad" 24 25 #: classes/email.php:33 26 msgid "on your post" 27 msgstr "på din post" 28 29 #: classes/email.php:34 30 msgid "Regards" 31 msgstr "Hälsningar" 32 33 #: classes/scheduler.php:503 18 34 msgid "Schedule Status Change" 19 35 msgstr "Schemalägg statusändring" 20 36 21 #: classes/scheduler.php: 46237 #: classes/scheduler.php:505 22 38 msgid "Date" 23 39 msgstr "Datum" 24 40 25 #: classes/scheduler.php: 46441 #: classes/scheduler.php:507 26 42 msgid "Time" 27 43 msgstr "Tid" 28 44 29 #: classes/scheduler.php: 46845 #: classes/scheduler.php:511 30 46 msgid "Change status" 31 47 msgstr "Ändra status" 32 48 33 #: classes/scheduler.php: 47049 #: classes/scheduler.php:513 34 50 msgid "Set status to" 35 51 msgstr "Ändra status till" 36 52 37 #: classes/scheduler.php: 48553 #: classes/scheduler.php:528 38 54 msgid "Change categories" 39 55 msgstr "Ändra kategorier" 40 56 41 #: classes/scheduler.php: 48757 #: classes/scheduler.php:530 42 58 msgid "The post will have the following categories on scheduled time" 43 59 msgstr "Följande kategorier kommer att sättas vid schemalagd tid" 44 60 45 #: classes/scheduler.php:5 3761 #: classes/scheduler.php:580 46 62 msgid "Remove postmeta" 47 63 msgstr "Ta bort postmeta" 48 64 49 #: classes/scheduler.php:575 65 #: classes/scheduler.php:608 66 msgid "Send email notification on change" 67 msgstr "Skicka epostnotifiering vid ändring" 68 69 #: classes/scheduler.php:633 50 70 msgid "Scheduled date" 51 71 msgstr "Schemalagt datum" 52 72 53 #: classes/scheduler.php: 78173 #: classes/scheduler.php:839 54 74 msgid "Draft" 55 75 msgstr "Utkast" 56 76 57 #: classes/scheduler.php: 78277 #: classes/scheduler.php:840 58 78 msgid "Pending" 59 79 msgstr "Väntar på granskning" 60 80 61 #: classes/scheduler.php: 78381 #: classes/scheduler.php:841 62 82 msgid "Private" 63 83 msgstr "Privat" 64 84 65 #: classes/scheduler.php: 78485 #: classes/scheduler.php:842 66 86 msgid "Trashbin" 67 87 msgstr "Papperskorg" 68 88 69 #: classes/scheduler.php: 78589 #: classes/scheduler.php:843 70 90 msgid "Delete (forced)" 71 91 msgstr "Radera (tvingad)" … … 76 96 77 97 #: classes/settings.php:91 78 msgid "Post Types "79 msgstr "Posttyper "98 msgid "Post Types and meta keys" 99 msgstr "Posttyper och metakeys" 80 100 81 101 #: classes/settings.php:98 … … 87 107 msgstr "Märk de metafält som skall vara valbara för borttagning" 88 108 89 #: classes/settings.php:11 7109 #: classes/settings.php:119 90 110 msgid "Notification" 91 111 msgstr "Notifikation" 92 112 93 #: classes/settings.php:12 494 msgid "Enable email notification option on scheduled changes"95 msgstr "Aktivera epostnotifi kation vid schemalagda ändringar"113 #: classes/settings.php:126 114 msgid "Enable email notification option" 115 msgstr "Aktivera epostnotifiering" 96 116 97 #: classes/settings.php:132 98 msgid "Email subject" 99 msgstr "Epostämne" 100 101 #: classes/settings.php:140 102 msgid "Email body" 103 msgstr "Epostmeddelande" 104 105 #: classes/settings.php:217 117 #: classes/settings.php:190 106 118 msgid "Enter your settings below:" 107 119 msgstr "Ange inställningar nedan:" 108 120 109 #: classes/settings.php:226 110 msgid "" 111 "Edit the email settings used by the notification email on a scheduled change:" 112 msgstr "Ändra epostinställningarna som används vid notifikationsepost" 121 #: classes/settings.php:199 122 msgid "Email notification settings:" 123 msgstr "Inställningar för epostnotifiering" 124 125 #~ msgid "Post Types" 126 #~ msgstr "Posttyper" 127 128 #~ msgid "Email subject" 129 #~ msgstr "Epostämne" 130 131 #~ msgid "Email body" 132 #~ msgstr "Epostmeddelande" 133 134 #~ msgid "" 135 #~ "Edit the email settings used by the notification email on a scheduled " 136 #~ "change:" 137 #~ msgstr "Ändra epostinställningarna som används vid notifikationsepost" 113 138 114 139 #~ msgid "Add or remove category" -
post-status-scheduler/tags/1.0.0/languages/post-status-scheduler.pot
r933176 r1013039 2 2 msgstr "" 3 3 "Project-Id-Version: post-status-scheduler\n" 4 "POT-Creation-Date: 2014- 06-11 17:53+0100\n"5 "PO-Revision-Date: 2014- 06-11 18:01+0100\n"4 "POT-Creation-Date: 2014-10-23 15:50+0100\n" 5 "PO-Revision-Date: 2014-10-23 15:51+0100\n" 6 6 "Last-Translator: Andeas Färnstrand <[email protected]>\n" 7 7 "Language-Team: <[email protected]>\n" … … 15 15 "X-Poedit-SearchPath-0: .\n" 16 16 17 #: classes/scheduler.php:37 17 #: classes/scheduler.php:503 18 msgid "Schedule Status Change" 19 msgstr "" 20 21 #: classes/scheduler.php:505 22 msgid "Date" 23 msgstr "" 24 25 #: classes/scheduler.php:507 26 msgid "Time" 27 msgstr "" 28 29 #: classes/scheduler.php:511 30 msgid "Change status" 31 msgstr "" 32 33 #: classes/scheduler.php:513 34 msgid "Set status to" 35 msgstr "" 36 37 #: classes/scheduler.php:528 38 msgid "Change categories" 39 msgstr "" 40 41 #: classes/scheduler.php:530 42 msgid "The post will have the following categories on scheduled time" 43 msgstr "" 44 45 #: classes/scheduler.php:580 46 msgid "Remove postmeta" 47 msgstr "" 48 49 #: classes/scheduler.php:608 50 msgid "Send email notification on change" 51 msgstr "" 52 53 #: classes/scheduler.php:633 54 msgid "Scheduled date" 55 msgstr "" 56 57 #: classes/scheduler.php:839 18 58 msgid "Draft" 19 59 msgstr "" 20 60 21 #: classes/scheduler.php: 3861 #: classes/scheduler.php:840 22 62 msgid "Pending" 23 63 msgstr "" 24 64 25 #: classes/scheduler.php: 3965 #: classes/scheduler.php:841 26 66 msgid "Private" 27 67 msgstr "" 28 68 29 #: classes/scheduler.php: 4069 #: classes/scheduler.php:842 30 70 msgid "Trashbin" 31 71 msgstr "" 32 72 33 #: classes/scheduler.php: 4173 #: classes/scheduler.php:843 34 74 msgid "Delete (forced)" 35 75 msgstr "" 36 76 37 #: classes/scheduler.php:468 38 msgid "Schedule Status Change" 39 msgstr "" 40 41 #: classes/scheduler.php:470 42 msgid "Date" 43 msgstr "" 44 45 #: classes/scheduler.php:472 46 msgid "Time" 47 msgstr "" 48 49 #: classes/scheduler.php:476 50 msgid "Change status" 51 msgstr "" 52 53 #: classes/scheduler.php:478 54 msgid "Set status to" 55 msgstr "" 56 57 #: classes/scheduler.php:493 58 msgid "Add or remove category" 59 msgstr "" 60 61 #: classes/scheduler.php:495 62 msgid "Add" 63 msgstr "" 64 65 #: classes/scheduler.php:496 66 msgid "Remove" 67 msgstr "" 68 69 #: classes/scheduler.php:513 70 msgid "Remove postmeta" 71 msgstr "" 72 73 #: classes/scheduler.php:550 74 msgid "Scheduled date" 75 msgstr "" 76 77 #: classes/settings.php:43 classes/settings.php:61 77 #: classes/settings.php:44 classes/settings.php:62 78 78 msgid "Post Status Scheduler" 79 79 msgstr "" 80 80 81 #: classes/settings.php: 8882 msgid "Post Types "81 #: classes/settings.php:91 82 msgid "Post Types and meta keys" 83 83 msgstr "" 84 84 85 #: classes/settings.php:9 585 #: classes/settings.php:98 86 86 msgid "Check the post types you wish to display the Scheduler on" 87 87 msgstr "" 88 88 89 #: classes/settings.php:10 389 #: classes/settings.php:106 90 90 msgid "Mark allowed meta fields to be shown as removable" 91 91 msgstr "" 92 92 93 #: classes/settings.php:157 93 #: classes/settings.php:119 94 msgid "Notification" 95 msgstr "" 96 97 #: classes/settings.php:126 98 msgid "Enable email notification option" 99 msgstr "" 100 101 #: classes/settings.php:190 94 102 msgid "Enter your settings below:" 95 103 msgstr "" 104 105 #: classes/settings.php:199 106 msgid "Email notification settings:" 107 msgstr "" -
post-status-scheduler/tags/1.0.0/post-status-scheduler.php
r960369 r1013039 5 5 Plugin Name: Post Status Scheduler 6 6 Description: Change status, category or postmeta of any post type at a scheduled timestamp. 7 Version: 0.3.07 Version: 1.0.0 8 8 Author: Andreas Färnstrand <[email protected]> 9 9 Author URI: http://www.farnstranddev.se … … 28 28 */ 29 29 30 // Exit if accessed directly 31 if ( !defined( 'ABSPATH' ) ) exit; 32 30 33 use post_status_scheduler as post_status_scheduler; 31 34 … … 36 39 require_once 'classes/shortcode.php'; 37 40 38 define( 'POST_STATUS_SCHEDULER_PLUGIN_PATH', plugin_dir_url( __FILE__ ) );39 define( 'POST_STATUS_SCHEDULER_TEXTDOMAIN', 'post_status_scheduler' );40 define( 'POST_STATUS_SCHEDULER_TEXTDOMAIN_PATH', dirname( plugin_basename( __FILE__) ) .'/languages' );41 define( 'POST_STATUS_SCHEDULER_VERSION', '0.3.0' );41 if( !defined( 'POST_STATUS_SCHEDULER_PLUGIN_PATH' ) ) define( 'POST_STATUS_SCHEDULER_PLUGIN_PATH', plugin_dir_url( __FILE__ ) ); 42 if( !defined( 'POST_STATUS_SCHEDULER_TEXTDOMAIN' ) ) define( 'POST_STATUS_SCHEDULER_TEXTDOMAIN', 'post_status_scheduler' ); 43 if( !defined( 'POST_STATUS_SCHEDULER_TEXTDOMAIN_PATH' ) ) define( 'POST_STATUS_SCHEDULER_TEXTDOMAIN_PATH', dirname( plugin_basename( __FILE__) ) .'/languages' ); 44 if( !defined( 'POST_STATUS_SCHEDULER_VERSION' ) ) define( 'POST_STATUS_SCHEDULER_VERSION', '1.0.0' ); 42 45 46 // Create a new scheduler instance 43 47 $pss = new \post_status_scheduler\Scheduler(); 44 48 49 // Create a new settings instance 45 50 if( is_admin() ) { 46 51 $settings = new \post_status_scheduler\Settings(); 47 52 } 48 53 54 // Create shortcodes 49 55 $pss_shortcodes = new \post_status_scheduler\Shortcode(); 50 56 -
post-status-scheduler/tags/1.0.0/readme.txt
r984682 r1013039 4 4 Requires at least: 3.9 5 5 Tested up to: 4.0 6 Stable tag: 0.3.06 Stable tag: 1.0.0 7 7 License: GPLv2 or later 8 8 License URI: http://www.gnu.org/licenses/gpl-2.0.html … … 14 14 Post Status Scheduler allows for scheduling of post status changes, category adding or removing and 15 15 removing of postmeta on any given date or time. It can be activated on any post type and shows 16 up on the post edit screen in the publish section. 16 up on the post edit screen in the publish section. From version 1.0.0 it has a feature for sending 17 an email notification to the post author on the scheduled update. 17 18 18 19 = Shortcodes = 19 20 20 21 * [pss_scheduled_time post_id="<your post id>"] can be used to get the post's scheduled date and time. 22 23 = Filters = 24 Scheduled Update: 25 * post_status_scheduler_before_execution 26 * post_status_scheduler_after_execution 27 28 Email Notification ( version 1.0.0 ): 29 * post_status_scheduler_email_notification_recipient_email 30 * post_status_scheduler_email_notification_subject 31 * post_status_scheduler_email_notification_date 32 * post_status_scheduler_email_notification_body 21 33 22 34 == Installation == … … 32 44 3. Edit page without post meta option activated. 33 45 4. Edit page with post meta option activated. 46 5. Edit page with email notification option. 34 47 35 48 = What Translations are included? = … … 39 52 == Changelog == 40 53 54 = 1.0.0 = 55 * New feature for sending email notification to post author when executing a scheduled update. 56 * New feature makes it possible to show/remove the "Scheduled date" column on posttype edit page. 57 * Code cleanup. 58 41 59 = 0.3.0 = 42 * Rewritten to support setting multiple categories on scheduled time. I have tried to make sure that it will still work with previously scheduled changes in previous versions of the plugin.43 * A little bit of code clean up .60 * Rewritten plugin to support setting multiple categories on scheduled time. I have tried to make sure that it will still work with previously scheduled changes in previous versions of the plugin. 61 * A little bit of code clean up and refactoring. 44 62 45 63 = 0.2.1 = -
post-status-scheduler/trunk/classes/event.php
r960367 r1013039 26 26 $this->id = $post_id; 27 27 28 // Load the event post 29 $this->post = get_post( $post_id ); 30 31 // Load the event date 28 32 $this->date = get_post_meta( $post_id, 'scheduler_date', true ); 29 33 … … 49 53 $this->meta_key = get_post_meta( $post_id, 'scheduler_meta_key', true ); 50 54 51 //$this->date = get_post_meta( $post->ID, 'post_status_scheduler_date', true ); 55 // Get email notify 56 $email_notify = get_post_meta( $post_id, 'scheduler_email_notify', true ); 57 $this->email_notify = !empty( $email_notify ) ? $email_notify : false; 52 58 53 59 } 54 60 55 61 62 /** 63 * save 64 * 65 * Save the scheduler postmeta 66 */ 56 67 public function save() { 57 68 … … 72 83 update_post_meta( $this->id, 'scheduler_check_meta', $this->check_meta ); 73 84 update_post_meta( $this->id, 'scheduler_meta_key', $this->meta_key ); 85 86 // Email notification 87 if( isset( $this->email_notify ) && $this->email_notify == true ) { 88 update_post_meta( $this->id, 'scheduler_email_notify', true ); 89 } else { 90 update_post_meta( $this->id, 'scheduler_email_notify', false ); 91 } 74 92 75 93 } … … 107 125 delete_post_meta( $post_id, 'scheduler_meta_key' ); 108 126 127 // Email notification 128 delete_post_meta( $post_id, 'scheduler_email_notify' ); 129 109 130 } 110 131 111 132 133 /** 134 * __get 135 * 136 * Automagical get function for object 137 * Returns the requested property if exists 138 * 139 * @param string $key 140 * 141 * @return $value|null 142 */ 112 143 public function __get( $key ) { 113 144 return isset( $this->data[$key] ) ? $this->data[$key] : null; … … 115 146 116 147 148 /** 149 * __set 150 * 151 * Automagical set function for object 152 * Sets the property to the given value 153 * 154 * @param $key The property to set 155 * @param $value The value to set the property with 156 */ 117 157 public function __set( $key, $value ) { 118 158 $this->data[$key] = $value; 119 159 } 160 161 162 /** 163 * __isset 164 * 165 * Automagical isset function for object 166 * 167 * @param string $value 168 * 169 * @return boolean 170 */ 171 public function __isset( $value ) { 172 return isset( $this->data[$value] ); 173 } 120 174 121 175 -
post-status-scheduler/trunk/classes/scheduler.php
r960367 r1013039 17 17 require_once( 'event.php' ); 18 18 require_once( 'taxonomy.php' ); 19 require_once( 'email.php' ); 19 20 20 21 use \post_status_scheduler\Event as Event; 21 22 use \post_status_scheduler\Taxonomy as Taxonomy; 23 use \post_status_scheduler\Settings as Settings; 24 use \post_status_scheduler\Email as Email; 22 25 26 if( !defined( 'POST_STATUS_SCHEDULER_TEXTDOMAIN' ) ) define( 'POST_STATUS_SCHEDULER_TEXTDOMAIN', 'post_status_scheduler' ); 27 23 28 class Scheduler { 24 29 … … 45 50 if( is_admin() ) { 46 51 47 $this->options = get_option( 'post_status_scheduler');52 $this->options = Settings::get_options(); 48 53 49 54 if( !is_array( $this->options ) ) { … … 61 66 62 67 // Get saved options 63 $scheduler_options = get_option( 'post_status_scheduler' );68 $scheduler_options = $this->options; 64 69 $scheduler_options = isset( $scheduler_options['allowed_posttypes'] ) ? $scheduler_options['allowed_posttypes'] : null; 65 70 … … 67 72 if( isset( $pagenow ) && $pagenow == 'edit.php' ) { 68 73 69 // Set the post type to post if it is not in address field 70 if( !isset( $_GET['post_type'] ) ) { 74 if( isset( $this->options['extra_column_enabled'] ) && $this->options['extra_column_enabled'] == true ) { 71 75 72 $post_type = 'post'; 73 74 } else { 75 76 $post_type = $_GET['post_type']; 77 78 } 79 80 // Is this post type set to have unpublishing options? 81 if( isset( $post_type ) && is_array( $scheduler_options ) && in_array( $post_type, $scheduler_options ) ) { 82 83 foreach( $scheduler_options as $type ) { 76 // Set the post type to post if it is not in address field 77 if( !isset( $_GET['post_type'] ) ) { 84 78 85 // Add new columns 86 add_filter( 'manage_'.$type.'_posts_columns', array( $this, 'add_column' ) ); 87 // Set column content 88 add_action( 'manage_'.$type.'_posts_custom_column', array( $this, 'custom_column' ), 10, 2); 89 // Register column as sortable 90 add_filter( "manage_edit-".$type."_sortable_columns", array( $this, 'register_sortable' ) ); 79 $post_type = 'post'; 80 81 } else { 82 83 $post_type = $_GET['post_type']; 91 84 92 85 } 93 94 // The request to use as orderby 95 add_filter( 'request', array( $this, 'orderby' ) ); 86 87 // Is this post type set to have unpublishing options? 88 if( isset( $post_type ) && is_array( $scheduler_options ) && in_array( $post_type, $scheduler_options ) ) { 89 90 foreach( $scheduler_options as $type ) { 91 92 // Add new columns 93 add_filter( 'manage_'.$type.'_posts_columns', array( $this, 'add_column' ) ); 94 // Set column content 95 add_action( 'manage_'.$type.'_posts_custom_column', array( $this, 'custom_column' ), 10, 2); 96 // Register column as sortable 97 add_filter( "manage_edit-".$type."_sortable_columns", array( $this, 'register_sortable' ) ); 98 99 } 100 101 // The request to use as orderby 102 add_filter( 'request', array( $this, 'orderby' ) ); 103 104 } 96 105 97 106 } … … 173 182 $event->meta_key = isset( $postdata['scheduler']['meta_key'] ) ? $postdata['scheduler']['meta_key'] : null; 174 183 184 $event->email_notify = isset( $postdata['scheduler']['email-notify'] ) ? true : false; 185 175 186 // Check if there is an old timestamp to clear away 176 187 //$old_timestamp = get_post_meta( $post->ID, 'post_status_scheduler_date', true ); … … 253 264 $scheduler_status = $filter_result['status']; 254 265 $valid_statuses = $filter_result['valid_statuses']; 266 267 $executed_events = array(); 255 268 256 269 if( $event->check_status ) { … … 275 288 } 276 289 290 // Add the executed event 291 $executed_events []= 'check_status'; 292 277 293 } 278 294 … … 284 300 if( !empty( $event->meta_key ) ) { 285 301 delete_post_meta( $post_id, $event->meta_key ); 302 303 // Add the executed event 304 $executed_events []= 'check_meta'; 286 305 } 287 306 … … 311 330 // Update the categories 312 331 Taxonomy::set_terms( $post_id, array( $scheduler_category_to_add ), $scheduler_category_taxonomy, true ); 332 333 // Add the executed event 334 $executed_events []= 'check_category'; 313 335 314 336 } … … 356 378 Taxonomy::set_terms( $post_id, $new_categories, $scheduler_category_taxonomy ); 357 379 380 // Add the executed event 381 $executed_events []= 'check_category'; 382 358 383 } 359 384 … … 373 398 // Remove post meta 374 399 Event::delete( $post_id ); 400 401 $options = Settings::get_options(); 402 403 // Checkto see if we should send an email notification 404 //if( isset( $options['notification_email_enabled'] ) && $options['notification_email_enabled'] == true ) { 405 406 // Is the email notification checked on this event 407 if( isset( $event->email_notify ) && $event->email_notify == true ) { 408 409 if( is_object( $event->post ) ) { 410 411 Email::update_notification( $event->post ); 412 413 } 414 415 } 416 417 //} 375 418 376 419 apply_filters( 'post_status_scheduler_after_execution', array( 'status' => $scheduler_status, 'valid_statuses' => $valid_statuses ), $post_id ); … … 422 465 // Get valid post types set in module settings page 423 466 $allowed_posttypes = isset( $this->options['allowed_posttypes'] ) ? $this->options['allowed_posttypes'] : array(); 467 // Check if there are any meta keys to be shown 424 468 $meta_keys = isset( $this->options['meta_keys'] ) ? $this->options['meta_keys'] : array(); 469 // Check if email notification is set 470 $use_notification = isset( $this->options['email_notification'] ) ? true : false; 471 425 472 $categories = Taxonomy::get_posttype_terms( $post_type ); 426 473 … … 458 505 echo '<div class="misc-pub-section misc-pub-section-last" id="scheduler-wrapper"> 459 506 <span id="timestamp" class="calendar-link before">' 460 . '<label> ' . __( 'Schedule Status Change', 'post-status-scheduler') . '</label> <input type="checkbox" id="scheduler-use" name="scheduler[use]" ' . $checked . ' /><br />'507 . '<label> ' . __( 'Schedule Status Change', POST_STATUS_SCHEDULER_TEXTDOMAIN ) . '</label> <input type="checkbox" id="scheduler-use" name="scheduler[use]" ' . $checked . ' /><br />' 461 508 . '<div id="scheduler-settings" ' . $show . ' >' 462 . '<label>' . __( 'Date', 'post-status-scheduler') . '</label> '509 . '<label>' . __( 'Date', POST_STATUS_SCHEDULER_TEXTDOMAIN ) . '</label> ' 463 510 . '<input type="text" id="schedulerdate" name="scheduler[date]" value="' .$date. '" maxlengt="10" readonly="true" /> ' 464 . '<label>' . __( 'Time', 'post-status-scheduler') . '</label> '511 . '<label>' . __( 'Time', POST_STATUS_SCHEDULER_TEXTDOMAIN ) . '</label> ' 465 512 . '<input type="text" id="schedulertime" name="scheduler[time]" value="' . $time . '" maxlength="5" readonly="true" /><br /><br />' 466 513 … … 468 515 . '<input type="checkbox" name="scheduler[post-status-check]" id="scheduler-status" ' . $scheduler_check_status_checked . ' /> ' . __( 'Change status', 'post-status-scheduler' ) . '<br />' 469 516 . '<div id="scheduler-status-box" ' . $scheduler_check_status_show . ' >' 470 . '<label>' . __( 'Set status to', 'post-status-scheduler') . '</label> '517 . '<label>' . __( 'Set status to', POST_STATUS_SCHEDULER_TEXTDOMAIN ) . '</label> ' 471 518 . '<select name="scheduler[status]" style="width: 98%;">'; 472 519 … … 485 532 echo '<input type="checkbox" name="scheduler[category-check]" id="scheduler-category" ' . $scheduler_check_category_checked . ' /> ' . __( 'Change categories', 'post-status-scheduler' ) . '<br />' 486 533 .'<div id="scheduler-category-box" ' . $scheduler_check_category_show . '>'; 487 echo __( 'The post will have the following categories on scheduled time', 'post-status-scheduler');534 echo __( 'The post will have the following categories on scheduled time', POST_STATUS_SCHEDULER_TEXTDOMAIN ); 488 535 echo '<select name="scheduler[category][]" multiple size="5">'; 489 536 … … 535 582 // Meta keys 536 583 if( count( $meta_keys ) > 0 ) { 537 echo '<input type="checkbox" name="scheduler[postmeta-check]" id="scheduler-postmeta" ' . $scheduler_check_meta_checked . ' /> ' . __( 'Remove postmeta', 'post-status-scheduler') . '<br />'584 echo '<input type="checkbox" name="scheduler[postmeta-check]" id="scheduler-postmeta" ' . $scheduler_check_meta_checked . ' /> ' . __( 'Remove postmeta', POST_STATUS_SCHEDULER_TEXTDOMAIN ) . '<br />' 538 585 .'<div id="scheduler-postmeta-box" ' . $scheduler_check_meta_show . ' >' 539 586 . '<select name="scheduler[meta_key]">'; … … 551 598 } 552 599 600 // Email notification option 601 if( isset( $this->options['notification_email_enabled'] ) && $this->options['notification_email_enabled'] == true ) { 602 603 echo '<hr />'; 604 605 if( isset( $event->email_notify ) && $event->email_notify == true ) { 606 $email_notify_checked = ' checked="checked" '; 607 } else { 608 $email_notify_checked = ''; 609 } 610 611 // The checkbox for sending a notification email to author 612 echo '<input type="checkbox" id="scheduler-email-notification" name="scheduler[email-notify]" disabled="" ' . $email_notify_checked . '/> ' . __( 'Send email notification on change', POST_STATUS_SCHEDULER_TEXTDOMAIN ); 613 echo '<p class="description">(' . get_the_author_meta( 'user_email', $post->post_author ) . ')</p>'; 614 } 553 615 echo '</div>' 554 616 .'</span></div>'; … … 573 635 if( $key == 'date' ) { 574 636 575 $new_columns['scheduler_date'] = __( 'Scheduled date', 'post-status-scheduler');637 $new_columns['scheduler_date'] = __( 'Scheduled date', POST_STATUS_SCHEDULER_TEXTDOMAIN ); 576 638 577 639 } … … 779 841 // All valid post statuses to choose from 780 842 return array( 781 'draft' => __( 'Draft', 'post-status-scheduler'),782 'pending' => __( 'Pending', 'post-status-scheduler'),783 'private' => __( 'Private', 'post-status-scheduler'),784 'trash' => __( 'Trashbin', 'post-status-scheduler'),785 'deleted' => __( 'Delete (forced)', 'post-status-scheduler'),843 'draft' => __( 'Draft', POST_STATUS_SCHEDULER_TEXTDOMAIN ), 844 'pending' => __( 'Pending', POST_STATUS_SCHEDULER_TEXTDOMAIN ), 845 'private' => __( 'Private', POST_STATUS_SCHEDULER_TEXTDOMAIN ), 846 'trash' => __( 'Trashbin', POST_STATUS_SCHEDULER_TEXTDOMAIN ), 847 'deleted' => __( 'Delete (forced)', POST_STATUS_SCHEDULER_TEXTDOMAIN ), 786 848 ); 787 849 -
post-status-scheduler/trunk/classes/settings.php
r960367 r1013039 89 89 add_settings_section( 90 90 'posttypes', // ID 91 __( 'Post Types ', 'post-status-scheduler' ), // Title91 __( 'Post Types and meta keys', 'post-status-scheduler' ), // Title 92 92 array( $this, 'print_section_info' ), // Callback 93 93 'post-status-scheduler' // Page … … 97 97 'allowed_posttypes', // ID 98 98 __( 'Check the post types you wish to display the Scheduler on', 'post-status-scheduler' ), // Title 99 array( $this, ' id_number_callback' ), // Callback99 array( $this, 'allowed_posttypes_callback' ), // Callback 100 100 'post-status-scheduler', // Page 101 101 'posttypes' // Section … … 113 113 /* SECTION NOTIFICATION EMAIL */ 114 114 115 /* Planned for release 0.4.0 */ 116 117 /*add_settings_section( 115 add_settings_section( 118 116 'notifications', // ID 119 117 __( 'Notification', 'post-status-scheduler' ), // Title … … 124 122 add_settings_field( 125 123 'notification_email_enabled', // ID 126 __( 'Enable email notification option on scheduled changes', 'post-status-scheduler' ), // Title124 __( 'Enable email notification option', 'post-status-scheduler' ), // Title 127 125 array( $this, 'notification_email_enabled_callback' ), // Callback 128 126 'post-status-scheduler', // Page … … 130 128 ); 131 129 130 131 /* SECTION EXTRA COLUMN ON EDIT PAGE */ 132 133 add_settings_section( 134 'column', // ID 135 __( 'Extra column', 'post-status-scheduler' ), // Title 136 array( $this, 'print_column_section_info' ), // Callback 137 'post-status-scheduler' // Page 138 ); 139 132 140 add_settings_field( 133 ' notification_email_subject', // ID134 __( 'E mail subject', 'post-status-scheduler' ), // Title135 array( $this, ' notification_email_subject_callback' ), // Callback141 'extra_column_enabled', // ID 142 __( 'Enable extra column on posttype edit page', 'post-status-scheduler' ), // Title 143 array( $this, 'extra_column_enabled_callback' ), // Callback 136 144 'post-status-scheduler', // Page 137 'notifications' // Section 138 ); 139 140 add_settings_field( 141 'notification_email_body', // ID 142 __( 'Email body', 'post-status-scheduler' ), // Title 143 array( $this, 'notification_email_body_callback' ), // Callback 144 'post-status-scheduler', // Page 145 'notifications' // Section 146 );*/ 147 145 'column' // Section 146 ); 148 147 149 148 } … … 186 185 } 187 186 188 /*if( isset( $input['notification_email_enabled'] ) ) {187 if( isset( $input['notification_email_enabled'] ) ) { 189 188 190 189 $new_input['notification_email_enabled'] = true; … … 196 195 } 197 196 198 if( isset( $input['notification_email_subject'] ) ) { 199 200 $new_input['notification_email_subject'] = esc_attr( $input['notification_email_subject'] ); 201 202 } 203 204 if( isset( $input['notification_email_body'] ) ) { 205 206 $new_input['notification_email_body'] = esc_attr( $input['notification_email_body'] ); 207 208 }*/ 197 if( isset( $input['extra_column_enabled'] ) ) { 198 199 $new_input['extra_column_enabled'] = true; 200 201 } else { 202 203 $new_input['extra_column_enabled'] = false; 204 205 } 209 206 210 207 return $new_input; 211 208 212 209 } 210 213 211 214 212 /** … … 221 219 } 222 220 221 223 222 /** 224 223 * Print the Section text … … 226 225 public function print_notification_section_info() { 227 226 228 print __( 'Edit the email settings used by the notification email on a scheduled change:', 'post-status-scheduler' ); 227 print __( 'Enabling this option makes it possible to send an email notification to the post author on a scheduled change execution.', 'post-status-scheduler' ); 228 229 } 230 231 232 /** 233 * Print the Section text 234 */ 235 public function print_column_section_info() { 236 237 print __( 'Settings for adding extra column "Scheduled date" on edit page. This column will only be displayed on posttypes that are allowed for scheduling', 'post-status-scheduler' ); 229 238 230 239 } … … 236 245 * Callback for the posttypes allowed 237 246 */ 238 public function id_number_callback() {247 public function allowed_posttypes_callback() { 239 248 240 249 // Get all valid public post types … … 317 326 public function notification_email_enabled_callback() { 318 327 319 $options = get_option( 'post_status_scheduler');328 $options = self::get_options(); 320 329 $enabled = !empty( $options['notification_email_enabled'] ) ? $options['notification_email_enabled'] : ''; 321 330 ?> … … 327 336 328 337 329 330 /** 331 * notification_email_subject_callback 338 /** 339 * notification_email_enabled_callback 332 340 * 333 * Callback for the subject of the notification email 334 */ 335 public function notification_email_subject_callback() { 336 337 $options = get_option( 'post_status_scheduler' ); 338 $subject = !empty( $options['notification_email_subject'] ) ? $options['notification_email_subject'] : ''; 339 printf( '<input type="text" name="post_status_scheduler[notification_email_subject]" value="%s" />', $subject ); 340 341 } 342 343 344 /** 345 * notification_email_body_callback 346 * 347 * Callback for the body of the notification email 348 */ 349 public function notification_email_body_callback() { 350 351 $options = get_option( 'post_status_scheduler' ); 352 $body = !empty( $options['notification_email_body'] ) ? $options['notification_email_body'] : ''; 353 354 printf( '<textarea name="post_status_scheduler[notification_email_body]">%s</textarea>', $body ); 355 356 } 357 341 * Callback for the enabling of notification option 342 */ 343 public function extra_column_enabled_callback() { 344 345 $options = self::get_options(); 346 $enabled = !empty( $options['extra_column_enabled'] ) ? $options['extra_column_enabled'] : ''; 347 ?> 348 349 <input type="checkbox" name="post_status_scheduler[extra_column_enabled]" <?php checked( $enabled, true ); ?> /> 350 351 <?php 352 } 353 354 355 public static function get_options() { 356 357 return get_option('post_status_scheduler'); 358 359 } 358 360 359 361 } 360 362 361 362 363 ?> -
post-status-scheduler/trunk/js/scheduler.js
r933176 r1013039 33 33 34 34 } 35 36 toggle_email_notification(); 35 37 }); 36 38 … … 45 47 46 48 } 49 50 toggle_email_notification(); 47 51 }); 48 52 … … 57 61 58 62 } 63 64 toggle_email_notification(); 59 65 }); 60 66 67 toggle_email_notification(); 68 69 function toggle_email_notification() { 70 71 if( $('#scheduler-status').is(':checked') || $('#scheduler-category').is(':checked') || $('#scheduler-postmeta').is(':checked') ) { 72 73 $('#scheduler-email-notification').removeAttr('disabled'); 74 75 } else { 76 77 $('#scheduler-email-notification').attr('disabled', 'disabled'); 78 $('#scheduler-email-notification').removeAttr('checked', 'checked'); 79 80 } 81 82 } 83 61 84 }); -
post-status-scheduler/trunk/languages/post-status-scheduler-sv_SE.pot
r960367 r1013039 2 2 msgstr "" 3 3 "Project-Id-Version: post-status-scheduler\n" 4 "POT-Creation-Date: 2014- 08-05 09:46+0100\n"5 "PO-Revision-Date: 2014- 08-05 09:49+0100\n"4 "POT-Creation-Date: 2014-10-23 15:58+0100\n" 5 "PO-Revision-Date: 2014-10-23 16:00+0100\n" 6 6 "Last-Translator: Andeas Färnstrand <[email protected]>\n" 7 7 "Language-Team: <[email protected]>\n" … … 15 15 "X-Poedit-SearchPath-0: .\n" 16 16 17 #: classes/scheduler.php:460 17 #: classes/email.php:25 18 msgid "Post Status Scheduler update" 19 msgstr "Uppdatering Post Status Scheduler" 20 21 #: classes/email.php:33 22 msgid "A scheduled update has been executed at" 23 msgstr "En schemalagd ändring har blivit exekverad" 24 25 #: classes/email.php:33 26 msgid "on your post" 27 msgstr "på din post" 28 29 #: classes/email.php:34 30 msgid "Regards" 31 msgstr "Hälsningar" 32 33 #: classes/scheduler.php:503 18 34 msgid "Schedule Status Change" 19 35 msgstr "Schemalägg statusändring" 20 36 21 #: classes/scheduler.php: 46237 #: classes/scheduler.php:505 22 38 msgid "Date" 23 39 msgstr "Datum" 24 40 25 #: classes/scheduler.php: 46441 #: classes/scheduler.php:507 26 42 msgid "Time" 27 43 msgstr "Tid" 28 44 29 #: classes/scheduler.php: 46845 #: classes/scheduler.php:511 30 46 msgid "Change status" 31 47 msgstr "Ändra status" 32 48 33 #: classes/scheduler.php: 47049 #: classes/scheduler.php:513 34 50 msgid "Set status to" 35 51 msgstr "Ändra status till" 36 52 37 #: classes/scheduler.php: 48553 #: classes/scheduler.php:528 38 54 msgid "Change categories" 39 55 msgstr "Ändra kategorier" 40 56 41 #: classes/scheduler.php: 48757 #: classes/scheduler.php:530 42 58 msgid "The post will have the following categories on scheduled time" 43 59 msgstr "Följande kategorier kommer att sättas vid schemalagd tid" 44 60 45 #: classes/scheduler.php:5 3761 #: classes/scheduler.php:580 46 62 msgid "Remove postmeta" 47 63 msgstr "Ta bort postmeta" 48 64 49 #: classes/scheduler.php:575 65 #: classes/scheduler.php:608 66 msgid "Send email notification on change" 67 msgstr "Skicka epostnotifiering vid ändring" 68 69 #: classes/scheduler.php:633 50 70 msgid "Scheduled date" 51 71 msgstr "Schemalagt datum" 52 72 53 #: classes/scheduler.php: 78173 #: classes/scheduler.php:839 54 74 msgid "Draft" 55 75 msgstr "Utkast" 56 76 57 #: classes/scheduler.php: 78277 #: classes/scheduler.php:840 58 78 msgid "Pending" 59 79 msgstr "Väntar på granskning" 60 80 61 #: classes/scheduler.php: 78381 #: classes/scheduler.php:841 62 82 msgid "Private" 63 83 msgstr "Privat" 64 84 65 #: classes/scheduler.php: 78485 #: classes/scheduler.php:842 66 86 msgid "Trashbin" 67 87 msgstr "Papperskorg" 68 88 69 #: classes/scheduler.php: 78589 #: classes/scheduler.php:843 70 90 msgid "Delete (forced)" 71 91 msgstr "Radera (tvingad)" … … 76 96 77 97 #: classes/settings.php:91 78 msgid "Post Types "79 msgstr "Posttyper "98 msgid "Post Types and meta keys" 99 msgstr "Posttyper och metakeys" 80 100 81 101 #: classes/settings.php:98 … … 87 107 msgstr "Märk de metafält som skall vara valbara för borttagning" 88 108 89 #: classes/settings.php:11 7109 #: classes/settings.php:119 90 110 msgid "Notification" 91 111 msgstr "Notifikation" 92 112 93 #: classes/settings.php:12 494 msgid "Enable email notification option on scheduled changes"95 msgstr "Aktivera epostnotifi kation vid schemalagda ändringar"113 #: classes/settings.php:126 114 msgid "Enable email notification option" 115 msgstr "Aktivera epostnotifiering" 96 116 97 #: classes/settings.php:132 98 msgid "Email subject" 99 msgstr "Epostämne" 100 101 #: classes/settings.php:140 102 msgid "Email body" 103 msgstr "Epostmeddelande" 104 105 #: classes/settings.php:217 117 #: classes/settings.php:190 106 118 msgid "Enter your settings below:" 107 119 msgstr "Ange inställningar nedan:" 108 120 109 #: classes/settings.php:226 110 msgid "" 111 "Edit the email settings used by the notification email on a scheduled change:" 112 msgstr "Ändra epostinställningarna som används vid notifikationsepost" 121 #: classes/settings.php:199 122 msgid "Email notification settings:" 123 msgstr "Inställningar för epostnotifiering" 124 125 #~ msgid "Post Types" 126 #~ msgstr "Posttyper" 127 128 #~ msgid "Email subject" 129 #~ msgstr "Epostämne" 130 131 #~ msgid "Email body" 132 #~ msgstr "Epostmeddelande" 133 134 #~ msgid "" 135 #~ "Edit the email settings used by the notification email on a scheduled " 136 #~ "change:" 137 #~ msgstr "Ändra epostinställningarna som används vid notifikationsepost" 113 138 114 139 #~ msgid "Add or remove category" -
post-status-scheduler/trunk/languages/post-status-scheduler.pot
r933176 r1013039 2 2 msgstr "" 3 3 "Project-Id-Version: post-status-scheduler\n" 4 "POT-Creation-Date: 2014- 06-11 17:53+0100\n"5 "PO-Revision-Date: 2014- 06-11 18:01+0100\n"4 "POT-Creation-Date: 2014-10-23 15:50+0100\n" 5 "PO-Revision-Date: 2014-10-23 15:51+0100\n" 6 6 "Last-Translator: Andeas Färnstrand <[email protected]>\n" 7 7 "Language-Team: <[email protected]>\n" … … 15 15 "X-Poedit-SearchPath-0: .\n" 16 16 17 #: classes/scheduler.php:37 17 #: classes/scheduler.php:503 18 msgid "Schedule Status Change" 19 msgstr "" 20 21 #: classes/scheduler.php:505 22 msgid "Date" 23 msgstr "" 24 25 #: classes/scheduler.php:507 26 msgid "Time" 27 msgstr "" 28 29 #: classes/scheduler.php:511 30 msgid "Change status" 31 msgstr "" 32 33 #: classes/scheduler.php:513 34 msgid "Set status to" 35 msgstr "" 36 37 #: classes/scheduler.php:528 38 msgid "Change categories" 39 msgstr "" 40 41 #: classes/scheduler.php:530 42 msgid "The post will have the following categories on scheduled time" 43 msgstr "" 44 45 #: classes/scheduler.php:580 46 msgid "Remove postmeta" 47 msgstr "" 48 49 #: classes/scheduler.php:608 50 msgid "Send email notification on change" 51 msgstr "" 52 53 #: classes/scheduler.php:633 54 msgid "Scheduled date" 55 msgstr "" 56 57 #: classes/scheduler.php:839 18 58 msgid "Draft" 19 59 msgstr "" 20 60 21 #: classes/scheduler.php: 3861 #: classes/scheduler.php:840 22 62 msgid "Pending" 23 63 msgstr "" 24 64 25 #: classes/scheduler.php: 3965 #: classes/scheduler.php:841 26 66 msgid "Private" 27 67 msgstr "" 28 68 29 #: classes/scheduler.php: 4069 #: classes/scheduler.php:842 30 70 msgid "Trashbin" 31 71 msgstr "" 32 72 33 #: classes/scheduler.php: 4173 #: classes/scheduler.php:843 34 74 msgid "Delete (forced)" 35 75 msgstr "" 36 76 37 #: classes/scheduler.php:468 38 msgid "Schedule Status Change" 39 msgstr "" 40 41 #: classes/scheduler.php:470 42 msgid "Date" 43 msgstr "" 44 45 #: classes/scheduler.php:472 46 msgid "Time" 47 msgstr "" 48 49 #: classes/scheduler.php:476 50 msgid "Change status" 51 msgstr "" 52 53 #: classes/scheduler.php:478 54 msgid "Set status to" 55 msgstr "" 56 57 #: classes/scheduler.php:493 58 msgid "Add or remove category" 59 msgstr "" 60 61 #: classes/scheduler.php:495 62 msgid "Add" 63 msgstr "" 64 65 #: classes/scheduler.php:496 66 msgid "Remove" 67 msgstr "" 68 69 #: classes/scheduler.php:513 70 msgid "Remove postmeta" 71 msgstr "" 72 73 #: classes/scheduler.php:550 74 msgid "Scheduled date" 75 msgstr "" 76 77 #: classes/settings.php:43 classes/settings.php:61 77 #: classes/settings.php:44 classes/settings.php:62 78 78 msgid "Post Status Scheduler" 79 79 msgstr "" 80 80 81 #: classes/settings.php: 8882 msgid "Post Types "81 #: classes/settings.php:91 82 msgid "Post Types and meta keys" 83 83 msgstr "" 84 84 85 #: classes/settings.php:9 585 #: classes/settings.php:98 86 86 msgid "Check the post types you wish to display the Scheduler on" 87 87 msgstr "" 88 88 89 #: classes/settings.php:10 389 #: classes/settings.php:106 90 90 msgid "Mark allowed meta fields to be shown as removable" 91 91 msgstr "" 92 92 93 #: classes/settings.php:157 93 #: classes/settings.php:119 94 msgid "Notification" 95 msgstr "" 96 97 #: classes/settings.php:126 98 msgid "Enable email notification option" 99 msgstr "" 100 101 #: classes/settings.php:190 94 102 msgid "Enter your settings below:" 95 103 msgstr "" 104 105 #: classes/settings.php:199 106 msgid "Email notification settings:" 107 msgstr "" -
post-status-scheduler/trunk/post-status-scheduler.php
r960369 r1013039 5 5 Plugin Name: Post Status Scheduler 6 6 Description: Change status, category or postmeta of any post type at a scheduled timestamp. 7 Version: 0.3.07 Version: 1.0.0 8 8 Author: Andreas Färnstrand <[email protected]> 9 9 Author URI: http://www.farnstranddev.se … … 28 28 */ 29 29 30 // Exit if accessed directly 31 if ( !defined( 'ABSPATH' ) ) exit; 32 30 33 use post_status_scheduler as post_status_scheduler; 31 34 … … 36 39 require_once 'classes/shortcode.php'; 37 40 38 define( 'POST_STATUS_SCHEDULER_PLUGIN_PATH', plugin_dir_url( __FILE__ ) );39 define( 'POST_STATUS_SCHEDULER_TEXTDOMAIN', 'post_status_scheduler' );40 define( 'POST_STATUS_SCHEDULER_TEXTDOMAIN_PATH', dirname( plugin_basename( __FILE__) ) .'/languages' );41 define( 'POST_STATUS_SCHEDULER_VERSION', '0.3.0' );41 if( !defined( 'POST_STATUS_SCHEDULER_PLUGIN_PATH' ) ) define( 'POST_STATUS_SCHEDULER_PLUGIN_PATH', plugin_dir_url( __FILE__ ) ); 42 if( !defined( 'POST_STATUS_SCHEDULER_TEXTDOMAIN' ) ) define( 'POST_STATUS_SCHEDULER_TEXTDOMAIN', 'post_status_scheduler' ); 43 if( !defined( 'POST_STATUS_SCHEDULER_TEXTDOMAIN_PATH' ) ) define( 'POST_STATUS_SCHEDULER_TEXTDOMAIN_PATH', dirname( plugin_basename( __FILE__) ) .'/languages' ); 44 if( !defined( 'POST_STATUS_SCHEDULER_VERSION' ) ) define( 'POST_STATUS_SCHEDULER_VERSION', '1.0.0' ); 42 45 46 // Create a new scheduler instance 43 47 $pss = new \post_status_scheduler\Scheduler(); 44 48 49 // Create a new settings instance 45 50 if( is_admin() ) { 46 51 $settings = new \post_status_scheduler\Settings(); 47 52 } 48 53 54 // Create shortcodes 49 55 $pss_shortcodes = new \post_status_scheduler\Shortcode(); 50 56 -
post-status-scheduler/trunk/readme.txt
r984682 r1013039 4 4 Requires at least: 3.9 5 5 Tested up to: 4.0 6 Stable tag: 0.3.06 Stable tag: 1.0.0 7 7 License: GPLv2 or later 8 8 License URI: http://www.gnu.org/licenses/gpl-2.0.html … … 14 14 Post Status Scheduler allows for scheduling of post status changes, category adding or removing and 15 15 removing of postmeta on any given date or time. It can be activated on any post type and shows 16 up on the post edit screen in the publish section. 16 up on the post edit screen in the publish section. From version 1.0.0 it has a feature for sending 17 an email notification to the post author on the scheduled update. 17 18 18 19 = Shortcodes = 19 20 20 21 * [pss_scheduled_time post_id="<your post id>"] can be used to get the post's scheduled date and time. 22 23 = Filters = 24 Scheduled Update: 25 * post_status_scheduler_before_execution 26 * post_status_scheduler_after_execution 27 28 Email Notification ( version 1.0.0 ): 29 * post_status_scheduler_email_notification_recipient_email 30 * post_status_scheduler_email_notification_subject 31 * post_status_scheduler_email_notification_date 32 * post_status_scheduler_email_notification_body 21 33 22 34 == Installation == … … 32 44 3. Edit page without post meta option activated. 33 45 4. Edit page with post meta option activated. 46 5. Edit page with email notification option. 34 47 35 48 = What Translations are included? = … … 39 52 == Changelog == 40 53 54 = 1.0.0 = 55 * New feature for sending email notification to post author when executing a scheduled update. 56 * New feature makes it possible to show/remove the "Scheduled date" column on posttype edit page. 57 * Code cleanup. 58 41 59 = 0.3.0 = 42 * Rewritten to support setting multiple categories on scheduled time. I have tried to make sure that it will still work with previously scheduled changes in previous versions of the plugin.43 * A little bit of code clean up .60 * Rewritten plugin to support setting multiple categories on scheduled time. I have tried to make sure that it will still work with previously scheduled changes in previous versions of the plugin. 61 * A little bit of code clean up and refactoring. 44 62 45 63 = 0.2.1 =
Note: See TracChangeset
for help on using the changeset viewer.