Current File : /data/web/virtuals/215191/virtual/www/domains/starwars.cz/sites/all/modules/ip/ip.drush.inc |
<?php
/*
* @file
* Drush commands.
*/
/**
* Implements hook_drush_command().
*/
function ip_drush_command() {
$items['ip-backlog-comments'] = array(
'description' => 'Insert comments IP address data loaded prior to module instalation in IP Post table taken from comments table.',
'aliases' => array('ip-bc'),
'options' => array(
'size' => array(
'description' => 'The number of entities to process in a single batch request.',
'example-value' => '500',
),
),
);
$items['ip-backlog-nodes'] = array(
'description' => 'Insert nodes IP address data loaded prior to module instalation in IP Post table from taken watchdog table (dblog).',
'aliases' => array('ip-bn'),
'options' => array(
'size' => array(
'description' => 'The number of entities to process in a single batch request.',
'example-value' => '500',
),
),
);
return $items;
}
/**
* Drush command: ip backlog comments.
*/
function drush_ip_backlog_comments() {
$batch_size = drush_get_option('size', 500);
$list = _drush_ip_backlog_comments_list();
$chunks = array_chunk($list, $batch_size);
$total = count($list);
$progress = 0;
$operations = array();
foreach ($chunks as $chunk) {
$progress += count($chunk);
$operations[] = array('_drush_ip_backlog_comments_process_batch', array(
$chunk,
dt('@percent% (Processing @progress of @total)', array(
'@percent' => round(100 * $progress / $total),
'@progress' => $progress,
'@total' => $total,
))),
);
}
$batch = array(
'operations' => $operations,
'title' => dt('IP backlog comments process batch'),
'finished' => '_drush_ip_backlog_comments_process_batch_finished',
'progress_message' => dt('@current entities of @total were processed.'),
);
// Get the batch process all ready!
batch_set($batch);
// Start processing the batch operations.
drush_backend_batch_process();
}
/**
* Get comments list (not int ip_posts).
*/
function _drush_ip_backlog_comments_list() {
$list = array();
if (module_exists('comment')) {
$list = db_query(
"SELECT c.cid AS cid, c.hostname AS hostname" .
" FROM {comment} c" .
" LEFT JOIN {ip_posts} i" .
" ON i.type = 'comment'" .
" AND (c.cid = i.id OR i.id IS NULL)" .
" WHERE i.id IS NULL" .
" ORDER BY c.cid DESC"
)->fetchAll();
}
return $list;
}
/**
* Batch process: backlog comments.
*/
function _drush_ip_backlog_comments_process_batch($chunk, $details, &$context) {
$context['message'] = $details;
// Make sure to only initialize the results the first time.
if (!isset($context['results']['success'])) {
$context['results']['success'] = $context['results']['error'] = 0;
}
foreach ($chunk as $item) {
$success = _drush_ip_backlog_comments_process_batch_task($item);
$success ? $context['results']['success']++ : $context['results']['error']++;
}
}
/**
* Batch process task: backlog comments.
*/
function _drush_ip_backlog_comments_process_batch_task($item) {
$success = TRUE;
if (!ip_posts_load('comment', $item->cid)) {
try {
ip_posts_insert('comment', $item->cid, $item->hostname);
}
catch (PDOException $e) {
$success = FALSE;
}
}
return $success;
}
/**
* Batch process finished: backlog comments.
*/
function _drush_ip_backlog_comments_process_batch_finished($success, $results, $operations) {
if ($success) {
// Let the user know we have finished.
drush_log(dt('@succeeded comments were processed correctly. @errored comments failed.', array(
'@succeeded' => empty($results['success']) ? 0 : $results['success'],
'@errored' => empty($results['error']) ? 0 : $results['error'],
)), 'ok');
}
}
/**
* Drush command: ip backlog comments.
*/
function drush_ip_backlog_nodes() {
$batch_size = drush_get_option('size', 500);
$list = _drush_ip_backlog_nodes_list();
$chunks = array_chunk($list, $batch_size);
$total = count($list);
$progress = 0;
$operations = array();
foreach ($chunks as $chunk) {
$progress += count($chunk);
$operations[] = array('_drush_ip_backlog_nodes_process_batch', array(
$chunk,
dt('@percent% (Processing @progress of @total)', array(
'@percent' => round(100 * $progress / $total),
'@progress' => $progress,
'@total' => $total,
))),
);
}
$batch = array(
'operations' => $operations,
'title' => dt('IP backlog nodes process batch'),
'finished' => '_drush_ip_backlog_nodes_process_batch_finished',
'progress_message' => dt('@current entities of @total were processed.'),
);
// Get the batch process all ready!
batch_set($batch);
// Start processing the batch operations.
drush_backend_batch_process();
}
/**
* Get watchdog (node added) list.
*/
function _drush_ip_backlog_nodes_list() {
$list = array();
if (module_exists('dblog')) {
$list = db_query(
"SELECT wid, hostname, link" .
" FROM {watchdog}" .
" WHERE type = 'content'" .
" AND message = :msg",
array(
':msg' => '@type: added %title.',
)
)->fetchAll();
}
return $list;
}
/**
* Batch process: backlog nodes.
*/
function _drush_ip_backlog_nodes_process_batch($chunk, $details, &$context) {
$context['message'] = $details;
// Make sure to only initialize the results the first time.
if (!isset($context['results']['success'])) {
$context['results']['success'] = $context['results']['error'] = 0;
}
foreach ($chunk as $item) {
$success = _drush_ip_backlog_nodes_process_batch_task($item);
$success ? $context['results']['success']++ : $context['results']['error']++;
}
}
/**
* Batch process task: backlog nodes.
*/
function _drush_ip_backlog_nodes_process_batch_task($item) {
$success = TRUE;
$nid = str_replace(array('<a href="' . base_path() . 'node/', '">view</a>'), array('', ''), $item->link);
// Check if node still exists.
$node = db_query('SELECT * FROM {node} WHERE nid = :nid', array(':nid' => $nid))->fetch();
if (!empty($node) && !ip_posts_load('node', $nid)) {
try {
ip_posts_insert('node', $nid, $item->hostname);
}
catch (PDOException $e) {
$success = FALSE;
}
}
return $success;
}
/**
* Batch process finished: backlog nodes.
*/
function _drush_ip_backlog_nodes_process_batch_finished($success, $results, $operations) {
if ($success) {
// Let the user know we have finished.
drush_log(dt('@succeeded nodes were processed correctly. @errored nodes failed.', array(
'@succeeded' => empty($results['success']) ? 0 : $results['success'],
'@errored' => empty($results['error']) ? 0 : $results['error'],
)), 'ok');
}
}