2014-03-01 25 views
0

尋找一些幫助。我想從Drupal表單傳遞組ID以及所有其他zendesk票據信息。我已經嘗試了一切,無法讓組ID工作。其他一切正在工作。這是我目前有:Drupal Zendesk API表格

function zendesk_forms_support_form() { 
    $form['name'] = array(
    '#type' => 'textfield', 
    '#title' => t('Your name'), 
    '#required' => TRUE, 
); 
    $form['group_id'] = array(
    '#title' => t('Group ID'), 
    '#type' => 'textfield', 
); 
    $form['requester'] = array(
    '#type' => 'textfield', 
    '#title' => t('Your e-mail address'), 
    '#required' => TRUE, 
); 
    $form['subject'] = array(
    '#type' => 'textfield', 
    '#title' => t('Subject'), 
); 
    $form['description'] = array(
    '#type' => 'textarea', 
    '#title' => t('Message'), 
    '#required' => TRUE, 
); 
    $form['submit'] = array(
    '#type' => 'submit', 
    '#value' => t('Send'), 
); 
    $form['#attributes'] = array('class' => 'zendesk-support-form'); 
    return $form; 
} 

function zendesk_forms_support_form_submit($form, &$form_state) { 
    $ticket = array(
    'description' => $form_state['values']['description'], 
    'requester' => array(
     'name' => $form_state['values']['name'], 
     'email' => $form_state['values']['requester'], 
     'group_id' => $form_state['values']['group_id'], 
    ), 
); 
    if (!empty($form_state['values']['subject'])) { 
    $ticket['subject'] = $form_state['values']['subject']; 
    } 

,這是一大堆!

<?php 
/** 
* @file 
* Main file for the Zendesk Forms module. 
*/ 

/** 
* Implements hook_menu(). 
*/ 
function zendesk_forms_menu() { 
    $items = array(); 
    $items['admin/config/services/zendesk-form'] = array(
    'title' => 'Zendesk forms', 
    'description' => 'Configure Zendesk forms.', 
    'access arguments' => array('administer zendesk form'), 
    'page callback' => 'drupal_get_form', 
    'page arguments' => array('zendesk_forms_settings_form'), 
    'file' => 'zendesk_forms.admin.inc', 
    'file path' => drupal_get_path('module', 'zendesk_forms'), 
); 
    return $items; 
} 

/** 
* Implements hook_permission(). 
*/ 
function zendesk_forms_permission() { 
    return array(
    'administer zendesk form' => array(
     'title' => t('Administer Zendesk Form'), 
    ), 
); 
} 

/** 
* Implements hook_block_info(). 
*/ 
function zendesk_forms_block_info() { 
    $blocks = array(); 
    $blocks['zendesk_support_form'] = array(
    'info' => t('Zendesk support form'), 
    'cache' => DRUPAL_CACHE_GLOBAL, 
); 
    return $blocks; 
} 

/** 
* Implements hook_block_view(). 
*/ 
function zendesk_forms_block_view($delta = '') { 
    $block = array(); 
    switch ($delta) { 
    case 'zendesk_support_form': 
     $block['subject'] = t('Support'); 
     $block['content'] = drupal_get_form('zendesk_forms_support_form'); 
     break; 
    } 
    return $block; 
} 

/** 
* Form to create a ticket with Zendesk. 
* 
* @ingroup forms 
*/ 
function zendesk_forms_support_form() { 
    $form['name'] = array(
    '#type' => 'textfield', 
    '#title' => t('Your name'), 
    '#required' => TRUE, 
); 
    $form['group_id'] = array(
    '#title' => t('Group ID'), 
    '#type' => 'textfield', 
); 
    $form['requester'] = array(
    '#type' => 'textfield', 
    '#title' => t('Your e-mail address'), 
    '#required' => TRUE, 
); 
    $form['subject'] = array(
    '#type' => 'textfield', 
    '#title' => t('Subject'), 
); 
    $form['description'] = array(
    '#type' => 'textarea', 
    '#title' => t('Message'), 
    '#required' => TRUE, 
); 
    $form['submit'] = array(
    '#type' => 'submit', 
    '#value' => t('Send'), 
); 
    $form['#attributes'] = array('class' => 'zendesk-support-form'); 
    return $form; 
} 

/** 
* Validate the create ticket form. 
* 
* @ingroup forms 
*/ 
function zendesk_forms_support_form_validate($form, &$form_state) { 
    if (!valid_email_address($form_state['values']['requester'])) { 
    form_set_error('requester', t('Supplied email is not valid')); 
    } 
} 

/** 
* Submit handler for the create ticket form. 
* 
* @ingroup forms 
*/ 
function zendesk_forms_support_form_submit($form, &$form_state) { 
    $ticket = array(
    'description' => $form_state['values']['description'], 
    'requester' => array(
     'name' => $form_state['values']['name'], 
     'email' => $form_state['values']['requester'], 
     'group_id' => $form_state['values']['group_id'], 
    ), 
); 
    if (!empty($form_state['values']['subject'])) { 
    $ticket['subject'] = $form_state['values']['subject']; 
    } 
    // Get extra fields that are prefixed with zendesk_. Right now the only way 
    // to add extra fields is by using form alter though. 
    $extra_fields = array_filter(array_keys($form_state['values']), create_function('$item', 'return strpos($item, "zendesk_") === 0;')); 
    if (!empty($extra_fields)) { 
    foreach ($extra_fields as $field_name) { 
     $ticket[substr($field_name, 8)] = $form_state['values'][$field_name]; 
    } 
    } 
    // Wrap the ticket array in yet another array and call the API. 
    $response = zendesk_forms_api_call(array('ticket' => $ticket), 'tickets.json'); 
    if (!isset($response->error)) { 
    drupal_set_message(t('Your message has been sent')); 
    } 
    else { 
    drupal_set_message(t('An error happened while sending the message.'), 'error'); 
    } 
} 

/** 
* Performs a call to the Zendesk API with the given data. 
* 
* @param array $data 
* The data to be sent to the API endpoint. 
* @param string $command 
* The command to call at the endpoint. Will be a filename like "tickets.json" 
* or similar. 
* See http://developer.zendesk.com/documentation/rest_api/tickets.html and 
* https://support.zendesk.com/entries/21562288-Creating-a-Custom-HTML-Form-for-Ticket-Submission 
* 
* @return string 
* The json response string. 
*/ 
function zendesk_forms_api_call($data, $command) { 
    $json = json_encode($data); 
    $zendesk_key = variable_get('zendesk_forms_api_key', ''); 
    $zendesk_url = variable_get('zendesk_forms_url', ''); 
    $zendesk_user = variable_get('zendesk_forms_user_name', ''); 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); 
    curl_setopt($ch, CURLOPT_MAXREDIRS, 10); 
    curl_setopt($ch, CURLOPT_URL, $zendesk_url . '/api/v2/' . $command); 
    curl_setopt($ch, CURLOPT_USERPWD, "$zendesk_user/token:$zendesk_key"); 
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json')); 
    curl_setopt($ch, CURLOPT_USERAGENT, 'MozillaXYZ/1.0'); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $json); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 10); 
    $output = curl_exec($ch); 
    curl_close($ch); 
    return json_decode($output); 
} 

回答

0
$ticket = array(
    'description' => $form_state['values']['description'], 
    'requester' => array(
     'name' => $form_state['values']['name'], 
     'email' => $form_state['values']['requester'], 
     'group_id' => $form_state['values']['group_id'], 
    ), 

改爲

$ticket = array(
    'description' => $form_state['values']['description'], 
     'group_id' => $form_state['values']['group_id'], 
    'requester' => array(
     'name' => $form_state['values']['name'], 
     'email' => $form_state['values']['requester'], 
    ),