代碼上來,作用是對一些數據進行按多條件GroupBy後進行歸檔和生成關聯ID:
是對Drupal explam 中Batch 的第一個案例應用。
<?php
/**
* @file
* Defines "一個布匹上傳完成後的歸檔規則"
*
* @TODO: Split admin functions into their own file.
*/
function fabric_archive_menu(){
$items['warehouse/showbase']=array(
'title'=>'Fabric Base Archives',
'description'=>'顯示最近上傳未歸檔記錄',
'page callback'=>'drupal_get_form',
'page arguments'=>array('fabric_base_archive_form'),
//頁面回調的function
'access arguments'=>array('Fabric Base'),
//頁面調用的用戶權限
'access callback'=>TRUE,
//'weight'=>'5',
//'file' => 'sample_barcode.inc',
);
return $items;
}
function fabric_base_archive_form($form, &$form_state){
$form=array();
$form['fabric']=array(
'#type' => 'fieldset',
'#title' => t('Fabric Record Archive'),
);
$form['fabric']['description']=array(
'#type'=>'markup',
'#markup' => '<p>' . t('Click the button below to begin.') . '</p>',
);
$form['fabric']['submit']= array(
'#type' => 'submit',
'#value' => t('Archive'),
);
$options=fabric_base_archive_mygetviews('fabric_base','block_2');
$nid=(count($options));
if (empty($nid)){
drupal_set_message(t('You do not currently have any Fabric data,As a result, this form is disabled'));
$form['fabric']['submit']['#disabled']=TRUE;
}
return $form;
}
function fabric_base_archive_form_submit($form, &$form_state){
$options=fabric_base_archive_mygetviews('fabric_base','block_2');
$num_operations=(count($options));
$_SESSION['http_request_count'] = 0;
drupal_set_message(t('Created Warehous Table @num Record ',array('@num'=>$num_operations)));
$i=1;
foreach($options as $row){
//dpm($row);
$operations[]=array(
'fabric_base_archive_op',
array(
$row,
t('(Operation @operation)',array('@operation'=>$i)),
),
);
$i++;
}
$batch=array(
'operations'=>$operations,
'finished'=>'fabric_base_archive_finished',
);
batch_set($batch);
}
function fabric_base_archive_op($row,$operation_details,&$context){
$node=fabric_base_warehouse_save($row);
$returndate=$row->field_field_warehousereturndate[0]['raw']['value'];
$contract=$row->field_field_warehousecontract[0]['raw']['value'];
$mercery=$row->field_field_warehousemercery[0]['raw']['value'];
$styleno=$row->field_field_warehousestyleno[0]['raw']['value'];
$cylinder=$row->field_field_warehousecylinder[0]['raw']['value'];
$orderno=$row->field_field_warehouseorderno[0]['raw']['value'];
$storageno=$row->field_field_warehousestorageno[0]['raw']['value'];
$colour=$row->field_field_warehousecolour[0]['raw']['value'];
$query=db_select('node','n' );
$query->join('field_data_field_tracerttag','ftag','ftag.entity_id=n.nid');
$query->leftjoin('field_data_field_warehousereturndate','fdate','fdate.entity_id=n.nid');
$query->leftjoin('field_data_field_warehousecontract','fcon','fcon.entity_id=n.nid');
$query->leftjoin('field_data_field_warehousemercery','fmerc','fmerc.entity_id=n.nid');
$query->leftjoin('field_data_field_warehousestyleno','fsty','fsty.entity_id=n.nid');
$query->leftjoin('field_data_field_warehousecylinder','fcyl','fcyl.entity_id=n.nid');
$query->leftjoin('field_data_field_warehouseorderno','forder','forder.entity_id=n.nid');
$query->leftjoin('field_data_field_warehousestorageno','fsto','fsto.entity_id=n.nid');
$query->leftjoin('field_data_field_warehousecolour','fcolo','fcolo.entity_id=n.nid');
$query->fields('n',array('nid','title'));
$query->fields('fdate',array('field_warehousereturndate_value'));
$query->fields('fcon',array('field_warehousecontract_value'));
$query->fields('fmerc',array('field_warehousemercery_value'));
$query->fields('fsty',array('field_warehousestyleno_value'));
$query->fields('fcyl',array('field_warehousecylinder_value'));
$query->fields('forder',array('field_warehouseorderno_value'));
$query->fields('fsto',array('field_warehousestorageno_value'));
$query->fields('fcolo',array('field_warehousecolour_value'));
$query->condition('n.status','1','=');
$query->condition('n.type','fabricbase','=');
$query->condition('ftag.field_tracerttag_value','0','=');
$query->condition('fdate.field_warehousereturndate_value',db_like($returndate),'LIKE');
$query->condition('fcon.field_warehousecontract_value',db_like($contract),'LIKE');
$query->condition('fmerc.field_warehousemercery_value',db_like($mercery),'LIKE');
$query->condition('fsty.field_warehousestyleno_value',db_like($styleno),'LIKE');
$query->condition('fcyl.field_warehousecylinder_value',db_like($cylinder),'LIKE');
$query->condition('forder.field_warehouseorderno_value',db_like($orderno),'LIKE');
$query->condition('fsto.field_warehousestorageno_value',db_like($storageno),'LIKE');
$query->condition('fcolo.field_warehousecolour_value',db_like($colour),'LIKE');
$query->orderBy('n.created','DESC');
$result=$query->execute();
$i=1;
foreach ($result as $value){
$barcode=fabric_base_barcode_save($value,$node->nid,$i);
$node->field_samplegroup['und'][$i-1]['first']=$barcode;
$node->field_samplegroup['und'][$i-1]['second']='1';
$i++;
}
node_save($node);
$context['results'][] = $node->nid ;
// Optional message displayed under the progressbar.
$context['message'] = t('Create Warehous Table "@title"', array('@title' => $node->nid)) . ' ' . $operation_details;
_fabric_base_archive_update_http_requests();
}
function fabric_base_archive_finished($success, $results, $operations) {
if ($success) {
drupal_set_message(t('@count results processed in @requests HTTP requests.', array('@count' => count($results), '@requests' => _fabric_base_archive_get_http_requests())));
drupal_set_message(t('The final result was "%final"', array('%final' => end($results))));
}
else {
$error_operation = reset($operations);
drupal_set_message(
t('An error occurred while processing @operation with arguments : @args',
array(
'@operation' => $error_operation[0],
'@args' => print_r($error_operation[0], TRUE),
)
),
'error'
);
}
}
function fabric_base_archive_mygetviews($viewsname,$displayname){
$views=views_get_view($viewsname);
$views->preview($displayname);
$result=$views->result;
return $result;
}
function fabric_base_warehouse_save($key){
Global $user;
$node= new stdClass();
$node->type="warehouse_table";
node_object_prepare($node); // Sets some defaults. Invokes hook_prepare() and hook_node_prepare().
$node->uid=$user->uid;
$node->changed=$node->created=time();
$node->sticky=0;
$node->status=1;
$node->language='und';
$node->field_warehousefactory['und'][0]['tid']=$key->field_field_localtion[0]['raw']['tid'];
$node->field_warehousesupple['und'][0]['value']=$key->field_field_warehousesupple[0]['raw']['value'];
$node->field_warehousebrand['und'][0]['tid']=$key->field_field_brand[0]['raw']['tid'];
$node->field_warehousestorageno['und'][0]['value']=$key->field_field_warehousestorageno[0]['raw']['value'];
$node->field_warehouseorderno['und'][0]['value']=$key->field_field_warehouseorderno[0]['raw']['value'];
$node->field_warehousemercery['und'][0]['value']=$key->field_field_warehousemercery [0]['raw']['value'];
$node->field_warehousecolour['und'][0]['value']=$key->field_field_warehousecolour [0]['raw']['value'];
$node->field_warehousecylinder['und'][0]['value']=$key->field_field_warehousecylinder[0]['raw']['value'];
$node->field_warehousecontract['und'][0]['value']=$key->field_field_warehousecontract[0]['raw']['value'];
$node->field_warehousestyleno['und'][0]['value']=$key->field_field_warehousestyleno[0]['raw']['value'];
$node->field_warehousedescription['und'][0]['value']=$key->field_field_warehousedescription[0]['raw']['value'];
$node->field_warehouseequalnumber['und'][0]['value']=$key->nid_1;
$node->field_warehouseyardage['und'][0]['value']=$key->field_field_warehouseyardage[0]['raw']['value'];
$node->field_warehousereturndate['und'][0]['value']=$key->field_field_warehousereturndate[0]['raw']['value'];
$node=node_submit($node);
node_save($node);
$node->title=$node->nid;
node_save($node);
return $node;
}
function fabric_base_barcode_save($key,$warehouseid,$i){
$node=node_load($key->nid);
$node->title="B".sprintf("%08d",(int)$warehouseid).sprintf("%03d",$i);
$node->field_tracerttag['und'][0]['value']='1';
$node->field_warehousereference['und'][0]['target_id']=$warehouseid;
node_save($node);
return $node->title;
}
function fabric_base_node_insert($node){
switch($node->type){
case 'warehouse_table':
db_update('node')
->fields(array('title'=>$node->nid,))
->condition('nid',$node->nid,'=')
->execute();
break;
default:break;
}
}
/**
* Utility function to increment HTTP requests in a session variable.
*/
function _fabric_base_archive_update_http_requests() {
$_SESSION['http_request_count']++;
}
/**
* Utility function to count the HTTP requests in a session variable.
*
* @return int
* Number of requests.
*/
function _fabric_base_archive_get_http_requests() {
return !empty($_SESSION['http_request_count']) ? $_SESSION['http_request_count'] : 0;
}
/**
* @} End of "defgroup batch_example".
*/