| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 | 
							- <?php
 
- /**
 
-  * @file
 
-  * Allows hiding of the node title field and automatic title creation.
 
-  */
 
- define('AUTO_NODETITLE_DISABLED', 0);
 
- define('AUTO_NODETITLE_ENABLED', 1);
 
- define('AUTO_NODETITLE_OPTIONAL', 2);
 
- /**
 
-  * Implements hook_permission().
 
-  */
 
- function auto_nodetitle_permission() {
 
-   return array(
 
-     'use PHP for title patterns' => array(
 
-       'title' => t('Use PHP for title patterns'),
 
-       'description' => t('Use PHP for title patterns.'),
 
-       'restrict access' => TRUE,
 
-     ),
 
-   );
 
- }
 
- /**
 
-  * Implements hook_form_FORM_ID_alter() for the node form.
 
-  */
 
- function auto_nodetitle_form_node_form_alter(&$form, &$form_state, $form_id) {
 
-   if (auto_nodetitle_get_setting($form['#node']->type) == AUTO_NODETITLE_ENABLED) {
 
-     // We will autogenerate the title later, just hide the title field in the
 
-     // meanwhile.
 
-     $form['title']['#value'] = 'ant';
 
-     $form['title']['#type'] = 'value';
 
-     $form['title']['#required'] = FALSE;
 
-   }
 
-   elseif (auto_nodetitle_get_setting($form['#node']->type) == AUTO_NODETITLE_OPTIONAL) {
 
-     $form['title']['#required'] = FALSE;
 
-   }
 
- }
 
- /**
 
-  * Implements hook_node_submit().
 
-  *
 
-  * Generate the node title as soon as the form has been submitted. That way
 
-  * the node preview is shown right too.
 
-  */
 
- function auto_nodetitle_node_submit($node, $form, &$form_state) {
 
-   $setting = auto_nodetitle_get_setting($node->type);
 
-   if ($setting == AUTO_NODETITLE_ENABLED || ($setting == AUTO_NODETITLE_OPTIONAL && empty($form_state['values']['title']))) {
 
-     auto_nodetitle_set_title($node);
 
-   }
 
- }
 
- /**
 
-  * Implements hook_node_presave().
 
-  */
 
- function auto_nodetitle_node_presave($node) {
 
-   // If not yet done, generate the title now.
 
-   if (auto_nodetitle_is_needed($node)) {
 
-     auto_nodetitle_set_title($node);
 
-   }
 
- }
 
- /**
 
-  * Returns whether the auto nodetitle has to be set.
 
-  */
 
- function auto_nodetitle_is_needed($node) {
 
-   return empty($node->auto_nodetitle_applied) && ($setting = auto_nodetitle_get_setting($node->type)) && !($setting == AUTO_NODETITLE_OPTIONAL && !empty($node->title));
 
- }
 
- /**
 
-  * Sets the automatically generated nodetitle for the node
 
-  */
 
- function auto_nodetitle_set_title(&$node) {
 
-   $types = node_type_get_types();
 
-   $pattern = variable_get('ant_pattern_' . $node->type, '');
 
-   if (trim($pattern)) {
 
-     $node->changed = REQUEST_TIME;
 
-     $node->title = _auto_nodetitle_patternprocessor($pattern, $node);
 
-   }
 
-   elseif ($node->nid) {
 
-     $node->title = t('@type @node-id', array('@type' => $types[$node->type]->name, '@node-id' => $node->nid));
 
-   }
 
-   else {
 
-     $node->title = t('@type', array('@type' => $types[$node->type]->name));
 
-   }
 
-   // Ensure the generated title isn't too long.
 
-   $node->title = substr($node->title, 0, 255);
 
-   // With that flag we ensure we don't apply the title two times to the same
 
-   // node. See auto_nodetitle_is_needed().
 
-   $node->auto_nodetitle_applied = TRUE;
 
- }
 
- /**
 
-  * Implements hook_node_operations().
 
-  */
 
- function auto_nodetitle_node_operations() {
 
-   $operations = array(
 
-     'nodetitle_update' => array(
 
-       'label' => t('Update automatic nodetitles'),
 
-       'callback' => 'auto_nodetitle_operations_update',
 
-     ),
 
-   );
 
-   return $operations;
 
- }
 
- /**
 
-  * Callback function for updating node titles.
 
-  */
 
- function auto_nodetitle_operations_update($nodes) {
 
-   foreach ($nodes as $nid) {
 
-     $node = node_load($nid);
 
-     if ($node && auto_nodetitle_is_needed($node)) {
 
-       $previous_title = $node->title;
 
-       auto_nodetitle_set_title($node);
 
-       // Only save if the title has actually changed.
 
-       if ($node->title != $previous_title) {
 
-         node_save($node);
 
-       }
 
-     }
 
-   }
 
- }
 
- /**
 
-   * Helper function to generate the title according to the settings.
 
-   *
 
-   * @return a title string
 
-   */
 
