You are here

function metatag_devel_node_insert in Metatag 7

Implements hook_node_insert().

Integrate with Devel Generate.

File

metatag_devel/metatag_devel.module, line 37
Primary hook implementations for Metatag:Devel.

Code

function metatag_devel_node_insert($node) {

  // Check to see if the node is generated by Devel Generate.
  if (isset($node->devel_generate)) {
    $metatags = array();

    // Max length of words.
    $title_length = $node->devel_generate['title_length'];

    // Pregenerate the URL.
    $url = url('<front>', array(
      'absolute' => TRUE,
    ));

    // Types of images.
    $image_types = array(
      'jpg' => 'jpg',
      'png' => 'png',
      'gif' => 'gif',
    );

    // Optionally skip some meta tags.
    $skip = $node->devel_generate['metatag_skip'];

    // Generate some meta tags.
    $count = 0;
    foreach (metatag_get_info('tags') as $tag => $tag_info) {

      // Optionally skip records.
      if (empty($skip) || $count == 0 || $count % $skip == 0) {

        // Default to ten words per tag.
        $maxlength = 10;

        // By default, just assume a simple text value.
        $type = 'text';
        if (strpos($tag, 'title') !== FALSE) {
          $maxlength = $title_length;
        }

        // Allow tags to customize the generation settings.
        if (!empty($tag_info['devel_generate'])) {
          if (!empty($tag_info['devel_generate']['type'])) {
            $type = $tag_info['devel_generate']['type'];
          }
          if (!empty($tag_info['devel_generate']['maxlength'])) {
            $maxlength = $tag_info['devel_generate']['maxlength'];
          }
        }
        elseif (isset($tag_info['form']) && is_array($tag_info['form'])) {

          // Textarea fields can be longer than other tags.
          if (isset($tag_info['form']['#type']) && $tag_info['form']['#type'] == 'textarea') {
            $maxlength = 20;
          }
          elseif (isset($tag_info['form']['#options'])) {
            $type = 'select';
          }
        }

        // Simple values.
        if ($type == 'text') {
          $metatags[$tag]['value'] = devel_create_greeking($maxlength, TRUE);
        }
        elseif ($type == 'select') {

          // Nested arrays, aka opgroups - collapse it down to one level.
          if (is_array($tag_info['form']['#options'])) {
            $options = array();
            foreach ($tag_info['form']['#options'] as $option => $subopts) {
              if (is_array($subopts)) {
                $options += array_keys($subopts);
              }
              else {
                $options[] = $option;
              }
            }
          }
          else {
            $options = $tag_info['form']['#options'];
          }
          $metatags[$tag]['value'] = array_rand(drupal_map_assoc($options));

          // Support checkboxes, which require the default value be an array.
          if ($tag_info['class'] == 'DrupalListMetaTag') {
            $metatags[$tag]['value'] = array(
              $metatags[$tag]['value'],
            );
          }
        }
        elseif ($type == 'url') {
          $metatags[$tag]['value'] = $url . strtolower(str_replace(' ', '/', devel_create_greeking($maxlength, TRUE)));
        }
        elseif ($type == 'image') {
          $filepath = strtolower(str_replace(' ', '/', devel_create_greeking($maxlength, TRUE)));
          $ext = array_rand($image_types);
          $metatags[$tag]['value'] = $url . $filepath . '.' . $ext;
        }
        elseif ($type == 'integer') {
          $metatags[$tag]['value'] = rand(0, 999);
        }
        elseif ($type == 'float') {
          $metatags[$tag]['value'] = rand(0, 999) . '.' . rand(0, 999);
        }
        elseif ($type == 'phone') {
          $metatags[$tag]['value'] = rand(100, 999) . '-' . rand(100, 999) . '-' . rand(1000, 9999);
        }
        elseif ($type == 'email') {
          $metatags[$tag]['value'] = strtolower(devel_create_greeking(1, TRUE) . '@' . devel_create_greeking(1, TRUE) . '.com');
        }
        elseif ($type == 'canonical') {
          $metatags[$tag]['value'] = '[current-page:url:absolute]';
        }
        elseif ($type == 'twitter') {
          $metatags[$tag]['value'] = '@' . devel_create_greeking(1, TRUE);
        }

        // Replace spaces in keyword fields with commas.
        if (strpos($tag, 'keyword') !== FALSE) {
          $metatags[$tag]['value'] = str_replace(' ', ',', $metatags[$tag]['value']);
        }
      }

      // Bump the counter.
      $count++;
    }

    // Adjust the values for the nested language structure.
    $metatags = array(
      $node->language => $metatags,
    );

    // Save the meta tags.
    metatag_metatags_save('node', $node->nid, $node->vid, $metatags);
  }
}