<?php

/**
 * @File
 *   Support Token module file.
 */

/**
 * Implementation of hook_token_list().
 */
function support_token_token_info() {
		$pathauto = module_exists('pathauto') == TRUE;
		
		// Assigned User Tokens.
    $info['tokens']['node']['ticket-assigned-id'] = array(
    	'name' => t('Assignee User ID'),
			'description' => t('Assigned user ID for Support module tickets.'),
		);
		
    $info['tokens']['node']['ticket-assigned-name'] = array(
			'name' => t('Assignee Username'),
			'description' => t('Assigned user name for Support module tickets.'),
		);
		
		if ($pathauto == TRUE) {
    	$info['tokens']['node']['ticket-assigned-name-url'] = array(
    		'name' => t('Assignee Username (URL Formatted)'),
				'description' => t('Assigned user name for Support module tickets preprocessed to be used in an URL'),
			);
		}	
		
    $info['tokens']['node']['ticket-assigned-name-raw'] = array(
    	'name' => t('Assignee Username (Raw)'),
			'description' => t('Raw assigned user name for Support module tickets. WARNING - raw user input.'),
		);

    // Client tokens.
    $info['tokens']['node']['ticket-client-id'] = array(
			'name' => t('Client ID'),
			'description' => t('Client ID for Support module tickets.'),
		);
		
    $info['tokens']['node']['ticket-client-name'] = array(
			'name' => t('Client Name'),
			'description' => t('Client name for Support module tickets.'),
		);
		
		if ($pathauto == TRUE) {
    	$info['tokens']['node']['ticket-client-name-url'] = array(
				'name' => t('Client Name (URL Formatted)'),
				'description' => t('Client name for Support module tickets preprocessed to be used in an URL'),
			);
		}
		
    $info['tokens']['node']['ticket-client-name-raw'] = array(
    	'name' => t('Client Name (Raw)'),
			'description' => t('Raw client name for Support module tickets. WARNING - raw user input.'),
		);

    // Priority Tokens.
    $info['tokens']['node']['ticket-priority-id'] = array(
			'name' => t('Ticket Priority ID'),
			'description' => t('Priority ID for Support module tickets.'),
		);
		
    $info['tokens']['node']['ticket-priority-name'] = array(
			'name' => t('Ticket Priority Name'),
			'description' => t('Priority name for Support module tickets.'),
		);
		
		if ($pathauto == TRUE) {
    	$info['tokens']['node']['ticket-priority-name-url'] = array(
				'name' => t('Ticket Priority Name (URL Formatted)'),
				'description' => t('Priority name for Support module tickets preprocessed to be used in an URL'),
			);
		}
		
    $info['tokens']['node']['ticket-priority-name-raw'] = array(
			'name' => t('Ticket Priority Name (Raw)'),
			'description' => t('Raw priority name for Support module tickets. WARNING - raw user input.'),
		);

    // State Tokens.
    $info['tokens']['node']['ticket-state-id'] = array(
			'name' => t('Ticket State ID'),
			'description' => t('State ID for Support module tickets.'),
		);
		
    $info['tokens']['node']['ticket-state-name'] = array(
			'name' => t('Ticket State Name'),
			'description' => t('State name for Support module tickets.'),
		);
		
		if ($pathauto == TRUE) {
    	$info['tokens']['node']['ticket-state-name-url'] = array(
				'name' => t('Ticket State Name (URL Formatted)'),
				'description' => t('State name for Support module tickets preprocessed to be used in an URL'),
			);
		}
		
    $info['tokens']['node']['ticket-state-name-raw'] = array(
			'name' => t('Ticket State Name (Raw)'),
			'description' => t('Raw state name for Support module tickets. WARNING - raw user input.'),
		);
		
		return $info;
}

/**
 * Implementation of hook_tokens(). 
 */

