Commit a5d98722 authored by webchick's avatar webchick
Browse files

Issue #1668332 by rbayliss, Devin Carlson, sun: Added E-mail field type to core.

parent 4a32c5d3
name = E-mail
description = Defines a field type for e-mail addresses.
package = Core
version = VERSION
core = 8.x
dependencies[] = field
dependencies[] = text
<?php
/**
* @file
* Install, update and uninstall functions for the E-mail module.
*/
/**
* Implements hook_field_schema().
*/
function email_field_schema($field) {
$columns = array(
'value' => array(
'type' => 'varchar',
// The maximum length of an e-mail address is 254 characters. RFC 3696
// specifies a total length of 320 characters, but mentions that
// addresses longer than 256 characters are not normally useful. Erratum
// 1690 was then released which corrected this value to 254 characters.
// @see http://tools.ietf.org/html/rfc3696#section-3
// @see http://www.rfc-editor.org/errata_search.php?rfc=3696&eid=1690
'length' => 254,
'not null' => FALSE,
),
);
return array(
'columns' => $columns,
);
}
<?php
/**
* @file
* Defines a simple e-mail field type.
*/
/**
* Implements hook_help().
*/
function email_help($path, $arg) {
switch ($path) {
case 'admin/help#email':
$output = '';
$output .= '<h3>' . t('About') . '</h3>';
$output .= '<p>' . t('The E-mail module defines a field for storing e-mail addresses, for use with the Field module. E-mail addresses are validated to ensure they match the expected format. See the <a href="@field-help">Field module help page</a> for more information about fields.', array('@field-help' => url('admin/help/field'))) . '</p>';
return $output;
}
}
/**
* Implements hook_field_info().
*/
function email_field_info() {
return array(
'email' => array(
'label' => t('E-mail'),
'description' => t('This field stores an e-mail address in the database.'),
'default_widget' => 'email_default',
'default_formatter' => 'text_plain',
),
);
}
/**
* Implements hook_field_is_empty().
*/
function email_field_is_empty($item, $field) {
return !isset($item['value']) || $item['value'] === '';
}
/**
* Implements hook_field_widget_info().
*/
function email_field_widget_info() {
return array(
'email_default' => array(
'label' => t('E-mail'),
'field types' => array('email'),
),
);
}
/**
* Implements hook_field_widget_form().
*/
function email_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) {
$element['value'] = $element + array(
'#type' => 'email',
'#default_value' => isset($items[$delta]['value']) ? $items[$delta]['value'] : NULL,
);
return $element;
}
/**
* Implements hook_field_formatter_info().
*/
function email_field_formatter_info() {
return array(
'email_mailto' => array(
'label' => t('Mailto link'),
'field types' => array('email'),
),
);
}
/**
* Implements hook_field_formatter_info_alter().
*/
function email_field_formatter_info_alter(&$info) {
$info['text_plain']['field types'][] = 'email';
}
/**
* Implements hook_field_formatter_view().
*/
function email_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
$element = array();
foreach ($items as $delta => $item) {
$element[$delta] = array(
'#type' => 'link',
'#title' => $item['value'],
'#href' => 'mailto:' . $item['value'],
);
}
return $element;
}
<?php
/**
* @file
* Definition of Drupal\email\Tests\EmailFieldTest.
*/
namespace Drupal\email\Tests;
use Drupal\simpletest\WebTestBase;
/**
* Tests e-mail field functionality.
*/
class EmailFieldTest extends WebTestBase {
/**
* Modules to enable.
*
* @var array
*/
public static $modules = array('node', 'field_test', 'email', 'field_ui');
public static function getInfo() {
return array(
'name' => 'E-mail field',
'description' => 'Tests e-mail field functionality.',
'group' => 'Field types',
);
}
function setUp() {
parent::setUp();
$this->web_user = $this->drupalCreateUser(array(
'access field_test content',
'administer field_test content',
'administer content types',
));
$this->drupalLogin($this->web_user);
}
/**
* Tests e-mail field.
*/
function testEmailField() {
// Create a field with settings to validate.
$this->field = array(
'field_name' => drupal_strtolower($this->randomName()),
'type' => 'email',
);
field_create_field($this->field);
$this->instance = array(
'field_name' => $this->field['field_name'],
'entity_type' => 'test_entity',
'bundle' => 'test_bundle',
'widget' => array(
'type' => 'email_default',
),
'display' => array(
'full' => array(
'type' => 'email_mailto',
),
),
);
field_create_instance($this->instance);
// Display creation form.
$this->drupalGet('test-entity/add/test_bundle');
$langcode = LANGUAGE_NOT_SPECIFIED;
$this->assertFieldByName("{$this->field['field_name']}[$langcode][0][value]", '', 'Widget found.');
// Submit a valid e-mail address and ensure it is accepted.
$value = 'test@example.com';
$edit = array(
"{$this->field['field_name']}[$langcode][0][value]" => $value,
);
$this->drupalPost(NULL, $edit, t('Save'));
preg_match('|test-entity/manage/(\d+)/edit|', $this->url, $match);
$id = $match[1];
$this->assertRaw(t('test_entity @id has been created.', array('@id' => $id)));
$this->assertRaw($value);
// Verify that a mailto link is displayed.
$entity = field_test_entity_test_load($id);
$entity->content = field_attach_view('test_entity', $entity, 'full');
$this->drupalSetContent(drupal_render($entity->content));
$this->assertLinkByHref('mailto:test@example.com');
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment