Статистические данные - Cron/Queue API + Batch Operation

Cron и Batch API для ведения статистической информации.

Batch API
Hook Cron
Queue API

<?php
/** 
 *  Implements hook_cron(). 
 */ 
function project_plans_cron() {
  $interval = variable_get('project_plans_cron_interval', 60 * 60 * 24 * 14); 
  if (time() >= variable_get('project_plans_cron_next_ex', 0)) { 
    $projects = project_api_projects_list();
    $queue = DrupalQueue::get('update_project_staff_info');
    foreach ($projects as $project_nid) {
      $result = project_api_project_i($project_nid);
      $queue->createItem($result[$project_nid]); 
    } 
    variable_set('project_plans_cron_next_ex', time() + $interval); 
  } 
}
/** 
 * Implements hook_cron_queue_info(). 
 */
function project_plans_cron_queue_info() {
  $queues['update_project_staff_info'] = array( 'worker callback' => 'update_project_staff_info', 'time' => 120, ); 
  return $queues; 
}
function update_project_staff_info($project_info) {
  $node = node_load($project_info->nid);
  $node->project_m_plan[LANGUAGE_NONE][0]['value'] = $project_info->PLAN; $node->project_m_fact[LANGUAGE_NONE][0]['value'] = $project_info->FACT;
  $node->project_m_route[LANGUAGE_NONE][0]['value'] = $project_info->ROUTE;
  // Make this change a new revision 
  $node->revision = 1;
  $node->log = t('This node :node was programmatically updated at :date by project_plans module. Staff fact number - :fact. Staff plan number - :plan. Roate of staff - :route', array( ':node' => $project_info->nid, ':date' => date('c'), ':plan' => $project_info->PLAN, ':fact' => $project_info->FACT, ':route' => $project_info->ROUTE, ));
  node_save($node);
  watchdog('content', '@type: for %title node(:nid) was created a new revision.', array('@type' => $node->type, ':nid' => $node->nid, '%title' => $node->title)); 
}
?>
Cron API Batch API
comments powered by Disqus