123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- <?php
- /**
- * @file
- * Primary hook implementations for Metatag:Devel.
- */
- /**
- * Implements hook_form_FORM_ID_alter() for devel_generate_content_form.
- *
- * Add extra options.
- */
- function metatag_devel_form_devel_generate_content_form_alter(&$form, &$form_state, $form_id) {
- $form['metatag_skip'] = array(
- '#type' => 'select',
- '#title' => t('Skip some meta tag values'),
- '#options' => array(
- 0 => t("All meta tags given a value"),
- 2 => t('Every 2nd value'),
- 3 => t('Every 3rd value'),
- 4 => t('Every 4th value'),
- 5 => t('Every 5th value'),
- ),
- '#default' => 0,
- '#description' => t('Control whether all of the meta tags will be given values, or .'),
- );
- // Move the submit button to after the rest of the fields.
- $form['submit']['#weight'] = 100;
- }
- /**
- * Implements hook_node_insert().
- *
- * Integrate with Devel Generate.
- */
- 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'];
- }
- }
- // Work out how to handle possibly more complicated meta tags.
- 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;
- }
- // Anything with an '#options' value will have one item picked at
- // random.
- elseif (isset($tag_info['form']['#options'])) {
- $type = 'select';
- }
- }
- // Simple values.
- if ($type == 'text') {
- $metatags[$tag]['value'] = devel_create_greeking($maxlength, TRUE);
- }
- // Select lists, pick a value at random.
- 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']);
- }
- }
- // URL values.
- elseif ($type == 'url') {
- $metatags[$tag]['value'] = $url . strtolower(str_replace(' ', '/', devel_create_greeking($maxlength, TRUE)));
- }
- // Image URL values.
- elseif ($type == 'image') {
- $filepath = strtolower(str_replace(' ', '/', devel_create_greeking($maxlength, TRUE)));
- $ext = array_rand($image_types);
- $metatags[$tag]['value'] = $url . $filepath . '.' . $ext;
- }
- // Integers, generate an integer between 0 and 999.
- elseif ($type == 'integer') {
- $metatags[$tag]['value'] = rand(0, 999);
- }
- // Floats, generate an integer between 0 and 999.
- elseif ($type == 'float') {
- $metatags[$tag]['value'] = rand(0, 999) . '.' . rand(0, 999);
- }
- // Phone numbers will be given the US format of XXX-XXX-XXXX.
- elseif ($type == 'phone') {
- $metatags[$tag]['value'] = rand(100, 999) . '-' . rand(100, 999) . '-' . rand(1000, 9999);
- }
- // Email addresses.
- elseif ($type == 'email') {
- $metatags[$tag]['value'] = strtolower(devel_create_greeking(1, TRUE) . '@' . devel_create_greeking(1, TRUE) . '.com');
- }
- // Canonical URL values - just fill in the absolute URL for the current
- // page.
- elseif ($type == 'canonical') {
- $metatags[$tag]['value'] = '[current-page:url:absolute]';
- }
- // Twitter usernames.
- 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);
- }
- }
|