function support_token_tokens($type, $tokens, array $data = array(), array $options = array()) {
  $replacements = array();
	$sanitize = !empty($options['sanitize']);
	
	$pathauto = module_exists('pathauto') == TRUE;
	if ($pathauto == TRUE) {
	    module_load_include('inc', 'pathauto');
	}

  if (($type == 'node') && !empty($data['node'])) {
    foreach ($tokens as $name => $original) {
      
			$support_ticket = $data['node'];
			
			switch ($name) {
				
				// Assigned User Tokens.
        case 'ticket-assigned-id':
          $replacements[$original] = $support_ticket->assigned;
        break;
					
				case 'ticket-assigned-name':
					// Get assigned user ID.
					$auid = $support_ticket->assigned;
	
					// Load user information.
					$assigned_user = user_load($auid);
					$assigned_user_name = (isset($assigned_user->name) && $assigned_user->name) ? $assigned_user->name : t('not assigned');
					
					// Output the token.
					$replacements[$original] = check_plain($assigned_user_name);
				break;
				
				case 'ticket-assigned-name-url':
					// Get assigned user ID.
					$auid = $support_ticket->assigned;
	
					// Load user information.
					$assigned_user = user_load($auid);
					$assigned_user_name = (isset($assigned_user->name) && $assigned_user->name) ? $assigned_user->name : t('not assigned');
					
					// Output the token.
					$replacements[$original] = pathauto_cleanstring($assigned_user_name);
				break;
				
				case 'ticket-assigned-name-raw':
					// Get assigned user ID.
					$auid = $support_ticket->assigned;

					// Load user information.
					$assigned_user = user_load($auid);
					$assigned_user_name = (isset($assigned_user->name) && $assigned_user->name) ? $assigned_user->name : t('not assigned');
				
					// Output the token.
					$replacements[$original] = $assigned_user_name;
				break;
				
				// Client Tokens.
				case 'ticket-client-id':
					$replacements[$original] = $support_ticket->client;
				break;
					
				case 'ticket-client-name':
					// Select the Client Name.
					$cnqry = 'SELECT name FROM {support_client} WHERE clid = :clid';
					$cnargs = array (
						':clid' => $support_ticket->client,
					);
					$client_name = db_query($cnqry, $cnargs)->fetchField();
					$client_name = (isset($client_name) && $client_name) ? $client_name : t('no client');
					
					// Output the token.
					$replacements[$original] = check_plain($client_name);
				break;
				
				case 'ticket-client-name-url':
					// Select the Client Name.
					$cnqry = 'SELECT name FROM {support_client} WHERE clid = :clid';
					$cnargs = array (
						':clid' => $support_ticket->client,
					);
					$client_name = db_query($cnqry, $cnargs)->fetchField();
					$client_name = (isset($client_name) && $client_name) ? $client_name : t('no client');
				
					// Output the token.
					$replacements[$original] = pathauto_cleanstring($client_name);
				break;
				
						
				case 'ticket-client-name-raw':
					// Select the Client Name.
					$cnqry = 'SELECT name FROM {support_client} WHERE clid = :clid';
					$cnargs = array (
						':clid' => $support_ticket->client,
					);
					$client_name = db_query($cnqry, $cnargs)->fetchField();
					$client_name = (isset($client_name) && $client_name) ? $client_name : t('no client');
				
					// Output the token.
					$replacements[$original] = $client_name;
				break;
				
				// Priority Tokens.
				case 'ticket-priority-id':
					$replacements[$original] = $support_ticket->priority;
				break;
				
				case 'ticket-priority-name':
					// Select the Priority label.
					$pnqry = 'SELECT priority FROM {support_priority} WHERE pid = :pid';
					$pnargs = array (
						':pid' => $support_ticket->priority,
					);
			  	$priority_name = db_query($pnqry, $pnargs)->fetchField();
			  	$priority_name = (isset($priority_name) && $priority_name) ? $priority_name : t('no priority');
					
					// Output the token.
					$replacements[$original] = check_plain($priority_name);
				break;
				
				case 'ticket-priority-name-url':
					// Select the Priority label.
					$pnqry = 'SELECT priority FROM {support_priority} WHERE pid = :pid';
					$pnargs = array (
						':pid' => $support_ticket->priority,
					);
		  		$priority_name = db_query($pnqry, $pnargs)->fetchField();
		  		$priority_name = (isset($priority_name) && $priority_name) ? $priority_name : t('no priority');
				
					// Output the token.
					$replacements[$original] = pathauto_cleanstringpathauto_cleanstring($priority_name);
				break;
				
				
				case 'ticket-priority-name-raw':
					// Select the Priority label.
					$pnqry = 'SELECT priority FROM {support_priority} WHERE pid = :pid';
					$pnargs = array (
						':pid' => $support_ticket->priority,
					);
		  		$priority_name = db_query($pnqry, $pnargs)->fetchField();
		  		$priority_name = (isset($priority_name) && $priority_name) ? $priority_name : t('no priority');
				
					// Output the token.
					$replacements[$original] = $priority_name;
				break;
				
				// State Tokens.
				case 'ticket-state-id':
					$replacements[$original] = $support_ticket->state;
				break;
				
				case 'ticket-state-name':
					// Select the State label.
					$snqry = 'SELECT state FROM {support_states} WHERE sid = :sid';
					$snargs = array (
						':sid' => $support_ticket->state,
					);
			  	$state_name = db_query($snqry, $snargs)->fetchField();
			  	$state_name = (isset($state_name) && $state_name) ? $state_name : t('no state');
					
					// Output the token.
					$replacements[$original] = check_plain($state_name);
				break;
					
				case 'ticket-state-name-url':
					// Select the State label.
					$snqry = 'SELECT state FROM {support_states} WHERE sid = :sid';
					$snargs = array (
						':sid' => $support_ticket->state,
					);
			 	 	$state_name = db_query($snqry, $snargs)->fetchField();
			  	$state_name = (isset($state_name) && $state_name) ? $state_name : t('no state');
					
					// Output the token.
					$replacements[$original] = pathauto_cleanstring($state_name);
				break;
				
				case 'ticket-state-name-raw':
					// Select the State label.
					$snqry = 'SELECT state FROM {support_states} WHERE sid = :sid';
					$snargs = array (
						':sid' => $support_ticket->state,
					);
		 	 		$state_name = db_query($snqry, $snargs)->fetchField();
		  		$state_name = (isset($state_name) && $state_name) ? $state_name : t('no state');
				
				// Output the token.
					$replacements[$original] = $state_name;
				break;
      }
    }
  }

  return $replacements;
}
