EclipseGc

Untitled

May 8th, 2012
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 5.39 KB | None | 0 0
  1. <?php
  2.  
  3. /**
  4.  * @file
  5.  *
  6.  * Plugin to provide a node context. A node context is a node wrapped in a
  7.  * context object that can be utilized by anything that accepts contexts.
  8.  */
  9.  
  10. /**
  11.  * Plugins are described by creating a $plugin array which will be used
  12.  * by the system that includes this file.
  13.  */
  14. $plugin = array(
  15.   'title' => t("Node"),
  16.   'description' => t('A node object.'),
  17.   'context' => 'ctools_context_create_node',
  18.   'edit form' => 'ctools_context_node_settings_form',
  19.   'defaults' => array('nid' => ''),
  20.   'keyword' => 'node',
  21.   'context name' => 'node',
  22.   'convert list' => 'ctools_context_node_convert_list',
  23.   'convert' => 'ctools_context_node_convert',
  24.   'placeholder form' => array(
  25.     '#type' => 'textfield',
  26.     '#description' => t('Enter the node ID of a node for this context.'),
  27.   ),
  28.   // This context is deprecated and should not be usable in the UI.
  29.   'no ui' => TRUE,
  30.   'no required context ui' => TRUE,
  31.   'superceded by' => 'entity:node',
  32. );
  33.  
  34. /**
  35.  * It's important to remember that $conf is optional here, because contexts
  36.  * are not always created from the UI.
  37.  */
  38. function ctools_context_create_node($empty, $data = NULL, $conf = FALSE) {
  39.   $context = new ctools_context('node');
  40.   $context->plugin = 'node';
  41.  
  42.   if ($empty) {
  43.     return $context;
  44.   }
  45.  
  46.   if ($conf) {
  47.     $nid = is_array($data) && isset($data['nid']) ? $data['nid'] : (is_object($data) ? $data->nid : 0);
  48.  
  49.     if (module_exists('translation')) {
  50.       if ($translation = module_invoke('translation', 'node_nid', $nid, $GLOBALS['language']->language)) {
  51.         $nid = $translation;
  52.         $reload = TRUE;
  53.       }
  54.     }
  55.  
  56.     if (is_array($data) || !empty($reload)) {
  57.       $data = node_load($nid);
  58.     }
  59.   }
  60.  
  61.   if (!empty($data)) {
  62.     $context->data     = $data;
  63.     $context->title    = $data->title;
  64.     $context->argument = $data->nid;
  65.  
  66.     $context->restrictions['type'] = array($data->type);
  67.     return $context;
  68.   }
  69. }
  70.  
  71. function ctools_context_node_settings_form($form, &$form_state) {
  72.   $conf = &$form_state['conf'];
  73.  
  74.   $form['node'] = array(
  75.     '#title' => t('Enter the title or NID of a node'),
  76.     '#type' => 'textfield',
  77.     '#maxlength' => 512,
  78.     '#autocomplete_path' => 'ctools/autocomplete/node',
  79.     '#weight' => -10,
  80.   );
  81.  
  82.   if (!empty($conf['nid'])) {
  83.     $info = db_query('SELECT * FROM {node} WHERE nid = :nid', array(':nid' => $conf['nid']))->fetchObject();
  84.     if ($info) {
  85.       $link = l(t("'%title' [node id %nid]", array('%title' => $info->title, '%nid' => $info->nid)), "node/$info->nid", array('attributes' => array('target' => '_blank', 'title' => t('Open in new window')), 'html' => TRUE));
  86.       $form['node']['#description'] = t('Currently set to !link', array('!link' => $link));
  87.     }
  88.   }
  89.  
  90.   $form['nid'] = array(
  91.     '#type' => 'value',
  92.     '#value' => $conf['nid'],
  93.   );
  94.  
  95.   $form['set_identifier'] = array(
  96.     '#type' => 'checkbox',
  97.     '#default_value' => FALSE,
  98.     '#title' => t('Reset identifier to node title'),
  99.     '#description' => t('If checked, the identifier will be reset to the node title of the selected node.'),
  100.   );
  101.  
  102.   return $form;
  103. }
  104.  
  105. /**
  106.  * Validate a node.
  107.  */
  108. function ctools_context_node_settings_form_validate($form, &$form_state) {
  109.   // Validate the autocomplete
  110.   if (empty($form_state['values']['nid']) && empty($form_state['values']['node'])) {
  111.     form_error($form['node'], t('You must select a node.'));
  112.     return;
  113.   }
  114.  
  115.   if (empty($form_state['values']['node'])) {
  116.     return;
  117.   }
  118.  
  119.   $nid          = $form_state['values']['node'];
  120.   $preg_matches = array();
  121.   $match        = preg_match('/\[id: (\d+)\]/', $nid, $preg_matches);
  122.   if (!$match) {
  123.     $match = preg_match('/^id: (\d+)/', $nid, $preg_matches);
  124.   }
  125.  
  126.   if ($match) {
  127.     $nid = $preg_matches[1];
  128.   }
  129.   if (is_numeric($nid)) {
  130.     $node = db_query('SELECT nid, status FROM {node} WHERE nid = :nid', array(':nid' => $nid))->fetchObject();
  131.   }
  132.   else {
  133.     $node = db_query('SELECT nid, status FROM {node} WHERE LOWER(title) = LOWER(:title)', array(':title' => $nid))->fetchObject();
  134.   }
  135.  
  136.   // Do not allow unpublished nodes to be selected by unprivileged users
  137.   if (!$node || (empty($node->status) && !(user_access('administer nodes')))) {
  138.     form_error($form['node'], t('Invalid node selected.'));
  139.   }
  140.   else {
  141.     form_set_value($form['nid'], $node->nid, $form_state);
  142.   }
  143. }
  144.  
  145. function ctools_context_node_settings_form_submit($form, &$form_state) {
  146.   if ($form_state['values']['set_identifier']) {
  147.     $node = node_load($form_state['values']['nid']);
  148.     $form_state['values']['identifier'] = $node->title;
  149.   }
  150.  
  151.   // This will either be the value set previously or a value set by the
  152.   // validator.
  153.   $form_state['conf']['nid'] = $form_state['values']['nid'];
  154. }
  155.  
  156. /**
  157.  * Provide a list of ways that this context can be converted to a string.
  158.  */
  159. function ctools_context_node_convert_list() {
  160.   $tokens = token_info();
  161.   foreach ($tokens['tokens']['node'] as $id => $info) {
  162.     if (!isset($list[$id])) {
  163.       $list[$id] = $info['name'];
  164.     }
  165.   }
  166.  
  167.   return $list;
  168. }
  169.  
  170. /**
  171.  * Convert a context into a string.
  172.  */
  173. function ctools_context_node_convert($context, $type) {
  174.   $tokens = token_info();
  175.   if (isset($tokens['tokens']['node'][$type])) {
  176.     $values = token_generate('node', array($type => $type), array('node' => $context->data));
  177.     if (isset($values[$type])) {
  178.       return $values[$type];
  179.     }
  180.   }
  181. }
Advertisement
Add Comment
Please, Sign In to add comment