Version 4.7.0

This commit is contained in:
Neo committed 2025-12-19 16:00:35 -08:00
1 parent 517a5e1f70
commit 8ba7d43898
1933 files changed
+65613 -11332

No files matched your search

+56 -21
View File
@@ -43,6 +43,16 @@ abstract class _CustomField extends \IPS\Node\Model
* @brief [CustomField] Additional Field Toggles
*/
public static $additionalFieldToggles = array();
/**
* @brief [CustomField] An array of the 'keys' of the Field types toggles that shouldn't be an option. The main use is for excluding polls
*/
public static $disabledFieldTypes = array();
/**
* @brief [CustomField] Set to TRUE if uploads fields are capable of holding the submitted content for moderation
*/
public static $uploadsCanBeModerated = FALSE;
/**
* Get
@@ -96,6 +106,14 @@ abstract class _CustomField extends \IPS\Node\Model
public function form( &$form )
{
$form->addHeader( 'pfield_settings' );
/* Are we being forced to change the field type? */
if ( !$this->_new AND isset( $this->type ) AND \in_array( $this->type, static::$disabledFieldTypes ) )
{
//\IPS\Member::loggedIn()->language()->words['pf_type_deprecated'] = \IPS\Member::loggedIn()->language()->addToStack('custom_field_type_deprecated');
$form->addMessage( 'custom_field_type_deprecated', 'ipsMessage ipsMessage_info ipsMargin' );
}
$form->add( new \IPS\Helpers\Form\Translatable( 'pf_title', NULL, TRUE, array( 'app' => 'core', 'key' => ( $this->id ? static::$langKey . '_' . $this->id : NULL ) ) ) );
$form->add( new \IPS\Helpers\Form\Translatable( 'pf_desc', NULL, FALSE, array( 'app' => 'core', 'key' => ( $this->id ? static::$langKey . '_' . $this->id . '_desc' : NULL ) ) ) );
@@ -127,28 +145,36 @@ abstract class _CustomField extends \IPS\Node\Model
'Url' => 'pf_type_Url',
'YesNo' => 'pf_type_YesNo',
), static::$additionalFieldTypes );
$toggles = array(
'CheckboxSet' => array( 'pf_content', 'pf_not_null', 'pf_search_type_on_off', "{$form->id}_header_pfield_displayoptions", $this->fieldFormattingId ),
'Codemirror' => array( 'pf_not_null', 'pf_max_input', "{$form->id}_header_pfield_displayoptions", $this->fieldFormattingId ),
'Email' => array( 'pf_not_null', 'pf_max_input', 'pf_input_format', 'pf_search_type', "{$form->id}_header_pfield_displayoptions", $this->fieldFormattingId ),
'Member' => array( 'pf_not_null', 'pf_multiple', "{$form->id}_header_pfield_displayoptions", $this->fieldFormattingId ),
'Password' => array( 'pf_not_null', 'pf_max_input', 'pf_input_format', "{$form->id}_header_pfield_displayoptions", $this->fieldFormattingId ),
'Select' => array( 'pf_not_null', 'pf_content', 'pf_multiple', 'pf_search_type_on_off', "{$form->id}_header_pfield_displayoptions", $this->fieldFormattingId ),
'Tel' => array( 'pf_not_null', 'pf_max_input', 'pf_input_format', 'pf_search_type', "{$form->id}_header_pfield_displayoptions", $this->fieldFormattingId ),
'Text' => array( 'pf_not_null', 'pf_max_input', 'pf_input_format', 'pf_search_type', "{$form->id}_header_pfield_displayoptions", $this->fieldFormattingId ),
'TextArea' => array( 'pf_not_null', 'pf_max_input', 'pf_input_format', 'pf_search_type', "{$form->id}_header_pfield_displayoptions", $this->fieldFormattingId ),
'Url' => array( 'pf_not_null', 'pf_max_input', 'pf_input_format', 'pf_search_type', "{$form->id}_header_pfield_displayoptions", $this->fieldFormattingId ),
'Radio' => array( 'pf_content', "{$form->id}_header_pfield_displayoptions", 'pf_search_type_on_off', $this->fieldFormattingId ),
'Address' => array( 'pf_not_null', "{$form->id}_header_pfield_displayoptions", $this->fieldFormattingId ),
'Color' => array( 'pf_not_null', "{$form->id}_header_pfield_displayoptions", $this->fieldFormattingId ),
'Date' => array( 'pf_not_null', "{$form->id}_header_pfield_displayoptions", $this->fieldFormattingId ),
'Editor' => array( 'pf_not_null', "{$form->id}_header_pfield_displayoptions", $this->fieldFormattingId, 'pf_search_type', 'pf_allow_attachments' ),
'Number' => array( 'pf_not_null', "{$form->id}_header_pfield_displayoptions", $this->fieldFormattingId ),
'CheckboxSet' => array( 'pf_content', 'pf_not_null', 'pf_search_type_on_off', "{$form->id}_header_pfield_displayoptions" ),
'Codemirror' => array( 'pf_not_null', 'pf_max_input', "{$form->id}_header_pfield_displayoptions" ),
'Email' => array( 'pf_not_null', 'pf_max_input', 'pf_input_format', 'pf_search_type', "{$form->id}_header_pfield_displayoptions" ),
'Member' => array( 'pf_not_null', 'pf_multiple', "{$form->id}_header_pfield_displayoptions" ),
'Password' => array( 'pf_not_null', 'pf_max_input', 'pf_input_format', "{$form->id}_header_pfield_displayoptions" ),
'Select' => array( 'pf_not_null', 'pf_content', 'pf_multiple', 'pf_search_type_on_off', "{$form->id}_header_pfield_displayoptions" ),
'Tel' => array( 'pf_not_null', 'pf_max_input', 'pf_input_format', 'pf_search_type', "{$form->id}_header_pfield_displayoptions" ),
'Text' => array( 'pf_not_null', 'pf_max_input', 'pf_input_format', 'pf_search_type', "{$form->id}_header_pfield_displayoptions" ),
'TextArea' => array( 'pf_not_null', 'pf_max_input', 'pf_input_format', 'pf_search_type', "{$form->id}_header_pfield_displayoptions" ),
'Url' => array( 'pf_not_null', 'pf_max_input', 'pf_input_format', 'pf_search_type', "{$form->id}_header_pfield_displayoptions" ),
'Radio' => array( 'pf_content', "{$form->id}_header_pfield_displayoptions", 'pf_search_type_on_off' ),
'Address' => array( 'pf_not_null', "{$form->id}_header_pfield_displayoptions" ),
'Color' => array( 'pf_not_null', "{$form->id}_header_pfield_displayoptions" ),
'Date' => array( 'pf_not_null', "{$form->id}_header_pfield_displayoptions" ),
'Editor' => array( 'pf_not_null', "{$form->id}_header_pfield_displayoptions", 'pf_search_type', 'pf_allow_attachments' ),
'Number' => array( 'pf_not_null', "{$form->id}_header_pfield_displayoptions"),
'Poll' => array( 'pf_not_null' ),
'Rating' => array( 'pf_not_null', "{$form->id}_header_pfield_displayoptions", $this->fieldFormattingId ),
'Upload' => array( 'pf_not_null', "{$form->id}_header_pfield_displayoptions", $this->fieldFormattingId ),
'Rating' => array( 'pf_not_null', "{$form->id}_header_pfield_displayoptions" ),
'Upload' => array( 'pf_not_null', "{$form->id}_header_pfield_displayoptions" ),
);
foreach( $options as $id => $toggle )
{
$toggles[$id][] = $this->fieldFormattingId;
}
foreach ( static::$additionalFieldTypes as $k => $v )
{
$toggles[ $k ] = isset( static::$additionalFieldToggles[ $k ] ) ? static::$additionalFieldToggles[ $k ] : array( 'pf_not_null' );
@@ -164,13 +190,20 @@ abstract class _CustomField extends \IPS\Node\Model
$toggles[ $k ] = $v;
}
}
/* Remove the disabled fields */
foreach( static::$disabledFieldTypes as $type )
{
unset( $options[ $type ] );
unset( $toggles[ $type ] );
}
ksort( $options );
if ( !$this->_new )
{
\IPS\Member::loggedIn()->language()->words['pf_type_warning'] = \IPS\Member::loggedIn()->language()->addToStack('custom_field_change');
foreach ( $toggles as $k => $_toggles )
{
if ( !$this->canKeepValueOnChange( $k ) )
@@ -746,7 +779,8 @@ abstract class _CustomField extends \IPS\Node\Model
case 'Upload':
$options['storageExtension'] = static::$uploadStorageExtension;
if( $value )
$options['canBeModerated'] = static::$uploadsCanBeModerated;
if( $value )
{
try
{
@@ -775,6 +809,7 @@ abstract class _CustomField extends \IPS\Node\Model
break;
case 'Member':
$options['autocomplete']['minimized'] = false;
$options['multiple'] = $this->multiple ? NULL : 1;
if ( $value )
{
@@ -1020,7 +1055,7 @@ abstract class _CustomField extends \IPS\Node\Model
return ( $value AND $value !== '#' ) ? \IPS\Theme::i()->getTemplate( 'forms', 'core', 'global' )->colorDisplay( $value ) : '';
case 'Date':
return \IPS\DateTime::ts( $value, TRUE )->localeDate(); // See buildHelper for why we ignore the timezone
return $value ? \IPS\DateTime::ts( $value, TRUE )->localeDate() : ''; // See buildHelper for why we ignore the timezone
case 'Editor':
return $value;