- function _auto_nodetitle_patternprocessor($pattern, $node) {
 
-   // Replace tokens.
 
-   $output = token_replace($pattern, array('node' => $node), array('sanitize' => FALSE));
 
-   // Evalute PHP.
 
-   if (variable_get('ant_php_' . $node->type, 0)) {
 
-     $output = auto_nodetitle_eval($output, $node);
 
-   }
 
-   // Strip tags.
 
-   $output = preg_replace('/[\t\n\r\0\x0B]/', '', strip_tags($output));
 
-   return $output;
 
- }
 
- /**
 
-  * Implements hook_form_FORM_ID_alter() for the node type form.
 
-  */
 
- function auto_nodetitle_form_node_type_form_alter(&$form, &$form_state) {
 
-   $default_value = auto_nodetitle_get_setting($form['#node_type']->type);
 
-   $form['auto_nodetitle'] = array(
 
-     '#type' => 'fieldset',
 
-     '#title' => t('Automatic title generation'),
 
-     '#weight' => 0,
 
-     '#collapsible' => TRUE,
 
-     '#collapsed' => !$default_value,
 
-     '#group' => 'additional_settings',
 
-     '#attached' => array(
 
-       'js' => array(
 
-         'auto-nodetitle' => drupal_get_path('module', 'auto_nodetitle') . '/auto_nodetitle.js',
 
-       ),
 
-     ),
 
-   );
 
-   $form['auto_nodetitle']['ant'] = array(
 
-     '#type' => 'radios',
 
-     '#default_value' => $default_value,
 
-     '#options' => array(
 
-       t('Disabled'),
 
-       t('Automatically generate the title and hide the title field'),
 
-       t('Automatically generate the title if the title field is left empty'),
 
-     )
 
-   );
 
-   $form['auto_nodetitle']['ant_pattern'] = array(
 
-     '#type' => 'textarea',
 
-     '#title' => t('Pattern for the title'),
 
-     '#description' => t('Leave blank for using the per default generated title. Otherwise this string will be used as title. Use the syntax [token] if you want to insert a replacement pattern.'),
 
-     '#default_value' => variable_get('ant_pattern_' . $form['#node_type']->type, ''),
 
-   );
 
-   // Don't allow editing of the pattern if PHP is used, but the users lacks
 
-   // permission for PHP.
 
-   if (variable_get('ant_php_' . $form['#node_type']->type, '') && !user_access('use PHP for title patterns')) {
 
-     $form['auto_nodetitle']['ant_pattern']['#disabled'] = TRUE;
 
-     $form['auto_nodetitle']['ant_pattern']['#description'] = t('You are not allow the configure the pattern for the title, as you lack the %permission permission.', array('%permission' => t('Use PHP for title patterns')));
 
-   }
 
-   // Display the list of available placeholders if token module is installed.
 
-   if (module_exists('token')) {
 
-     $form['auto_nodetitle']['token_help'] = array(
 
-       '#theme' => 'token_tree',
 
-       '#token_types' => array('node'),
 
-     );
 
-   }
 
-   $form['auto_nodetitle']['ant_php'] = array(
 
-     '#access' => user_access('use PHP for title patterns'),
 
-     '#type' => 'checkbox',
 
-     '#title' => t('Evaluate PHP in pattern.'),
 
-     '#description' => t('Put PHP code above that returns your string, but make sure you surround code in <?php and ?>. Note that $node is available and can be used by your code.'),
 
-     '#default_value' => variable_get('ant_php_' . $form['#node_type']->type, ''),
 
-   );
 
- }
 
- /**
 
-  * Gets the auto node title setting associated with the given content type.
 
-  */
 
- function auto_nodetitle_get_setting($type) {
 
-   return variable_get('ant_' . $type, AUTO_NODETITLE_DISABLED);
 
- }
 
- /**
 
-  * Evaluates php code and passes $node to it.
 
-  */
 
- function auto_nodetitle_eval($code, $node) {
 
-   ob_start();
 
-   print eval('?>' . $code);
 
-   $output = ob_get_contents();
 
-   ob_end_clean();
 
-   return $output;
 
- }
 
- /**
 
-  * Implements hook_node_type().
 
-  */
 
- function auto_nodetitle_node_type($op, $info) {
 
-   switch ($op) {
 
-     case 'delete':
 
-       variable_del('ant_' . $info->type);
 
-       variable_del('ant_pattern_' . $info->type);
 
-       variable_del('ant_php_' . $info->type);
 
-       break;
 
-     case 'update':
 
-       if (!empty($info->old_type) && $info->old_type != $info->type) {
 
-         variable_set('ant_' . $info->type, auto_nodetitle_get_setting($info->old_type));
 
-         variable_set('ant_pattern_' . $info->type, variable_get('ant_pattern_' . $info->old_type, ''));
 
-         variable_set('ant_php_' . $info->type, variable_get('ant_php_' . $info->old_type, ''));
 
-         variable_del('ant_' . $info->old_type);
 
-         variable_del('ant_pattern_' . $info->old_type);
 
-         variable_del('ant_php_' . $info->old_type);
 
-       }
 
-       break;
 
-   }
 
- }
 
 
  |