array( 'field_name' => 'field_taxonomy_term_status', 'type' => 'list_boolean', 'settings' => array( 'allowed_values' => array( 0 => '', 1 => '', ), ), ), 'field_taxonomy_term_publish_on' => array( 'field_name' => 'field_taxonomy_term_publish_on', 'type' => 'datestamp', 'settings' => array( 'granularity' => array( 'year' => 'year', 'month' => 'month', 'day' => 'day', 'hour' => 'hour', 'minute' => 'minute', 'second' => 'second', ), 'tz_handling' => 'none', ), ), 'field_taxonomy_term_unpublish_on' => array( 'field_name' => 'field_taxonomy_term_unpublish_on', 'type' => 'datestamp', 'settings' => array( 'granularity' => array( 'year' => 'year', 'month' => 'month', 'day' => 'day', 'hour' => 'hour', 'minute' => 'minute', 'second' => 'second', ), 'tz_handling' => 'none', ), ), ); return $fields; } /** * Create field instance definitions for Taxonomy Publisher specific fields. * * @return array * An array of field instances definitions */ function taxonomy_tools_publisher_install_field_instances() { $instances = array( 'field_taxonomy_term_status' => array( 'label' => 'Published', 'widget' => array( 'weight' => 20.1, 'type' => 'options_onoff', 'settings' => array( 'display_label' => 1, ), ), 'display' => array( 'default' => array( 'label' => 'hidden', 'type' => 'hidden', ), ), 'default_value' => array( 0 => array( 'value' => 1, ), ), 'field_name' => 'field_taxonomy_term_status', ), 'field_taxonomy_term_publish_on' => array( 'label' => 'Publish on:', 'widget' => array( 'weight' => 20.2, 'type' => 'date_popup', 'settings' => array( 'input_format' => 'd.m.Y - H:i:s', 'increment' => 1, ), ), 'settings' => array( 'default_value' => 'blank', ), 'display' => array( 'default' => array( 'label' => 'hidden', 'type' => 'hidden', ), ), 'field_name' => 'field_taxonomy_term_publish_on', ), 'field_taxonomy_term_unpublish_on' => array( 'label' => 'Unpublish on:', 'widget' => array( 'weight' => 20.3, 'type' => 'date_popup', 'settings' => array( 'input_format' => 'd.m.Y - H:i:s', 'increment' => 1, ), ), 'settings' => array( 'default_value' => 'blank', ), 'display' => array( 'default' => array( 'label' => 'hidden', 'type' => 'hidden', ), ), 'field_name' => 'field_taxonomy_term_unpublish_on', ), ); return $instances; } /** * Create field group definition for Taxonomy Publisher fields. * * @param string $bundle * A string containing bundle name for which the field group is created * * @return stdClass * A field group object */ function taxonomy_tools_publisher_install_field_group($bundle) { $group = new stdClass(); $group->label = t('Publishing settings'); $group->weight = 20; $group->format_type = 'fieldset'; $group->group_name = 'group_taxonomy_term_publishing'; $group->entity_type = 'taxonomy_term'; $group->bundle = $bundle; $group->mode = 'form'; $group->identifier = 'group_taxonomy_term_publishing|taxonomy_term|' . $bundle . '|form'; $group->children = array( 0 => 'field_taxonomy_term_status', 1 => 'field_taxonomy_term_publish_on', 2 => 'field_taxonomy_term_unpublish_on', ); $group->format_settings = array( 'formatter' => 'collapsed', 'label' => t('Publishing settings'), 'instance_settings' => array( 'required_fields' => 0, 'classes' => '', 'description' => '', ), ); return $group; } /** * Implements hook_enable(). */ function taxonomy_tools_publisher_enable() { // Create field definitions. $fields = taxonomy_tools_publisher_install_fields(); foreach ($fields as $field) { $field_info = field_info_field($field['field_name']); if (empty($field_info)) { field_create_field($field); } } $config = variable_get('taxonomy_tools_publisher_config', array()); if (!empty($config)) { $instances = taxonomy_tools_publisher_install_field_instances(); foreach ($config as $vid => $setting) { if ($setting > 0) { // Get the vocabulary machine name for which Taxonomy Publisher // will be used. $vmn = db_query("SELECT machine_name FROM {taxonomy_vocabulary} WHERE vid = :vid", array(':vid' => $vid))->fetchField(); // Create field instances. foreach ($instances as $instance) { $instance['entity_type'] = 'taxonomy_term'; $instance['bundle'] = $vmn; $instance_info = field_info_instance($instance['entity_type'], $instance['field_name'], $instance['bundle']); if (empty($instance_info)) { field_create_instance($instance); } } // Create field group. ctools_include('export'); $group_info = db_query("SELECT * FROM {field_group} WHERE entity_type = 'taxonomy_term' AND bundle = :vmn", array(':vmn' => $vmn))->fetchAll(); if (empty($group_info)) { $group = taxonomy_tools_publisher_install_field_group($vmn); field_group_group_save($group); } } } } // Restore field values from backup and delete backup. foreach ($fields as $field) { $backup = $field['field_name'] . '_backup'; if (db_table_exists($backup)) { $original = 'field_data_' . $field['field_name']; db_query("INSERT INTO $original SELECT * FROM $backup"); db_query("DROP TABLE $backup"); } } drupal_set_message(t('Taxonomy Publisher enabled')); } /** * Imlements hook_disable(). */ function taxonomy_tools_publisher_disable() { $fields = array( 'field_taxonomy_term_status', 'field_taxonomy_term_publish_on', 'field_taxonomy_term_unpublish_on', ); foreach ($fields as $field) { $original = 'field_data_' . $field; if (db_table_exists($original)) { // Make backup for field values. $backup = $field . '_backup'; db_query("CREATE TABLE $backup SELECT * FROM $original"); } } // Delete fields. foreach ($fields as $field) { $field_info = field_info_field($field); if (!empty($field_info)) { field_delete_field($field); } } // Delete also field groups. db_query("DELETE FROM {field_group} WHERE group_name = :group", array(':group' => 'group_taxonomy_term_publishing')); drupal_set_message(t('Taxonomy Publisher disabled')); } /** * Implements hook_uninstall(). */ function taxonomy_tools_publisher_uninstall() { // Delete configuration variable. variable_del('taxonomy_tools_publisher_config'); // Delete field values backup. $fields = array( 'field_taxonomy_term_status', 'field_taxonomy_term_publish_on', 'field_taxonomy_term_unpublish_on', ); foreach ($fields as $field) { $backup = $field . '_backup'; if (db_table_exists($backup)) { db_query("DROP TABLE $backup"); } } drupal_set_message(t('Taxonomy Publisher uninstalled')); }