metatag_devel.module 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. <?php
  2. /**
  3. * @file
  4. * Primary hook implementations for Metatag:Devel.
  5. */
  6. /**
  7. * Implements hook_form_FORM_ID_alter() for devel_generate_content_form.
  8. *
  9. * Add extra options.
  10. */
  11. function metatag_devel_form_devel_generate_content_form_alter(&$form, &$form_state, $form_id) {
  12. $form['metatag_skip'] = array(
  13. '#type' => 'select',
  14. '#title' => t('Skip some meta tag values'),
  15. '#options' => array(
  16. 0 => t("All meta tags given a value"),
  17. 2 => t('Every 2nd value'),
  18. 3 => t('Every 3rd value'),
  19. 4 => t('Every 4th value'),
  20. 5 => t('Every 5th value'),
  21. ),
  22. '#default' => 0,
  23. '#description' => t('Control whether all of the meta tags will be given values, or .'),
  24. );
  25. // Move the submit button to after the rest of the fields.
  26. $form['submit']['#weight'] = 100;
  27. }
  28. /**
  29. * Implements hook_node_insert().
  30. *
  31. * Integrate with Devel Generate.
  32. */
  33. function metatag_devel_node_insert($node) {
  34. // Check to see if the node is generated by Devel Generate.
  35. if (isset($node->devel_generate)) {
  36. $metatags = array();
  37. // Max length of words.
  38. $title_length = $node->devel_generate['title_length'];
  39. // Pregenerate the URL.
  40. $url = url('<front>', array('absolute' => TRUE));
  41. // Types of images.
  42. $image_types = array('jpg' => 'jpg', 'png' => 'png', 'gif' => 'gif');
  43. // Optionally skip some meta tags.
  44. $skip = $node->devel_generate['metatag_skip'];
  45. // Generate some meta tags.
  46. $count = 0;
  47. foreach (metatag_get_info('tags') as $tag => $tag_info) {
  48. // Optionally skip records.
  49. if (empty($skip) || $count == 0 || (($count % $skip) == 0)) {
  50. // Default to ten words per tag.
  51. $maxlength = 10;
  52. // By default, just assume a simple text value.
  53. $type = 'text';
  54. if (strpos($tag, 'title') !== FALSE) {
  55. $maxlength = $title_length;
  56. }
  57. // Allow tags to customize the generation settings.
  58. if (!empty($tag_info['devel_generate'])) {
  59. if (!empty($tag_info['devel_generate']['type'])) {
  60. $type = $tag_info['devel_generate']['type'];
  61. }
  62. if (!empty($tag_info['devel_generate']['maxlength'])) {
  63. $maxlength = $tag_info['devel_generate']['maxlength'];
  64. }
  65. }
  66. // Work out how to handle possibly more complicated meta tags.
  67. elseif (isset($tag_info['form']) && is_array($tag_info['form'])) {
  68. // Textarea fields can be longer than other tags.
  69. if (isset($tag_info['form']['#type']) && $tag_info['form']['#type'] == 'textarea') {
  70. $maxlength = 20;
  71. }
  72. // Anything with an '#options' value will have one item picked at
  73. // random.
  74. elseif (isset($tag_info['form']['#options'])) {
  75. $type = 'select';
  76. }
  77. }
  78. // Simple values.
  79. if ($type == 'text') {
  80. $metatags[$tag]['value'] = devel_create_greeking($maxlength, TRUE);
  81. }
  82. // Select lists, pick a value at random.
  83. elseif ($type == 'select') {
  84. // Nested arrays, aka opgroups - collapse it down to one level.
  85. if (is_array($tag_info['form']['#options'])) {
  86. $options = array();
  87. foreach ($tag_info['form']['#options'] as $option => $subopts) {
  88. if (is_array($subopts)) {
  89. $options += array_keys($subopts);
  90. }
  91. else {
  92. $options[] = $option;
  93. }
  94. }
  95. }
  96. else {
  97. $options = $tag_info['form']['#options'];
  98. }
  99. $metatags[$tag]['value'] = array_rand(drupal_map_assoc($options));
  100. // Support checkboxes, which require the default value be an array.
  101. if ($tag_info['class'] == 'DrupalListMetaTag') {
  102. $metatags[$tag]['value'] = array($metatags[$tag]['value']);
  103. }
  104. }
  105. // URL values.
  106. elseif ($type == 'url') {
  107. $metatags[$tag]['value'] = $url . strtolower(str_replace(' ', '/', devel_create_greeking($maxlength, TRUE)));
  108. }
  109. // Image URL values.
  110. elseif ($type == 'image') {
  111. $filepath = strtolower(str_replace(' ', '/', devel_create_greeking($maxlength, TRUE)));
  112. $ext = array_rand($image_types);
  113. $metatags[$tag]['value'] = $url . $filepath . '.' . $ext;
  114. }
  115. // Integers, generate an integer between 0 and 999.
  116. elseif ($type == 'integer') {
  117. $metatags[$tag]['value'] = rand(0, 999);
  118. }
  119. // Floats, generate an integer between 0 and 999.
  120. elseif ($type == 'float') {
  121. $metatags[$tag]['value'] = rand(0, 999) . '.' . rand(0, 999);
  122. }
  123. // Phone numbers will be given the US format of XXX-XXX-XXXX.
  124. elseif ($type == 'phone') {
  125. $metatags[$tag]['value'] = rand(100, 999) . '-' . rand(100, 999) . '-' . rand(1000, 9999);
  126. }
  127. // Email addresses.
  128. elseif ($type == 'email') {
  129. $metatags[$tag]['value'] = strtolower(devel_create_greeking(1, TRUE) . '@' . devel_create_greeking(1, TRUE) . '.com');
  130. }
  131. // Canonical URL values - just fill in the absolute URL for the current
  132. // page.
  133. elseif ($type == 'canonical') {
  134. $metatags[$tag]['value'] = '[current-page:url:absolute]';
  135. }
  136. // Twitter usernames.
  137. elseif ($type == 'twitter') {
  138. $metatags[$tag]['value'] = '@' . devel_create_greeking(1, TRUE);
  139. }
  140. // Replace spaces in keyword fields with commas.
  141. if (strpos($tag, 'keyword') !== FALSE) {
  142. $metatags[$tag]['value'] = str_replace(' ', ',', $metatags[$tag]['value']);
  143. }
  144. }
  145. // Bump the counter.
  146. $count++;
  147. }
  148. // Adjust the values for the nested language structure.
  149. $metatags = array(
  150. $node->language => $metatags,
  151. );
  152. // Save the meta tags.
  153. metatag_metatags_save('node', $node->nid, $node->vid, $metatags, $node->language);
  154. }
  155. }