function delete_duplicate_messages($store, $entryid) { global $total_deleted; $folder = mapi_msgstore_openentry($store, $entryid); if (!$folder) { print "Unable to open folder."; return false; } $table = mapi_folder_getcontentstable($folder); if (!$table) { print "Unable to open table."; return false; } $org_hash = null; $dup_messages = array(); $dup_count = 0; $result = mapi_table_sort($table, array(PR_SUBJECT => TABLE_SORT_ASCEND)); if ($result == false) { die("Could not sort table\n"); } while (1) { // query messages from folders content table $rows = mapi_table_queryrows($table, array(PR_MESSAGE_SIZE, PR_CLIENT_SUBMIT_TIME, PR_BODY, PR_HTML, PR_ENTRYID, PR_SUBJECT), 0, 50); if (count($rows) == 0) { break; } // we got the messages foreach ($rows as $row) { // hash message body (plaintext + html + subject) $md5_subject = md5($row[PR_SUBJECT]); $md5_body = md5($row[PR_BODY]); $md5_html = md5($row[PR_HTML]); // concat hashes, just in case there are messages with // no HTML or plaintext content. $cur_hash = $md5_body . $md5_html . $md5_subject; // when we have accumulated enough messages, perform a burst delete if ($dup_count == 50) { echo " [i] Deleting {$dup_count} duplicates..."; delete_messages($folder, $dup_messages); // reset the delete-queue $dup_messages = array(); $dup_count = 0; $total_deleted += 100; echo "done.\n"; echo "Deleted {$total_deleted} messages so far.\n\n"; } // duplicate messages are adjacent, so we push the first message with // a distinct hash and mark all following messages with this hash // for deletion. if ($org_hash != $cur_hash) { $org_hash = $cur_hash; } else { $dup_messages[] = $row[PR_ENTRYID]; $dup_count++; echo " [i] For {$org_hash} adding DUP {$md5_eid} to delete list\n"; } } } // final cleanup $dup_count = count($dup_messages); if ($dup_count) { $total_deleted += $dup_count; echo " [i] Finally deleting {$dup_count} duplicates. \n"; delete_messages($folder, $dup_messages); $dup_messages = array(); echo "Deleted {$total_deleted} messages so far.\n\n"; } }
$limit = 25; $offset = ($page - 1) * $limit; $delete = in('delete'); $message_sent_to = null; // Sending mail section. if ($message && $messenger) { if ($to_clan && $has_clan) { $message_sent_to = message_to_clan($message); } elseif (!!$target_id) { send_message($user_id, $target_id, $message); $message_sent_to = $to; // ( } } if ($delete) { delete_messages(); } $messages = get_messages($user_id, $limit, $offset); $message_count = message_count(); $pages = ceil($message_count / $limit); // Total pages. //$current_page = floor(($message_count/$limit) - $limit); // $nav = render_message_nav($page, $pages, $limit); read_messages($user_id); // mark messages as read for next viewing. // TODO: Handle "send" and "deletion"; $message_list = ''; if (!empty($messages)) { foreach ($messages as $loop_message) { $loop_message['message'] = out($loop_message['message']); $message_list .= render_template('single_message.tpl', array('message' => $loop_message));
} } if (count($del) > 0) { $SQL = "Delete from " . $PHORUM['ForumTableName'] . "_attachments where id in (" . implode(",", $del) . ")"; $q->query($DB, $SQL); } } $sSQL = "Update {$ForumTableName} set author='{$author}', email='{$email}', subject='{$subject}' where id={$id}"; $q->query($DB, $sSQL); $sSQL = "Update " . $PHORUM['ForumTableName'] . "_bodies set body='{$body}' where id={$id}"; $q->query($DB, $sSQL); header("Location: {$read_page}.{$ext}?f={$num}&i={$i}&t={$t}{$GetVars}"); exit; case "delete": include "{$include_path}/delete_message.php"; delete_messages($i); if ($i == $t) { header("Location: {$list_page}.{$ext}?f={$num}{$GetVars}"); } else { header("Location: {$read_page}.{$ext}?f={$num}&i={$t}&t={$t}{$GetVars}"); } exit; break; } if (!empty($i)) { $sSQL = "Select author, email, subject, body from " . $PHORUM['ForumTableName'] . " as t, " . $PHORUM['ForumTableName'] . "_bodies as b where t.id=b.id and t.id={$i}"; $q->query($DB, $sSQL); $mtext = $q->getrow(); if (substr($mtext["body"], 0, 6) == "<HTML>") { $mtext["body"] = ereg_replace("</*HTML>", "", $mtext["body"]); $html = 1;
<?php if (!defined("_COMMON_PHP")) { return; } require "{$include_path}/delete_message.php"; delete_messages($id); QueMessage("Message(s) {$id} and all children were deleted!<br />");
public function delete_messages($checked_messages) { $this->open_stream(); delete_messages($checked_messages); }