30 March 2014 14:37
Cron и Batch 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));
}
?>