You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
399 lines
18 KiB
399 lines
18 KiB
<?php
|
|
|
|
if (!class_exists('XmlExportComment')) {
|
|
final class XmlExportComment
|
|
{
|
|
private $init_fields = array(
|
|
array(
|
|
'label' => 'comment_ID',
|
|
'name' => 'ID',
|
|
'type' => 'comment_ID'
|
|
),
|
|
array(
|
|
'label' => 'comment_author_email',
|
|
'name' => 'Author Email',
|
|
'type' => 'comment_author_email'
|
|
),
|
|
array(
|
|
'label' => 'comment_content',
|
|
'name' => 'Content',
|
|
'type' => 'comment_content'
|
|
)
|
|
);
|
|
|
|
private $default_fields = array(
|
|
array(
|
|
'label' => 'comment_ID',
|
|
'name' => 'ID',
|
|
'type' => 'comment_ID'
|
|
),
|
|
array(
|
|
'label' => 'comment_post_ID',
|
|
'name' => 'Post ID',
|
|
'type' => 'comment_post_ID'
|
|
),
|
|
array(
|
|
'label' => 'comment_author',
|
|
'name' => 'Author',
|
|
'type' => 'comment_author'
|
|
),
|
|
array(
|
|
'label' => 'comment_author_email',
|
|
'name' => 'Author Email',
|
|
'type' => 'comment_author_email'
|
|
),
|
|
array(
|
|
'label' => 'comment_author_url',
|
|
'name' => 'Author URL',
|
|
'type' => 'comment_author_url'
|
|
),
|
|
array(
|
|
'label' => 'comment_author_IP',
|
|
'name' => 'Author IP',
|
|
'type' => 'comment_author_IP'
|
|
),
|
|
array(
|
|
'label' => 'comment_date',
|
|
'name' => 'Date',
|
|
'type' => 'comment_date'
|
|
),
|
|
array(
|
|
'label' => 'comment_content',
|
|
'name' => 'Content',
|
|
'type' => 'comment_content'
|
|
),
|
|
array(
|
|
'label' => 'comment_karma',
|
|
'name' => 'Karma',
|
|
'type' => 'comment_karma'
|
|
),
|
|
array(
|
|
'label' => 'comment_approved',
|
|
'name' => 'Approved',
|
|
'type' => 'comment_approved'
|
|
),
|
|
array(
|
|
'label' => 'comment_agent',
|
|
'name' => 'Agent',
|
|
'type' => 'comment_agent'
|
|
),
|
|
array(
|
|
'label' => 'comment_type',
|
|
'name' => 'Type',
|
|
'type' => 'comment_type'
|
|
),
|
|
array(
|
|
'label' => 'comment_parent',
|
|
'name' => 'Comment Parent',
|
|
'type' => 'comment_parent'
|
|
),
|
|
array(
|
|
'label' => 'user_id',
|
|
'name' => 'User ID',
|
|
'type' => 'user_id'
|
|
)
|
|
|
|
);
|
|
|
|
private $advanced_fields = array();
|
|
|
|
public static $is_active = true;
|
|
|
|
public function __construct()
|
|
{
|
|
|
|
if ((XmlExportEngine::$exportOptions['export_type'] == 'specific' and !in_array('comments', XmlExportEngine::$post_types))
|
|
or (XmlExportEngine::$exportOptions['export_type'] == 'advanced' and XmlExportEngine::$exportOptions['wp_query_selector'] != 'wp_comment_query')
|
|
) {
|
|
self::$is_active = false;
|
|
return;
|
|
}
|
|
|
|
add_filter("wp_all_export_available_sections", array(&$this, "filter_available_sections"), 10, 1);
|
|
add_filter("wp_all_export_init_fields", array(&$this, "filter_init_fields"), 10, 1);
|
|
add_filter("wp_all_export_default_fields", array(&$this, "filter_default_fields"), 10, 1);
|
|
add_filter("wp_all_export_other_fields", array(&$this, "filter_other_fields"), 10, 1);
|
|
}
|
|
|
|
// [FILTERS]
|
|
|
|
/**
|
|
*
|
|
* Filter Init Fields
|
|
*
|
|
*/
|
|
public function filter_init_fields($init_fields)
|
|
{
|
|
return $this->init_fields;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* Filter Default Fields
|
|
*
|
|
*/
|
|
public function filter_default_fields($default_fields)
|
|
{
|
|
return $this->default_fields;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* Filter Other Fields
|
|
*
|
|
*/
|
|
public function filter_other_fields($other_fields)
|
|
{
|
|
return $this->advanced_fields;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* Filter Sections in Available Data
|
|
*
|
|
*/
|
|
public function filter_available_sections($sections)
|
|
{
|
|
|
|
unset($sections['cats']);
|
|
unset($sections['media']);
|
|
unset($sections['other']);
|
|
|
|
$sections['cf']['title'] = __("Comment meta", "wp_all_export_plugin");
|
|
|
|
return $sections;
|
|
}
|
|
|
|
// [\FILTERS]
|
|
|
|
public function init(& $existing_meta_keys = array())
|
|
{
|
|
if (!self::$is_active) return;
|
|
|
|
global $wp_version;
|
|
|
|
if (!empty(XmlExportEngine::$exportQuery)) {
|
|
if (version_compare($wp_version, '4.2.0', '>=')) {
|
|
$comments = XmlExportEngine::$exportQuery->get_comments();
|
|
} else {
|
|
$comments = XmlExportEngine::$exportQuery;
|
|
}
|
|
}
|
|
|
|
if (!empty($comments)) {
|
|
foreach ($comments as $comment) {
|
|
$comment_meta = get_comment_meta($comment->comment_ID, '');
|
|
if (!empty($comment_meta)) {
|
|
foreach ($comment_meta as $record_meta_key => $record_meta_value) {
|
|
if (!in_array($record_meta_key, $existing_meta_keys)) {
|
|
$to_add = true;
|
|
foreach ($this->default_fields as $default_value) {
|
|
if ($record_meta_key == $default_value['name'] || $record_meta_key == $default_value['type']) {
|
|
$to_add = false;
|
|
break;
|
|
}
|
|
}
|
|
if ($to_add) {
|
|
foreach ($this->advanced_fields as $advanced_value) {
|
|
if ($record_meta_key == $advanced_value['name'] || $record_meta_key == $advanced_value['type']) {
|
|
$to_add = false;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if ($to_add) $existing_meta_keys[] = $record_meta_key;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static function prepare_data($comment, $exportOptions, $xmlWriter, $implode_delimiter, $preview)
|
|
{
|
|
$article = array();
|
|
|
|
// associate exported comment with import
|
|
if (wp_all_export_is_compatible() && isset($exportOptions['is_generate_import']) && $exportOptions['is_generate_import'] && $exportOptions['import_id']) {
|
|
$postRecord = new PMXI_Post_Record();
|
|
$postRecord->clear();
|
|
$postRecord->getBy(array(
|
|
'post_id' => $comment->comment_ID,
|
|
'import_id' => $exportOptions['import_id'],
|
|
));
|
|
|
|
if ($postRecord->isEmpty()) {
|
|
$postRecord->set(array(
|
|
'post_id' => $comment->comment_ID,
|
|
'import_id' => $exportOptions['import_id'],
|
|
'unique_key' => $comment->comment_ID
|
|
))->save();
|
|
}
|
|
unset($postRecord);
|
|
}
|
|
|
|
$is_xml_export = false;
|
|
|
|
if (!empty($xmlWriter) and $exportOptions['export_to'] == 'xml' and !in_array($exportOptions['xml_template_type'], array('custom', 'XmlGoogleMerchants'))) {
|
|
$is_xml_export = true;
|
|
}
|
|
|
|
foreach ($exportOptions['ids'] as $ID => $value) {
|
|
$fieldName = apply_filters('wp_all_export_field_name', wp_all_export_parse_field_name($exportOptions['cc_name'][$ID]), $ID);
|
|
$fieldValue = $exportOptions['cc_value'][$ID];
|
|
$fieldLabel = $exportOptions['cc_label'][$ID];
|
|
$fieldSql = $exportOptions['cc_sql'][$ID];
|
|
$fieldPhp = $exportOptions['cc_php'][$ID];
|
|
$fieldCode = $exportOptions['cc_code'][$ID];
|
|
$fieldType = $exportOptions['cc_type'][$ID];
|
|
$fieldOptions = $exportOptions['cc_options'][$ID];
|
|
$fieldSettings = empty($exportOptions['cc_settings'][$ID]) ? $fieldOptions : $exportOptions['cc_settings'][$ID];
|
|
|
|
if (empty($fieldName) or empty($fieldType) or !is_numeric($ID)) continue;
|
|
|
|
$element_name = (!empty($fieldName)) ? $fieldName : 'untitled_' . $ID;
|
|
|
|
$element_name_ns = '';
|
|
|
|
if ($is_xml_export) {
|
|
$element_name = (!empty($fieldName)) ? preg_replace('/[^a-z0-9_:-]/i', '', $fieldName) : 'untitled_' . $ID;
|
|
|
|
if (strpos($element_name, ":") !== false) {
|
|
$element_name_parts = explode(":", $element_name);
|
|
$element_name_ns = (empty($element_name_parts[0])) ? '' : $element_name_parts[0];
|
|
$element_name = (empty($element_name_parts[1])) ? 'untitled_' . $ID : preg_replace('/[^a-z0-9_-]/i', '', $element_name_parts[1]);
|
|
}
|
|
}
|
|
|
|
$fieldSnipped = (!empty($fieldPhp) and !empty($fieldCode)) ? $fieldCode : false;
|
|
|
|
|
|
switch ($fieldType) {
|
|
case 'comment_ID':
|
|
wp_all_export_write_article($article, $element_name, apply_filters('pmxe_comment_id', pmxe_filter($comment->comment_ID, $fieldSnipped), $comment->comment_ID));
|
|
break;
|
|
case 'comment_post_ID':
|
|
wp_all_export_write_article($article, $element_name, apply_filters('pmxe_comment_post_id', pmxe_filter($comment->comment_post_ID, $fieldSnipped), $comment->comment_ID));
|
|
break;
|
|
case 'comment_author':
|
|
wp_all_export_write_article($article, $element_name, apply_filters('pmxe_comment_author', pmxe_filter($comment->comment_author, $fieldSnipped), $comment->comment_ID));
|
|
break;
|
|
case 'comment_author_email':
|
|
wp_all_export_write_article($article, $element_name, apply_filters('pmxe_comment_author_email', pmxe_filter($comment->comment_author_email, $fieldSnipped), $comment->comment_ID));
|
|
break;
|
|
case 'comment_author_url':
|
|
wp_all_export_write_article($article, $element_name, apply_filters('pmxe_comment_author_url', pmxe_filter($comment->comment_author_url, $fieldSnipped), $comment->comment_ID));
|
|
break;
|
|
case 'comment_author_IP':
|
|
wp_all_export_write_article($article, $element_name, apply_filters('pmxe_comment_author_ip', pmxe_filter($comment->comment_author_IP, $fieldSnipped), $comment->comment_ID));
|
|
break;
|
|
case 'comment_karma':
|
|
wp_all_export_write_article($article, $element_name, apply_filters('pmxe_comment_karma', pmxe_filter($comment->comment_karma, $fieldSnipped), $comment->comment_ID));
|
|
break;
|
|
case 'comment_content':
|
|
$val = apply_filters('pmxe_comment_content', pmxe_filter($comment->comment_content, $fieldSnipped), $comment->comment_ID);
|
|
wp_all_export_write_article($article, $element_name, ($preview) ? trim(preg_replace('~[\r\n]+~', ' ', htmlspecialchars($val))) : $val);
|
|
break;
|
|
case 'comment_date':
|
|
|
|
$post_date = prepare_date_field_value($fieldSettings, strtotime($comment->comment_date), "Y-m-d H:i:s");
|
|
|
|
wp_all_export_write_article($article, $element_name, apply_filters('pmxe_comment_date', pmxe_filter($post_date, $fieldSnipped), $comment->comment_ID));
|
|
break;
|
|
case 'comment_approved':
|
|
wp_all_export_write_article($article, $element_name, apply_filters('pmxe_comment_approved', pmxe_filter($comment->comment_approved, $fieldSnipped), $comment->comment_ID));
|
|
break;
|
|
case 'comment_agent':
|
|
wp_all_export_write_article($article, $element_name, apply_filters('pmxe_comment_agent', pmxe_filter($comment->comment_agent, $fieldSnipped), $comment->comment_ID));
|
|
break;
|
|
case 'comment_type':
|
|
wp_all_export_write_article($article, $element_name, apply_filters('pmxe_comment_type', pmxe_filter($comment->comment_type, $fieldSnipped), $comment->comment_ID));
|
|
break;
|
|
case 'comment_parent':
|
|
wp_all_export_write_article($article, $element_name, apply_filters('pmxe_comment_parent', pmxe_filter($comment->comment_parent, $fieldSnipped), $comment->comment_ID));
|
|
break;
|
|
case 'user_id':
|
|
wp_all_export_write_article($article, $element_name, apply_filters('pmxe_user_id', pmxe_filter($comment->user_id, $fieldSnipped), $comment->comment_ID));
|
|
break;
|
|
case 'cf':
|
|
if (!empty($fieldValue)) {
|
|
$cur_meta_values = get_comment_meta($comment->comment_ID, $fieldValue);
|
|
if (!empty($cur_meta_values) and is_array($cur_meta_values)) {
|
|
$val = "";
|
|
foreach ($cur_meta_values as $key => $cur_meta_value) {
|
|
if (empty($val)) {
|
|
$val = apply_filters('pmxe_custom_field', pmxe_filter(maybe_serialize($cur_meta_value), $fieldSnipped), $fieldValue, $comment->comment_ID);
|
|
} else {
|
|
$val = apply_filters('pmxe_custom_field', pmxe_filter($val . $implode_delimiter . maybe_serialize($cur_meta_value), $fieldSnipped), $fieldValue, $comment->comment_ID);
|
|
}
|
|
}
|
|
wp_all_export_write_article($article, $element_name, $val);
|
|
}
|
|
|
|
if (empty($cur_meta_values)) {
|
|
if (empty($article[$element_name])) {
|
|
wp_all_export_write_article($article, $element_name, apply_filters('pmxe_custom_field', pmxe_filter('', $fieldSnipped), $fieldValue, $comment->comment_ID));
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case 'sql':
|
|
if (!empty($fieldSql)) {
|
|
global $wpdb;
|
|
$val = $wpdb->get_var($wpdb->prepare(stripcslashes(str_replace("%%ID%%", "%d", $fieldSql)), $comment->comment_ID));
|
|
if (!empty($fieldPhp) and !empty($fieldCode)) {
|
|
// if shortcode defined
|
|
if (strpos($fieldCode, '[') === 0) {
|
|
$val = do_shortcode(str_replace("%%VALUE%%", $val, $fieldCode));
|
|
} else {
|
|
$val = eval('return ' . stripcslashes(str_replace("%%VALUE%%", $val, $fieldCode)) . ';');
|
|
}
|
|
}
|
|
wp_all_export_write_article($article, $element_name, apply_filters('pmxe_sql_field', $val, $element_name, $comment->comment_ID));
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
|
|
}
|
|
|
|
if ($is_xml_export and isset($article[$element_name])) {
|
|
$element_name_in_file = XmlCsvExport::_get_valid_header_name($element_name);
|
|
|
|
$xmlWriter = apply_filters('wp_all_export_add_before_element', $xmlWriter, $element_name_in_file, XmlExportEngine::$exportID, $comment->comment_ID);
|
|
|
|
$xmlWriter->beginElement($element_name_ns, $element_name_in_file, null);
|
|
$xmlWriter->writeData($article[$element_name], $element_name_in_file);
|
|
$xmlWriter->closeElement();
|
|
|
|
$xmlWriter = apply_filters('wp_all_export_add_after_element', $xmlWriter, $element_name_in_file, XmlExportEngine::$exportID, $comment->comment_ID);
|
|
}
|
|
}
|
|
return $article;
|
|
}
|
|
|
|
/**
|
|
* __get function.
|
|
*
|
|
* @access public
|
|
* @param mixed $key
|
|
* @return mixed
|
|
*/
|
|
public function __get($key)
|
|
{
|
|
return $this->get($key);
|
|
}
|
|
|
|
/**
|
|
* Get a session variable
|
|
*
|
|
* @param string $key
|
|
* @param mixed $default used if the session variable isn't set
|
|
* @return mixed value of session variable
|
|
*/
|
|
public function get($key, $default = null)
|
|
{
|
|
return isset($this->{$key}) ? $this->{$key} : $default;
|
|
}
|
|
}
|
|
} |