/** * Executes comments changes made in HiveQueen 0.0.1. * * @since 0.0.1 * * @global int $hq_current_db_version Current version. * @global hqdb $hqdb HiveQueen database abstraction object. */ function upgrade_430_fix_comments() { global $hq_current_db_version, $hqdb; $content_length = $hqdb->get_col_length($hqdb->comments, 'comment_content'); if (is_hq_error($content_length)) { return; } if (false === $content_length) { $content_length = array('type' => 'byte', 'length' => 65535); } elseif (!is_array($content_length)) { $length = (int) $content_length > 0 ? (int) $content_length : 65535; $content_length = array('type' => 'byte', 'length' => $length); } if ('byte' !== $content_length['type'] || 0 === $content_length['length']) { // Sites with malformed DB schemas are on their own. return; } $allowed_length = intval($content_length['length']) - 10; $comments = $hqdb->get_results("SELECT `comment_ID` FROM `{$hqdb->comments}`\n\t\t\tWHERE `comment_date_gmt` > '2015-04-26'\n\t\t\tAND LENGTH( `comment_content` ) >= {$allowed_length}\n\t\t\tAND ( `comment_content` LIKE '%<%' OR `comment_content` LIKE '%>%' )"); foreach ($comments as $comment) { hq_delete_comment($comment->comment_ID, true); } }
/** * Moves a comment to the Trash * * If trash is disabled, comment is permanently deleted. * * @since 0.0.1 * * @param int $comment_id Comment ID. * @return bool True on success, false on failure. */ function hq_trash_comment($comment_id) { if (!EMPTY_TRASH_DAYS) { return hq_delete_comment($comment_id, true); } if (!($comment = get_comment($comment_id))) { return false; } /** * Fires immediately before a comment is sent to the Trash. * * @since 0.0.1 * * @param int $comment_id The comment ID. */ do_action('trash_comment', $comment_id); if (hq_set_comment_status($comment_id, 'trash')) { add_comment_meta($comment_id, '_hq_trash_meta_status', $comment->comment_approved); add_comment_meta($comment_id, '_hq_trash_meta_time', time()); /** * Fires immediately after a comment is sent to Trash. * * @since 0.0.1 * * @param int $comment_id The comment ID. */ do_action('trashed_comment', $comment_id); return true; } return false; }
/** * Trash or delete an attachment. * * When an attachment is permanently deleted, the file will also be removed. * Deletion removes all post meta fields, taxonomy, comments, etc. associated * with the attachment (except the main post). * * The attachment is moved to the trash instead of permanently deleted unless trash * for media is disabled, item is already in the trash, or $force_delete is true. * * @since 0.0.1 * * @global hqdb $hqdb HiveQueen database abstraction object. * * @param int $post_id Attachment ID. * @param bool $force_delete Optional. Whether to bypass trash and force deletion. * Default false. * @return mixed False on failure. Post data on success. */ function hq_delete_attachment($post_id, $force_delete = false) { global $hqdb; if (!($post = $hqdb->get_row($hqdb->prepare("SELECT * FROM {$hqdb->posts} WHERE ID = %d", $post_id)))) { return $post; } if ('attachment' != $post->post_type) { return false; } if (!$force_delete && EMPTY_TRASH_DAYS && MEDIA_TRASH && 'trash' != $post->post_status) { return hq_trash_post($post_id); } delete_post_meta($post_id, '_hq_trash_meta_status'); delete_post_meta($post_id, '_hq_trash_meta_time'); $meta = hq_get_attachment_metadata($post_id); $backup_sizes = get_post_meta($post->ID, '_hq_attachment_backup_sizes', true); $file = get_attached_file($post_id); if (is_multisite()) { delete_transient('dirsize_cache'); } /** * Fires before an attachment is deleted, at the start of hq_delete_attachment(). * * @since 0.0.1 * * @param int $post_id Attachment ID. */ do_action('delete_attachment', $post_id); hq_delete_object_term_relationships($post_id, array('category', 'post_tag')); hq_delete_object_term_relationships($post_id, get_object_taxonomies($post->post_type)); // Delete all for any posts. delete_metadata('post', null, '_thumbnail_id', $post_id, true); $comment_ids = $hqdb->get_col($hqdb->prepare("SELECT comment_ID FROM {$hqdb->comments} WHERE comment_post_ID = %d", $post_id)); foreach ($comment_ids as $comment_id) { hq_delete_comment($comment_id, true); } $post_meta_ids = $hqdb->get_col($hqdb->prepare("SELECT meta_id FROM {$hqdb->postmeta} WHERE post_id = %d ", $post_id)); foreach ($post_meta_ids as $mid) { delete_metadata_by_mid('post', $mid); } /** This action is documented in hq-includes/post.php */ do_action('delete_post', $post_id); $result = $hqdb->delete($hqdb->posts, array('ID' => $post_id)); if (!$result) { return false; } /** This action is documented in hq-includes/post.php */ do_action('deleted_post', $post_id); $uploadpath = hq_upload_dir(); if (!empty($meta['thumb'])) { // Don't delete the thumb if another attachment uses it. if (!$hqdb->get_row($hqdb->prepare("SELECT meta_id FROM {$hqdb->postmeta} WHERE meta_key = '_hq_attachment_metadata' AND meta_value LIKE %s AND post_id <> %d", '%' . $hqdb->esc_like($meta['thumb']) . '%', $post_id))) { $thumbfile = str_replace(basename($file), $meta['thumb'], $file); /** This filter is documented in hq-includes/functions.php */ $thumbfile = apply_filters('hq_delete_file', $thumbfile); @unlink(path_join($uploadpath['basedir'], $thumbfile)); } } // Remove intermediate and backup images if there are any. if (isset($meta['sizes']) && is_array($meta['sizes'])) { foreach ($meta['sizes'] as $size => $sizeinfo) { $intermediate_file = str_replace(basename($file), $sizeinfo['file'], $file); /** This filter is documented in hq-includes/functions.php */ $intermediate_file = apply_filters('hq_delete_file', $intermediate_file); @unlink(path_join($uploadpath['basedir'], $intermediate_file)); } } if (is_array($backup_sizes)) { foreach ($backup_sizes as $size) { $del_file = path_join(dirname($meta['file']), $size['file']); /** This filter is documented in hq-includes/functions.php */ $del_file = apply_filters('hq_delete_file', $del_file); @unlink(path_join($uploadpath['basedir'], $del_file)); } } hq_delete_file($file); clean_post_cache($post); return $post; }