__( 'Newsletters', "alo-easymail" ),
'singular_name' => __( 'Newsletter', "alo-easymail" ),
'add_new' => __( 'Add New', "alo-easymail" ),
'add_new_item' => __( 'Add New Newsletter', "alo-easymail" ),
'edit_item' => __( 'Edit Newsletter', "alo-easymail" ),
'new_item' => __( 'New Newsletter', "alo-easymail" ) ,
'view_item' => __( 'View Newsletter', "alo-easymail" ),
'search_items' => __( 'Search Newsletters', "alo-easymail" ),
'not_found' => __( 'No Newsletters found', "alo-easymail" ),
'not_found_in_trash' => __( 'No Newsletters found in Trash', "alo-easymail" ),
'parent_item_colon' => __( 'Parent Newsletter', "alo-easymail" ),
'menu_name' => __( 'Newsletters', "alo-easymail" ),
'parent' => __( 'Parent Newsletter', "alo-easymail" ),
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'exclude_from_search' => false,
'rewrite' => array('slug' => 'newsletters'),
//'capability_type' => 'post', // TODO vedi sotto
// @link http://justintadlock.com/archives/2010/07/10/meta-capabilities-for-custom-post-types
'capability_type' => 'newsletter',
'capabilities' => array(
'publish_posts' => 'publish_newsletters',
'edit_posts' => 'edit_newsletters',
'edit_others_posts' => 'edit_others_newsletters',
'delete_posts' => 'delete_newsletters',
'delete_others_posts'=> 'delete_others_newsletters',
'read_private_posts'=> 'read_private_newsletters',
// DO not assign the next 3 caps to roles: will be mapped by filter
'edit_post' => 'edit_newsletter',
'delete_post' => 'delete_newsletter',
'read_post' => 'read_newsletter',
),
'has_archive' => true,
'hierarchical' => false,
'menu_position' => false,
'menu_icon' => 'dashicons-email',
'can_export' => true,
'supports' => array( 'title' , 'editor', 'custom-fields', 'thumbnail' ),
// 'show_in_rest' => true // @todo: set true when ready for Gutenberg; for now disabled for issues with metaboxes
);
// If it doesn't allow newsletter publication online
if ( get_option('alo_em_publish_newsletters') == "no" ) {
$args['public'] = false;
$args['publicly_queryable'] = false;
$args['show_ui'] = true;
$args['show_in_menu'] = true;
$args['query_var'] = false;
$args['exclude_from_search'] = true; // TODO read here: http://jandcgroup.com/2011/09/14/exclude-custom-post-types-from-wordpress-search-do-not-use-exclude_from_search/
}
$args = apply_filters ( 'alo_easymail_register_newsletter_args', $args );
register_post_type( 'newsletter', $args );
}
add_action('init', 'alo_em_register_newsletter_type');
/**
* Filtering the map_meta_cap hook to know if user can do something
*
* @link http://justintadlock.com/archives/2010/07/10/meta-capabilities-for-custom-post-types
*/
function alo_em_map_meta_cap( $caps, $cap, $user_id, $args ) {
// If editing, deleting, or reading an item, get the post and post type object.
if ( 'edit_newsletter' == $cap || 'delete_newsletter' == $cap || 'read_newsletter' == $cap ) {
$post = get_post( $args[0] );
$post_type = get_post_type_object( $post->post_type );
// Set an empty array for the caps.
$caps = array();
}
// If editing assign the required capability.
if ( 'edit_newsletter' == $cap ) {
if ( $user_id == $post->post_author )
$caps[] = $post_type->cap->edit_posts;
else
$caps[] = $post_type->cap->edit_others_posts;
}
// If deleting, assign the required capability.
elseif ( 'delete_newsletter' == $cap ) {
if ( $user_id == $post->post_author )
$caps[] = $post_type->cap->delete_posts;
else
$caps[] = $post_type->cap->delete_others_posts;
}
// If reading a private item, assign the required capability.
elseif ( 'read_newsletter' == $cap ) {
if ( 'private' != $post->post_status )
$caps[] = 'read';
elseif ( $user_id == $post->post_author )
$caps[] = 'read';
else
$caps[] = $post_type->cap->read_private_posts;
}
// Return the capabilities required by the user.
return $caps;
}
add_filter( 'map_meta_cap', 'alo_em_map_meta_cap', 10, 4 );
/**
* Texts when a Newsletter is updated
*/
function alo_em_newsletter_updated_messages( $messages ) {
global $post, $post_ID;
if ( get_option('alo_em_publish_newsletters') == "no" ) {
$view_url = "";
$preview_url = "";
} else {
$view_url = sprintf( __(' View Newsletter', "alo-easymail" ), esc_url( get_permalink($post_ID) ) );
$preview_url = sprintf( __(' Preview Newsletter', "alo-easymail"), esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) );
}
$messages['newsletter'] = array(
0 => '', // Unused. Messages start at index 1.
1 => __('Newsletter updated.', "alo-easymail" ). $view_url,
2 => __('Custom field updated.', "alo-easymail"),
3 => __('Custom field deleted.', "alo-easymail"),
4 => __('Newsletter updated.', "alo-easymail"),
/* translators: %s: date and time of the revision */
5 => isset($_GET['revision']) ? sprintf( __('Newsletter restored to revision from %s', "alo-easymail"), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
6 => __('Newsletter published.', "alo-easymail") . $view_url,
7 => __('Newsletter saved.', "alo-easymail"),
8 => sprintf( __('Newsletter submitted. Preview Newsletter', "alo-easymail"), esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ),
9 => sprintf( __('Newsletter scheduled for: %1$s.', "alo-easymail"),
// translators: Publish box date format, see http://php.net/date
date_i18n( __( 'j M Y @ G:i', "alo-easymail" ), strtotime( $post->post_date ) ) ). $preview_url,
10 => __('Newsletter draft updated.', "alo-easymail") . $preview_url ,
);
return $messages;
}
add_filter('post_updated_messages', 'alo_em_newsletter_updated_messages');
/**
* Adds media upload in thickbox in Newsletter
*/
function alo_em_newsletter_add_media_upload_scripts() {
if ($GLOBALS['post_type'] == 'newsletter') {
add_thickbox();
wp_enqueue_script('media-upload');
}
}
add_action('admin_print_styles-post-new.php', 'alo_em_newsletter_add_media_upload_scripts');
add_action('admin_print_styles-post.php', 'alo_em_newsletter_add_media_upload_scripts');
/**
* Adds an type column in table
*/
function alo_em_edit_table_columns ( $columns ) {
unset ( $columns["date"] );
$columns["cb"] = "";
$columns["title"] = __( 'Title' ) ." / " . __( 'Subject', "alo-easymail");
$columns["easymail_recipients"] = __( 'Recipients', "alo-easymail" );
$columns["easymail_status"] = __( 'Newsletter status', "alo-easymail" );
$columns["date"] = __( 'Start', "alo-easymail" );
$columns["author"] = __( 'Author' );
return $columns;
}
add_filter ('manage_edit-newsletter_columns', 'alo_em_edit_table_columns');
/**
* Fills the columns of Newsletter display table
*/
function alo_em_table_column_value ( $columns ) {
global $post, $user_ID;
//$count_recipients = 0; //alo_em_count_recipients_from_meta( $post->ID ); // todo fix
$recipients = alo_em_get_recipients_from_meta( $post->ID );
$status = alo_em_get_newsletter_status($post->ID);
if ( $columns == "easymail_recipients" ) {
if ( $status == '' && empty( $recipients['total'] ) && empty( $recipients['estimated_total'] ) ) {
if ( alo_em_user_can_edit_newsletter( $post->ID ) ) echo '';
echo '
' . __( 'No recipients selected yet', "alo-easymail").'';
if ( alo_em_user_can_edit_newsletter( $post->ID ) ) echo '';
} else {
if ( alo_em_user_can_edit_newsletter( $post->ID ) ) echo "";
echo __( 'Total recipients', "alo-easymail") .": ";
echo alo_em_count_recipients_from_meta( $post->ID );
if ( alo_em_user_can_edit_newsletter( $post->ID ) ) {
echo "
\n";
echo "
\n". alo_em_recipients_short_summary ( $recipients ) ."
\n";
}
}
}
if ( $columns == "easymail_status" ) {
if ( ! ( $status == '' && empty( $recipients['total'] ) && empty( $recipients['estimated_total'] ) ) ) {
echo '
';
echo "ID}\">\n";
alo_em_update_column_status ( $post->ID );
echo "\n";
}
}
}
add_action ('manage_posts_custom_column', 'alo_em_table_column_value' );
/**
* Update status column after closing recipients thickbox
*/
function alo_em_ajax_column_status () {
$newsletter = (int)$_POST['post_id'];
if ( $newsletter ) alo_em_update_column_status( $newsletter );
die();
}
add_action('wp_ajax_alo_easymail_update_column_status', 'alo_em_ajax_column_status');
/**
* Pause/Play Newsletter, then update status column after closing recipients thickbox
*/
function alo_em_ajax_pauseplay_column_status () {
$newsletter = $_POST['post_id'];
$button = $_POST['button']; // pause or play?
if ( $newsletter && current_user_can( "publish_newsletters" ) ) {
if ( $button == "pause" ) {
alo_em_edit_newsletter_status ( $newsletter, 'paused' );
} else {
alo_em_edit_newsletter_status ( $newsletter, 'sendable' );
}
alo_em_update_column_status( $newsletter );
}
die();
}
add_action('wp_ajax_alo_easymail_pauseplay_column_status', 'alo_em_ajax_pauseplay_column_status');
/**
* Print html of Status column of Newsletter in display table
*/
function alo_em_update_column_status ( $newsletter ) {
global $user_ID;
$recipients = alo_em_get_recipients_from_meta ( $newsletter );
if ( $recipients ) {
// Post status
$post_status = get_post_status( $newsletter );
//Newsletter status
$status = alo_em_get_newsletter_status( $newsletter );
$report_url = wp_nonce_url( ALO_EM_PLUGIN_URL . '/pages/alo-easymail-admin-report.php?', 'alo-easymail_report');
$goto_report = "";
$goto_report .= "
". __( 'Report', "alo-easymail") ."";
if ( alo_em_is_newsletter_recipients_archived ( $newsletter ) ) $goto_report .= " (". __( 'archived', "alo-easymail") . ")";
switch ( $status ) {
case "sent":
echo "". __("Completed", "alo-easymail"). ": 100%
";
$end = get_post_meta ( $newsletter, "_easymail_completed", current_time( 'mysql', 0 ) );
if ( $end ) echo date_i18n( __( 'j M Y @ G:i', "alo-easymail" ), strtotime( $end ) ). "
";
if ( alo_em_user_can_edit_newsletter( $newsletter ) ) echo $goto_report;
break;
case "sendable":
switch ( $post_status ) {
case "publish":
echo "".__("On sending queue", "alo-easymail"). "...
";
echo __("Progress", "alo-easymail"). ": ". alo_em_newsletter_recipients_percentuage_already_sent( $newsletter ) . "%
";
if ( alo_em_user_can_edit_newsletter( $newsletter ) && current_user_can( "publish_newsletters" ) ) {
echo '
';
echo "";
echo '
';
echo "";
}
if ( alo_em_user_can_edit_newsletter( $newsletter ) && current_user_can( "publish_newsletters" )) echo " ". $goto_report;
break;
case "pending":
echo "".__("Pending Review"). "
";
break;
case "future":
echo "".__("Scheduled"). "
";
if ( alo_em_user_can_edit_newsletter( $newsletter ) ) {
echo '
';
}
break;
case "draft":
echo "".__("Draft"). "
";
break;
default:
echo "".__("Pending"). "
";
break;
} // $post_status
break;
case "paused":
echo "".__("Paused", "alo-easymail"). "!
";
echo __("Progress", "alo-easymail"). ": ". alo_em_newsletter_recipients_percentuage_already_sent( $newsletter ) . "%
";
//if ( alo_em_count_newsletter_recipients_already_sent ( $newsletter ) > 0 ) echo " (".alo_em_count_newsletter_recipients_already_sent ( $newsletter ) ."/". alo_em_count_newsletter_recipients ( $newsletter ). ")
";
if ( alo_em_user_can_edit_newsletter( $newsletter ) ) {
echo "";
echo '
';
echo "";
}
if ( alo_em_user_can_edit_newsletter( $newsletter ) ) echo " ". $goto_report;
break;
case false:
default:
switch ( $post_status ) {
case "pending":
case "draft":
echo "".__("A newsletter cannot be sent if its status is draft or pending review"). "
";
break;
default:
if ( get_option('alo_em_js_rec_list') != "no_ajax_onsavepost" ) { // if required, no link to ajax
//$rec_url = wp_nonce_url( ALO_EM_PLUGIN_URL . '/alo-easymail_recipients-list.php?', 'alo-easymail_recipients-list');
if ( alo_em_user_can_edit_newsletter( $newsletter ) && current_user_can( "publish_newsletters" ) ) {
//echo "";
echo "";
echo "
" . __( 'Required', "alo-easymail") .": " . __( 'Create list of recipients', "alo-easymail");
echo "";
} else {
echo "".__('Ready to be sent by an administrator', "alo-easymail"). "
";
}
}
break;
} // $post_status
}
}
}
/**
* Add "views" button in edit newsletter table
*/
function alo_em_edit_table_views ( $views ) {
$class = ( isset ( $_GET['easymail_status'] ) && $_GET['easymail_status'] == "sent" ) ? "current" : false;
if ( alo_em_count_newsletters_by_status( 'sent' ) > 0 ) {
// post_status=true: to avoid "All" view is the current
$views[ "easymail_status" ] = "\t". __( 'Sent', "alo-easymail") . sprintf( " (%d)", alo_em_count_newsletters_by_status( 'sent' ) /*TODO*/ ) ."";
}
return $views;
}
add_filter( 'views_edit-newsletter', 'alo_em_edit_table_views' );
/**
* Show required newsletters in edit newsletter table
*/
function alo_em_filter_newsletter_table ( $query ) {
global $wp_version, $pagenow;
if ( is_admin() && $pagenow == "edit.php" && isset( $_GET['post_type'] ) && $_GET['post_type'] == "newsletter" ) {
if ( isset ( $_GET['easymail_status'] ) && $_GET['easymail_status'] == "sent" ) {
// query meta: http://codex.wordpress.org/Function_Reference/WP_Query#Custom_Field_Parameters
if ( version_compare ( $wp_version , '3.1', '>=' ) ) {
$meta_1 = array( 'key' => '_easymail_status', 'value' => 'sent', 'compare' => '=' );
$query->set ('meta_query', array( $meta_1 ) );
} else {
$query->set ('meta_key', '_easymail_status' );
$query->set ('meta_value', 'sent' );
$query->set ('meta_compare', '=' );
}
}
}
return $query;
}
add_action('pre_get_posts', 'alo_em_filter_newsletter_table' );
/**
* Boxes meta in Newsletter edit/new pages
*/
function alo_em_newsletter_add_custom_box() {
add_meta_box( "alo_easymail_newsletter_recipients", __("Recipients", "alo-easymail"), "alo_em_meta_recipients", "newsletter", "side", "high" );
if ( get_option('alo_em_use_themes') == 'yes' || get_option('alo_em_use_themes') == '' ) add_meta_box( "alo_easymail_newsletter_themes", __("Themes", "alo-easymail"), "alo_em_meta_themes", "newsletter", "normal", "high" );
add_meta_box( "alo_easymail_newsletter_placeholders", __("Placeholders", "alo-easymail"), "alo_em_meta_placeholders", "newsletter", "normal", "high" );
}
add_action('add_meta_boxes', 'alo_em_newsletter_add_custom_box', 8);
/**
* Box meta: Recipients
*/
function alo_em_meta_recipients ( $post ) {
wp_nonce_field( ALO_EM_PLUGIN_DIR, "edit_newsletter" );
//print_r ( alo_em_get_recipients_from_meta($post->ID) ); print_r ( alo_em_get_all_languages() );
echo "ID ) == 0 ) ? "class=\"easymail-txtwarning\"" : "" ) ." >";
echo "" .__("Selected recipients", "alo-easymail") .": ". alo_em_count_recipients_from_meta( $post->ID ) ."
";
if ( alo_em_get_newsletter_status ( $post->ID ) == "sent" || alo_em_is_newsletter_recipients_archived ( $post->ID ) ) {
echo "". __("This newsletter was already sent", "alo-easymail") .".
";
echo "
";
return; // exit
}
if ( alo_em_count_newsletter_recipients ( $post->ID ) > 0 ) {
echo "". __("The creation of the recipients list has already started", "alo-easymail") .".
";
echo "
";
echo "
";
echo "
";
}
$recipients = alo_em_get_recipients_from_meta ( $post->ID );
?>
". print_r ( $themes, true ). ""; // DEBUG
echo '\n";
echo "". __("View") .""; ?>
ID );
}
/**
* Save Post select in Placeholder Box meta in Newsletter
*/
function alo_em_save_newsletter_placeholders_easymail_post ( $post_id ) {
if ( isset( $_POST['placeholder_easymail_post'] ) && is_numeric( $_POST['placeholder_easymail_post'] ) ) {
update_post_meta ( $post_id, '_placeholder_easymail_post', $_POST['placeholder_easymail_post'] );
} else {
update_post_meta ( $post_id, '_placeholder_easymail_post', 0 );
}
}
add_action('alo_easymail_save_newsletter_meta_extra', 'alo_em_save_newsletter_placeholders_easymail_post' );
/**
* SAVE Boxes meta in Newsletter
*/
function alo_em_save_newsletter_meta ( $post_id ) {
if ( @!wp_verify_nonce( $_POST["edit_newsletter"], ALO_EM_PLUGIN_DIR )) {
return $post_id;
}
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) return $post_id;
// Check permissions
if ( 'newsletter' == $_POST['post_type'] ) {
if ( !current_user_can( 'edit_newsletter', $post_id ) ) return $post_id;
}
do_action ( 'alo_easymail_save_newsletter_meta_extra', $post_id );
// If a previous list exists already: if requested reset, otherwise don't save
if ( alo_em_count_newsletter_recipients( $post_id ) > 0 || alo_em_is_newsletter_recipients_archived ( $post_id ) ) {
if ( isset( $_POST['easymail-reset-all-recipients'] ) ) {
alo_em_delete_newsletter_recipients ( $post_id );
alo_em_delete_newsletter_status ( $post_id );
alo_em_delete_cache_recipients ( $post_id );
} else {
return $post_id; // don't save, exit
}
}
// Save Recipients
$recipients = array ();
if ( isset( $_POST['easymail-recipients-all-regusers'] ) ) {
$recipients['registered'] = "1";
} else {
if ( isset($_POST['check_role']) && is_array ($_POST['check_role']) ) {
foreach ( $_POST['check_role'] as $role ) {
$recipients['role'][] = $role;
}
}
}
if ( isset( $_POST['easymail-recipients-all-subscribers'] ) ) {
$recipients['subscribers'] = "1";
} else {
if ( isset($_POST['check_list']) && is_array ($_POST['check_list']) ) {
foreach ( $_POST['check_list'] as $list ) {
$recipients['list'][] = $list;
}
}
}
if ( isset($_POST['check_lang']) && is_array ($_POST['check_lang']) ) {
foreach ( $_POST['check_lang'] as $lang ) {
$recipients['lang'][] = $lang;
}
}
// Save!
delete_post_meta ( $post_id, "_easymail_recipients" );
add_post_meta ( $post_id, "_easymail_recipients", $recipients );
// If required, create list of recipient now, without ajax
if ( get_option('alo_em_js_rec_list') == "no_ajax_onsavepost" && alo_em_count_recipients_from_meta( $post_id ) > 0 ) {
alo_em_create_cache_recipients( $post_id );
alo_em_add_recipients_from_cache_to_db( $post_id, alo_em_count_recipients_from_meta( $post_id ), false );
}
}
add_action('save_post', 'alo_em_save_newsletter_meta');
/**
* When a Newsletter is deleted: eg. delete recipients from db table
*/
function alo_em_newsletter_deleted ( $post_id ) {
alo_em_delete_newsletter_recipients( $post_id );
}
add_action( 'delete_post', 'alo_em_newsletter_deleted' );
/**
* When click Preview btn, save the content
*/
function alo_em_save_newsletter_content_transient () {
global $user_ID;
check_ajax_referer( "alo-easymail" );
$newsletter_id = ( isset( $_POST['newsletter'] ) && is_numeric( $_POST['newsletter'] ) ) ? (int) $_POST['newsletter'] : false;
$theme = ( isset( $_POST['theme'] ) && array_key_exists( $_POST['theme'], alo_easymail_get_all_themes() ) ) ? stripslashes(trim( $_POST['theme'] ) ) : '';
if ( $newsletter_id )
{
$data = array( 'theme' => $theme );
set_transient( 'alo_em_content_preview_'.$newsletter_id, $data, 60*3 );
die ( '1' );
}
die( '-1' );
}
add_action('wp_ajax_alo_easymail_save_newsletter_content_transient', 'alo_em_save_newsletter_content_transient');
/**
* When save newsletter, delete content in transient
*/
function alo_em_delete_newsletter_content_transient ( $post_id ) {
delete_transient( 'alo_em_content_preview_'.$post_id );
}
add_action('alo_easymail_save_newsletter_meta_extra', 'alo_em_delete_newsletter_content_transient' );
/**
* Generation of List of recipients in modal
*/
function alo_em_recipient_list_modal() {
global $post, $pagenow, $user_email;
if ( $pagenow == "post.php" || ( isset( $_GET['post_type'] ) && $_GET['post_type'] == "newsletter" ) ) { ?>
0 && $response['n_tot'] > 0 ) ? round ( $response['n_done'] * 100 / $response['n_tot'] ) : 0;
}
header( "Content-Type: application/json" );
die( json_encode ( $response ) );
}
add_action('wp_ajax_alo_easymail_recipient_list_ajaxloop', 'alo_em_ajax_recipient_list_ajaxloop');
/* EOF */