1
0
mirror of https://github.com/processwire/processwire.git synced 2025-08-16 03:34:33 +02:00

Update ProcessField to use more verbose field type names for additional clarity. Also a couple minor cosmetic adjustments in LanguageSupport

This commit is contained in:
Ryan Cramer
2016-11-28 11:04:02 -05:00
parent bba6e3b00f
commit 53612e9489
6 changed files with 59 additions and 26 deletions

View File

@@ -51,6 +51,7 @@
* @property bool $_exportMode True when Fieldtype is exporting config data, false otherwise. #pw-internal * @property bool $_exportMode True when Fieldtype is exporting config data, false otherwise. #pw-internal
* @property string $name Name of Fieldtype module. #pw-group-other * @property string $name Name of Fieldtype module. #pw-group-other
* @property string $shortName Short name of Fieldtype, which excludes the "Fieldtype" prefix. #pw-group-other * @property string $shortName Short name of Fieldtype, which excludes the "Fieldtype" prefix. #pw-group-other
* @property string $longName Long name of Fieldtype, which is typically the module title. #pw-group-other
* *
*/ */
abstract class Fieldtype extends WireData implements Module { abstract class Fieldtype extends WireData implements Module {
@@ -1257,7 +1258,12 @@ abstract class Fieldtype extends WireData implements Module {
*/ */
public function get($key) { public function get($key) {
if($key == 'name') return $this->className(); if($key == 'name') return $this->className();
if($key == 'shortName') return str_replace('Fieldtype', '', $this->className()); if($key == 'shortName') {
return str_replace('Fieldtype', '', $this->className());
} else if($key == 'longName') {
$info = $this->getModuleInfo($this);
return $info['title'];
}
return parent::get($key); return parent::get($key);
} }

View File

@@ -443,6 +443,18 @@ interface LanguagesValueInterface {
} }
/**
* Interface used to indicate that the Fieldtype supports multiple languages
*
*/
interface FieldtypeLanguageInterface {
/*
* This interface is symbolic only and doesn't require any additional methods,
* however you do need to add an 'implements FieldtypeLanguageInterface' when defining your class.
*
*/
}
/** /**
* Interface for tracking runtime events * Interface for tracking runtime events
* *

View File

@@ -1,16 +1,4 @@
<?php namespace ProcessWire; <?php namespace ProcessWire;
/** // moved to /wire/core/Interfaces.php
* Interface used to indicate that the Fieldtype supports multiple languages
*
*/
interface FieldtypeLanguageInterface {
/*
* This interface is symbolic only and doesn't require any additional methods,
* however you do need to add an 'implements FieldtypeLanguageInterface' when defining your class.
*
*/
}

View File

@@ -25,6 +25,11 @@ class FieldtypeTextLanguage extends FieldtypeText implements FieldtypeLanguageIn
/** /**
* Sanitize value for storage * Sanitize value for storage
*
* @param Page $page
* @param Field $field
* @param LanguagesValueInterface|string $value
* @return LanguagesPageFieldValue
* *
*/ */
public function sanitizeValue(Page $page, Field $field, $value) { public function sanitizeValue(Page $page, Field $field, $value) {
@@ -42,19 +47,23 @@ class FieldtypeTextLanguage extends FieldtypeText implements FieldtypeLanguageIn
/** /**
* Return the database schema in specified format * Return the database schema in specified format
*
* @param Field $field
* @return array
* *
*/ */
public function getDatabaseSchema(Field $field) { public function getDatabaseSchema(Field $field) {
$schema = parent::getDatabaseSchema($field); $schema = parent::getDatabaseSchema($field);
$languageSupport = $this->wire('modules')->get('LanguageSupport'); $languageSupport = $this->wire('modules')->get('LanguageSupport');
$maxIndex = (int) $this->wire('database')->getMaxIndexLength();
// note that we use otherLanguagePageIDs rather than wire('languages') because // note that we use otherLanguagePageIDs rather than wire('languages') because
// it's possible that this method may be called before the languages are known // it's possible that this method may be called before the languages are known
foreach($languageSupport->otherLanguagePageIDs as $languageID) { foreach($languageSupport->otherLanguagePageIDs as $languageID) {
// $schema['data' . $languageID] = $schema['data']; // $schema['data' . $languageID] = $schema['data'];
$schema['data' . $languageID] = 'text'; $schema['data' . $languageID] = 'text';
$schema['keys']["data_exact{$languageID}"] = "KEY `data_exact{$languageID}` (`data{$languageID}`(250))"; $schema['keys']["data_exact{$languageID}"] = "KEY `data_exact{$languageID}` (`data{$languageID}`($maxIndex))";
$schema['keys']["data{$languageID}"] = "FULLTEXT KEY `data{$languageID}` (`data{$languageID}`)"; $schema['keys']["data{$languageID}"] = "FULLTEXT KEY `data{$languageID}` (`data{$languageID}`)";
} }
@@ -62,7 +71,12 @@ class FieldtypeTextLanguage extends FieldtypeText implements FieldtypeLanguageIn
} }
/** /**
* Format value for output, basically typcasting to a string and sending to textformatters from FieldtypeText * Format value for output, basically typecasting to a string and sending to textformatters from FieldtypeText
*
* @param Page $page
* @param Field $field
* @param LanguagesValueInterface|string $value
* @return string
* *
*/ */
public function formatValue(Page $page, Field $field, $value) { public function formatValue(Page $page, Field $field, $value) {

View File

@@ -51,6 +51,8 @@ class LanguagesPageFieldValue extends Wire implements LanguagesValueInterface, \
/** /**
* Construct the multi language value * Construct the multi language value
* *
* @param Page $page
* @param Field $field
* @param array|string $values * @param array|string $values
* *
*/ */

View File

@@ -210,14 +210,16 @@ class ProcessField extends Process implements ConfigurableModule {
$field = $this->modules->get("InputfieldSelect"); $field = $this->modules->get("InputfieldSelect");
$field->attr('id+name', 'fieldtype'); $field->attr('id+name', 'fieldtype');
$field->addOption('', $showAllLabel); $field->addOption('', $showAllLabel);
foreach($this->fieldtypes as $fieldtype) $field->addOption($fieldtype->name, $fieldtype->shortName); foreach($this->fieldtypes as $fieldtype) {
$this->session->ProcessFieldListFieldtype = $this->sanitizer->name($this->input->get->fieldtype); $field->addOption($fieldtype->name, $fieldtype->longName);
}
$this->session->set('ProcessFieldListFieldtype', $this->sanitizer->name($this->input->get('fieldtype')));
$field->label = $this->_('Filter by Field Type'); $field->label = $this->_('Filter by Field Type');
$field->description = $this->_('When specified, only fields of the selected type will be shown. Built-in fields are also shown when filtering by field type.'); // Filter by fieldtype description $field->description = $this->_('When specified, only fields of the selected type will be shown. Built-in fields are also shown when filtering by field type.'); // Filter by fieldtype description
$value = $this->session->ProcessFieldListFieldtype; $value = $this->session->get('ProcessFieldListFieldtype');
$field->attr('value', $value); $field->attr('value', $value);
if($value && $fieldtype = $this->fieldtypes->get($value)) { if($value && $fieldtype = $this->fieldtypes->get($value)) {
$form->description = sprintf($this->_('Showing fields of type: %s'), $fieldtype->shortName); $form->description = sprintf($this->_('Showing fields of type: %s'), $fieldtype->longName);
$fieldset->collapsed = Inputfield::collapsedNo; $fieldset->collapsed = Inputfield::collapsedNo;
} else { } else {
$field->collapsed = Inputfield::collapsedYes; $field->collapsed = Inputfield::collapsedYes;
@@ -458,7 +460,7 @@ class ProcessField extends Process implements ConfigurableModule {
return array( return array(
$field->name => "edit?id={$field->id}", $field->name => "edit?id={$field->id}",
$icon . $this->sanitizer->entities($field->getLabel()), $icon . $this->sanitizer->entities($field->getLabel()),
$field->type->shortName, $this->sanitizer->entities($field->type->longName),
"$flagsOut<a href='$numTemplatesLink'>$numTemplates</a>" "$flagsOut<a href='$numTemplatesLink'>$numTemplates</a>"
); );
} }
@@ -1057,12 +1059,21 @@ class ProcessField extends Process implements ConfigurableModule {
else $fieldtypes = $this->fieldtypes; else $fieldtypes = $this->fieldtypes;
if($fieldtypes && count($fieldtypes)) { if($fieldtypes && count($fieldtypes)) {
foreach($fieldtypes->sort('name') as $fieldtype) { $fieldtypeLabels = array();
if(!$this->config->advanced && $fieldtype->isAdvanced() && $this->field->name != 'title' && $field->value != $fieldtype->className()) continue; foreach($fieldtypes as $fieldtype) {
$field->addOption($fieldtype->name, $fieldtype->shortName); $label = $fieldtype->longName;
if(isset($fieldtypeLabels[$label])) $label .= " ($fieldtype->name)";
$fieldtypeLabels[$label] = $fieldtype;
}
ksort($fieldtypeLabels);
$advanced = $this->config->advanced;
foreach($fieldtypeLabels as $label => $fieldtype) {
if(!$advanced && $fieldtype->isAdvanced() && $this->field->name != 'title'
&& $field->value != $fieldtype->className()) continue;
$field->addOption($fieldtype->name, $label);
} }
} else { } else {
$field->addOption($this->field->type->name, $this->field->type->shortName); $field->addOption($this->field->type->name, $this->field->type->longName);
} }
if(!$this->field->id) { if(!$this->field->id) {
@@ -1725,7 +1736,7 @@ class ProcessField extends Process implements ConfigurableModule {
$form = $this->modules->get("InputfieldForm"); $form = $this->modules->get("InputfieldForm");
$form->attr('method', 'post'); $form->attr('method', 'post');
$form->attr('action', 'saveChangeType'); $form->attr('action', 'saveChangeType');
$form->head = sprintf($this->_('Change field type from "%1$s" to "%2$s"'), $this->field->type->shortName, $newType->shortName); $form->head = sprintf($this->_('Change field type from "%1$s" to "%2$s"'), $this->field->type->longName, $newType->longName);
$form->description = $this->_("Please note that changing the field type alters the database schema. If the new fieldtype is not compatible with the old, or if it contains a significantly different schema, it is possible for data loss to occur. As a result, you are advised to backup the database before completing a field type change."); // Change field type description $form->description = $this->_("Please note that changing the field type alters the database schema. If the new fieldtype is not compatible with the old, or if it contains a significantly different schema, it is possible for data loss to occur. As a result, you are advised to backup the database before completing a field type change."); // Change field type description
$f = $this->modules->get("InputfieldCheckbox"); $f = $this->modules->get("InputfieldCheckbox");