Esempio n. 1
0
    function build_page()
    {
        $subject = $message = $attach = $group = $sender_name = $sender_email = '';
        $subscribers_update = $subscribers_delete = $subscribers_clear = false;
        $subscribers = array();
        if (isset($_POST['emailer_subject'])) {
            do {
                // Check nonce
                if (!isset($_POST['nonce']) || !wp_verify_nonce($_POST['nonce'], __FILE__)) {
                    $this->error = __('Incorrect WP-nonce data! Operation canceled!', 'axiom');
                    break;
                }
                // Get post data
                $subject = isset($_POST['emailer_subject']) ? $_POST['emailer_subject'] : '';
                if (empty($subject)) {
                    $this->error = __('Subject can not be empty! Operation canceled!', 'axiom');
                    break;
                }
                $message = isset($_POST['emailer_message']) ? $_POST['emailer_message'] : '';
                if (empty($message)) {
                    $this->error = __('Message can not be empty! Operation canceled!', 'axiom');
                    break;
                }
                $attach = isset($_FILES['emailer_attachment']['tmp_name']) && file_exists($_FILES['emailer_attachment']['tmp_name']) ? $_FILES['emailer_attachment']['tmp_name'] : '';
                $group = isset($_POST['emailer_group']) ? $_POST['emailer_group'] : '';
                $subscribers = isset($_POST['emailer_subscribers']) ? $_POST['emailer_subscribers'] : '';
                if (!empty($subscribers)) {
                    $subscribers = explode("\n", str_replace(array(';', ','), array("\n", "\n"), $subscribers));
                } else {
                    $subscribers = array();
                }
                if (count($subscribers) == 0) {
                    $this->error = __('Subscribers lists are empty! Operation canceled!', 'axiom');
                    break;
                }
                $sender_name = !empty($_POST['emailer_sender_name']) ? $_POST['emailer_sender_name'] : get_bloginfo('name');
                $sender_email = !empty($_POST['emailer_sender_email']) ? $_POST['emailer_sender_email'] : '';
                if (empty($sender_email)) {
                    $sender_email = axiom_get_theme_option('contact_email');
                }
                if (empty($sender_email)) {
                    $sender_email = get_bloginfo('admin_email');
                }
                if (empty($sender_email)) {
                    $this->error = __('Sender email is empty! Operation canceled!', 'axiom');
                    break;
                }
                $headers = 'From: ' . $sender_name . ' <' . $sender_email . '>' . "\r\n";
                $subscribers_update = isset($_POST['emailer_subscribers_update']);
                $subscribers_delete = isset($_POST['emailer_subscribers_delete']);
                $subscribers_clear = isset($_POST['emailer_subscribers_clear']);
                // Send email
                add_filter('wp_mail_content_type', 'axiom_set_html_content_type');
                $new_list = array();
                $list = array();
                $cnt = 0;
                $mail = axiom_get_theme_option('mail_function');
                foreach ($subscribers as $email) {
                    $email = trim(chop($email));
                    if (empty($email)) {
                        continue;
                    }
                    if (!preg_match('/[\\.\\-_A-Za-z0-9]+?@[\\.\\-A-Za-z0-9]+?[\\ .A-Za-z0-9]{2,}/', $email)) {
                        continue;
                    }
                    $list[] = $email;
                    $cnt++;
                    if ($cnt >= $this->max_recipients_in_one_letter) {
                        @$mail($list, $subject, $message, $headers, $attach);
                        if ($subscribers_update && $group != 'none') {
                            $new_list = array_merge($new_list, $list);
                        }
                        $list = array();
                        $cnt = 0;
                    }
                }
                if ($cnt > 0) {
                    @$mail($list, $subject, $message, $headers, $attach);
                    if ($subscribers_update && $group != 'none') {
                        $new_list = array_merge($new_list, $list);
                    }
                    $list = array();
                    $cnt = 0;
                }
                remove_filter('wp_mail_content_type', 'axiom_set_html_content_type');
                $add_msg = '';
                if ($subscribers_update && $group != 'none') {
                    $rez = array();
                    if (count($this->subscribers[$group]) > 0) {
                        foreach ($this->subscribers[$group] as $k => $v) {
                            if (!$subscribers_clear && !empty($v)) {
                                $rez[$k] = $v;
                            }
                        }
                    }
                    if (count($new_list) > 0) {
                        foreach ($new_list as $v) {
                            $rez[$v] = '';
                        }
                    }
                    $this->subscribers[$group] = $rez;
                    update_option('axiom_emailer_subscribers', $this->subscribers);
                    $add_msg = __(' The subscriber list is updated', 'axiom');
                } else {
                    if ($subscribers_delete && $group != 'none') {
                        unset($this->subscribers[$group]);
                        update_option('axiom_emailer_subscribers', $this->subscribers);
                        $add_msg = __(' The subscriber list is cleared', 'axiom');
                    }
                }
                $this->success = __('E-Mail was send successfull!', 'axiom') . $add_msg;
            } while (false);
        }
        ?>
		<div class="trx_emailer">
			<h2 class="trx_emailer_title"><?php 
        _e('AxiomThemes Emailer', 'axiom');
        ?>
</h2>
			<div class="trx_emailer_result">
				<?php 
        if (!empty($this->error)) {
            ?>
				<div class="error">
					<p><?php 
            echo $this->error;
            ?>
</p>
				</div>
				<?php 
        }
        ?>
				<?php 
        if (!empty($this->success)) {
            ?>
				<div class="updated">
					<p><?php 
            echo $this->success;
            ?>
</p>
				</div>
				<?php 
        }
        ?>
			</div>
	
			<form id="trx_emailer_form" action="#" method="post" enctype="multipart/form-data">

				<input type="hidden" value="<?php 
        echo esc_attr($this->nonce);
        ?>
" name="nonce" />

				<div class="trx_emailer_block">
					<fieldset class="trx_emailer_block_inner">
						<legend> <?php 
        _e('Letter data', 'axiom');
        ?>
 </legend>
						<div class="trx_emailer_fields">
							<div class="trx_emailer_field trx_emailer_subject">
								<label for="emailer_subject"><?php 
        _e('Subject:', 'axiom');
        ?>
</label>
								<input type="text" value="<?php 
        echo esc_attr($subject);
        ?>
" name="emailer_subject" id="emailer_subject" />
							</div>
							<div class="trx_emailer_field trx_emailer_attachment">
								<label for="emailer_attachment"><?php 
        _e('Attachment:', 'axiom');
        ?>
</label>
								<input type="file" name="emailer_attachment" id="emailer_attachment" />
							</div>
							<div class="trx_emailer_field trx_emailer_message">
								<?php 
        wp_editor($message, 'emailer_message', array('wpautop' => false, 'textarea_rows' => 10));
        ?>
								
							</div>
						</div>
					</fieldset>
				</div>
	
				<div class="trx_emailer_block">
					<fieldset class="trx_emailer_block_inner">
						<legend> <?php 
        _e('Subscribers', 'axiom');
        ?>
 </legend>
						<div class="trx_emailer_fields">
							<div class="trx_emailer_field trx_emailer_group">
								<label for="emailer_group"><?php 
        _e('Select group:', 'axiom');
        ?>
</label>
								<select name="emailer_group" id="emailer_group">
									<option value="none"<?php 
        echo $group == 'none' ? ' selected="selected"' : '';
        ?>
><?php 
        _e('- Select group -', 'axiom');
        ?>
</option>
									<?php 
        if (count($this->subscribers) > 0) {
            foreach ($this->subscribers as $gr => $list) {
                echo '<option value="' . est_attr($gr) . '"' . ($group == $gr ? ' selected="selected"' : '') . '>' . axiom_strtoproper($gr) . '</option>';
            }
        }
        ?>
								</select>
								<input type="checkbox" name="emailer_subscribers_update" id="emailer_subscribers_update" value="1"<?php 
        echo $subscribers_update ? ' checked="checked"' : '';
        ?>
 /><label for="emailer_subscribers_update" class="inline" title="<?php 
        _e('Update the subscribers list for selected group', 'axiom');
        ?>
"><?php 
        _e('Update', 'axiom');
        ?>
</label>
								<input type="checkbox" name="emailer_subscribers_clear" id="emailer_subscribers_clear" value="1"<?php 
        echo $subscribers_clear ? ' checked="checked"' : '';
        ?>
 /><label for="emailer_subscribers_clear" class="inline" title="<?php 
        _e('Clear this group from not confirmed emails after send', 'axiom');
        ?>
"><?php 
        _e('Clear', 'axiom');
        ?>
</label>
								<input type="checkbox" name="emailer_subscribers_delete" id="emailer_subscribers_delete" value="1"<?php 
        echo $subscribers_delete ? ' checked="checked"' : '';
        ?>
 /><label for="emailer_subscribers_delete" class="inline" title="<?php 
        _e('Delete this group after send', 'axiom');
        ?>
"><?php 
        _e('Delete', 'axiom');
        ?>
</label>
							</div>
							<div class="trx_emailer_field trx_emailer_subscribers2">
								<label for="emailer_subscribers" class="big"><?php 
        _e('List of recipients:', 'axiom');
        ?>
</label>
								<textarea name="emailer_subscribers" id="emailer_subscribers"><?php 
        echo join("\n", $subscribers);
        ?>
</textarea>
							</div>
							<div class="trx_emailer_field trx_emailer_sender_name">
								<label for="emailer_sender_name"><?php 
        _e('Sender name:', 'axiom');
        ?>
</label>
								<input type="text" name="emailer_sender_name" id="emailer_sender_name" value="<?php 
        echo esc_attr($sender_name);
        ?>
" /><br />
							</div>
							<div class="trx_emailer_field trx_emailer_sender_email">
								<label for="emailer_sender_email"><?php 
        _e('Sender email:', 'axiom');
        ?>
</label>
								<input type="text" name="emailer_sender_email" id="emailer_sender_email" value="<?php 
        echo esc_attr($sender_email);
        ?>
" />
							</div>
						</div>
					</fieldset>
				</div>
	
				<div class="trx_emailer_buttons">
					<a href="#" id="trx_emailer_send"><?php 
        echo _e('Send', 'axiom');
        ?>
</a>
				</div>
	
			</form>
		</div>
		<?php 
    }
function powerpress_get_podpress_episodes($hide_errors = true)
{
    global $wpdb;
    $PodpressSettings = get_option('podPress_config');
    if (empty($PodpressSettings)) {
        $PodpressSettings = array();
        $PodpressSettings['mediaWebPath'] = '';
        $powerpress_settings = get_option('powerpress_general');
        if (!empty($powerpress_settings['default_url'])) {
            $PodpressSettings['mediaWebPath'] = $powerpress_settings['default_url'];
            powerpress_page_message_add_notice(sprintf(__('Unable to detect PodPress media URL setting. Using the PowerPress setting "Default Media URL" (%s) instead.', 'powerpress'), esc_attr($PodpressSettings['mediaWebPath'])));
        } else {
            // We need to print a warning that they need to configure their podPress settings as the settings are no longer found in the database.
            powerpress_page_message_add_error(__('Unable to detect PodPress media URL setting. Please set the "Default Media URL" setting in PowerPress to properly import podcast episodes.', 'powerpress'));
        }
    }
    $media_url = $PodpressSettings['mediaWebPath'];
    if (substr($media_url, 0, -1) != '/') {
        $media_url .= '/';
    }
    // Make sure the URL has a trailing slash
    $return = array();
    $return['feeds_required'] = 0;
    $query = "SELECT p.ID, p.post_title, p.post_date, pm.meta_value ";
    $query .= "FROM {$wpdb->posts} AS p ";
    $query .= "INNER JOIN {$wpdb->postmeta} AS pm ON p.ID = pm.post_id ";
    $query .= "WHERE (pm.meta_key = 'podPressMedia' OR pm.meta_key = '_podPressMedia') ";
    $query .= "AND p.post_type != 'revision' ";
    $query .= "GROUP BY p.ID ";
    $query .= "ORDER BY p.post_date DESC ";
    $results_data = $wpdb->get_results($query, ARRAY_A);
    if ($results_data) {
        while (list($null, $row) = each($results_data)) {
            //$return = $row;
            $podpress_data = @unserialize($row['meta_value']);
            if (!$podpress_data) {
                $podpress_data_serialized = powerpress_repair_serialize($row['meta_value']);
                $podpress_data = @unserialize($podpress_data_serialized);
                if (!is_array($podpress_data) && is_string($podpress_data)) {
                    $podpress_data_two = @unserialize($podpress_data);
                    if (!is_array($podpress_data_two)) {
                        $podpress_data_serialized = powerpress_repair_serialize($podpress_data);
                        $podpress_data_two = @unserialize($podPressMedia);
                    }
                    if (is_array($podpress_data_two)) {
                        $podpress_data = $podpress_data_two;
                    }
                }
            } else {
                if (is_string($podpress_data)) {
                    // May have been double serialized...
                    $podpress_unserialized = @unserialize($podpress_data);
                    if (!$podpress_unserialized) {
                        $podpress_data_serialized = powerpress_repair_serialize($podpress_data);
                        $podpress_unserialized = @unserialize($podpress_data_serialized);
                    }
                    $podpress_data = $podpress_unserialized;
                }
            }
            if ($podpress_data) {
                if (!is_array($podpress_data)) {
                    // display a warning here...
                    if ($hide_errors == false) {
                        powerpress_page_message_add_error(sprintf(__('Error decoding PodPress data for post "%s"', 'powerpress'), est_attr($row['post_title'])));
                    }
                    continue;
                }
                $clean_data = array();
                while (list($episode_index, $episode_data) = each($podpress_data)) {
                    if (trim($episode_data['URI']) != '') {
                        $MediaURL = $episode_data['URI'];
                        if (strtolower(substr($MediaURL, 0, 4)) != 'http') {
                            $MediaURL = $media_url . rtrim($episode_data['URI'], '/');
                        }
                        if (!powerpress_only_include_ext($MediaURL)) {
                            // Skip this media type
                            continue;
                        }
                        $clean_data[$episode_index] = array();
                        $clean_data[$episode_index]['url'] = $MediaURL;
                        $clean_data[$episode_index]['size'] = $episode_data['size'];
                        if (trim($episode_data['duration']) && $episode_data['duration'] != 'UNKNOWN') {
                            $clean_data[$episode_index]['duration'] = powerpress_readable_duration($episode_data['duration'], true);
                        }
                        $ContentType = powerpress_get_contenttype($episode_data['URI']);
                        if ($ContentType) {
                            $clean_data[$episode_index]['type'] = trim($ContentType);
                        }
                        if (!empty($episode_data['previewImage'])) {
                            $clean_data[$episode_index]['image'] = $episode_data['previewImage'];
                        }
                    }
                }
                if (count($clean_data) == 0) {
                    continue;
                }
                // Go to the next record...
                if ($return['feeds_required'] < count($clean_data)) {
                    $return['feeds_required'] = count($clean_data);
                }
                $return[$row['ID']] = array();
                $return[$row['ID']]['podpress_data'] = $clean_data;
                $return[$row['ID']]['post_title'] = $row['post_title'];
                $return[$row['ID']]['post_date'] = $row['post_date'];
                // Check that there is no other enclosure...
                $enclosure_data = get_post_meta($row['ID'], 'enclosure', true);
                if ($enclosure_data) {
                    $Included = false;
                    list($EnclosureURL, $null) = explode("\n", $enclosure_data);
                    $return[$row['ID']]['enclosure'] = $enclosure_data;
                    while (list($episode_index_temp, $episode_data_temp) = each($clean_data)) {
                        if (trim($EnclosureURL) == trim($episode_data_temp['url'])) {
                            $Included = true;
                            break;
                            // We found the media already.
                        } else {
                            if (trim($episode_data_temp['url']) == '') {
                                unset($clean_data[$episode_index_temp]);
                                // Empty URL, lets remove it so we don't accidently use it
                            }
                        }
                    }
                    reset($clean_data);
                    if ($Included == false && $return['feeds_required'] < count($clean_data) + 1) {
                        $return['feeds_required'] = count($clean_data) + 1;
                        // We can't remove this enclosure
                    }
                }
                // Check for additional itunes data in the database..
                if (false) {
                    $itunes_data = get_post_meta($row['ID'], 'podPressPostSpecific', true);
                    if ($itunes_data && is_array($itunes_data)) {
                        $return[$row['ID']]['itunes'] = array();
                        // Add iTunes stuff...
                        if ($itunes_data['itunes:subtitle'] != '##PostExcerpt##' && $itunes_data['itunes:subtitle'] != '') {
                            $return[$row['ID']]['itunes']['subtitle'] = $itunes_data['itunes:subtitle'];
                        }
                        if ($itunes_data['itunes:summary'] != '##PostExcerpt##' && $itunes_data['itunes:summary'] != '##Global##' && $itunes_data['itunes:summary'] != '') {
                            $return[$row['ID']]['itunes']['summary'] = $itunes_data['itunes:summary'];
                        }
                        if ($itunes_data['itunes:author'] != '##Global##' && $itunes_data['itunes:author'] != '') {
                            $return[$row['ID']]['itunes']['author'] = $itunes_data['itunes:author'];
                        }
                        if (strtolower($itunes_data['itunes:explicit']) == 'yes') {
                            $return[$row['ID']]['itunes']['explicit'] = 'yes';
                        }
                        if (strtolower($itunes_data['itunes:block']) == 'yes') {
                            $return[$row['ID']]['itunes']['block'] = 'yes';
                        }
                        if (count($return[$row['ID']]['itunes']) == 0) {
                            unset($return[$row['ID']]['itunes']);
                        }
                    }
                }
            }
        }
    }
    return $return;
}