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

+36 -13
View File
@@ -135,6 +135,11 @@ class _Fields extends \IPS\CustomField implements \IPS\Node\Permissions
* @brief [CustomField] Upload storage extension
*/
protected static $uploadStorageExtension = 'cms_Records';
/**
* @brief [CustomField] Set to TRUE if uploads fields are capable of holding the submitted content for moderation
*/
public static $uploadsCanBeModerated = TRUE;
/**
* @brief [CustomField] Cache retrieved fields
@@ -334,6 +339,8 @@ class _Fields extends \IPS\CustomField implements \IPS\Node\Permissions
foreach( static::roots( $permissionCheck ) as $row )
{
$row->required = (bool) $row->required;
if ( $container !== NULL AND $database->use_categories )
{
if ( $container->fields !== '*' AND $container->fields !== NULL )
@@ -1480,15 +1487,15 @@ class _Fields extends \IPS\CustomField implements \IPS\Node\Permissions
if ( $start and $end )
{
return \IPS\Member::loggedIn()->language()->addToStack('field_daterange_start_end', NULL, array( 'sprintf' => array( $start, $end ) ) );
return \IPS\Member::loggedIn()->language()->addToStack( 'field_daterange_start_end', FALSE, array( 'sprintf' => array( $start, $end ) ) );
}
else if ( $start )
{
return \IPS\Member::loggedIn()->language()->addToStack('field_daterange_start', NULL, array( 'sprintf' => array( $start ) ) );
return \IPS\Member::loggedIn()->language()->addToStack( 'field_daterange_start', FALSE, array( 'sprintf' => array( $start ) ) );
}
else if ( $end )
{
return \IPS\Member::loggedIn()->language()->addToStack('field_daterange_end', NULL, array( 'sprintf' => array( $end ) ) );
return \IPS\Member::loggedIn()->language()->addToStack( 'field_daterange_end', FALSE, array( 'sprintf' => array( $end ) ) );
}
else
{
@@ -1718,7 +1725,7 @@ class _Fields extends \IPS\CustomField implements \IPS\Node\Permissions
if ( !$ok )
{
\IPS\Output::i()->output .= \IPS\Theme::i()->getTemplate( 'global', 'core', 'global' )->message( \IPS\Member::loggedIn()->language()->addToStack( 'cms_field_no_type_warning', NULL, array( 'sprintf' => array( $this->type ) ) ), 'warning', NULL, FALSE );
\IPS\Output::i()->output .= \IPS\Theme::i()->getTemplate( 'global', 'core', 'global' )->message( \IPS\Member::loggedIn()->language()->addToStack( 'cms_field_no_type_warning', FALSE, array( 'sprintf' => array( $this->type ) ) ), 'warning', NULL, FALSE );
}
}
@@ -1765,7 +1772,7 @@ class _Fields extends \IPS\CustomField implements \IPS\Node\Permissions
'Email' => array_merge( array( 'field_max_length', 'field_default_value', 'field_unique' ), $displayDefaults ),
'Item' => array_merge( array( 'field_is_multiple', 'field_relational_db', 'field_crosslink' ), $displayDefaults ),
'Member' => array_merge( array( 'field_is_multiple', 'field_unique' ), $displayDefaults ),
'Number' => array_merge( array( 'field_default_value', 'field_number_decimals_on', 'field_number_decimals', 'field_unique' ), $displayDefaults ),
'Number' => array_merge( array( 'field_default_value', 'field_number_decimals_on', 'field_number_decimals', 'field_unique', 'field_number_min', 'field_number_max' ), $displayDefaults ),
'Password' => array_merge( array( 'field_default_value' ), $displayDefaults ),
'Radio' => array_merge( array( 'field_extra', 'field_default_value', 'field_truncate', 'field_unique' ), $displayDefaults ),
'Select' => array_merge( array( 'field_extra', 'field_default_value', 'field_is_multiple', 'field_truncate', 'field_unique' ), $displayDefaults ),
@@ -1851,7 +1858,7 @@ class _Fields extends \IPS\CustomField implements \IPS\Node\Permissions
else
{
$disabled[] = $db->id;
$databases[ $db->id ] = \IPS\Member::loggedIn()->language()->addToStack( 'cms_db_relational_with_name_disabled', NULL, array( 'sprintf' => array( $db->_title ) ) );
$databases[ $db->id ] = \IPS\Member::loggedIn()->language()->addToStack( 'cms_db_relational_with_name_disabled', FALSE, array( 'sprintf' => array( $db->_title ) ) );
}
}
if ( ! \count( $databases ) )
@@ -1865,9 +1872,11 @@ class _Fields extends \IPS\CustomField implements \IPS\Node\Permissions
}
/* Number specific */
$form->add( new \IPS\Helpers\Form\Number( 'field_number_min', $this->id and isset( $this->extra['min'] ) ? $this->extra['min'] : NULL, FALSE, array( 'unlimited' => '', 'unlimitedLang' => 'any' ), NULL, NULL, NULL, 'field_number_min' ) );
$form->add( new \IPS\Helpers\Form\Number( 'field_number_max', $this->id and isset( $this->extra['max'] ) ? $this->extra['max'] : NULL, FALSE, array( 'unlimited' => '', 'unlimitedLang' => 'any' ), NULL, NULL, NULL, 'field_number_max' ) );
$form->add( new \IPS\Helpers\Form\YesNo( 'field_number_decimals_on', $this->id ? ( ( isset( $this->extra['on'] ) and $this->extra['on'] ) ? TRUE : FALSE ) : FALSE, FALSE, array( 'togglesOn' => array( 'field_number_decimals' ) ), NULL, NULL, NULL, 'field_number_decimals_on' ) );
$form->add( new \IPS\Helpers\Form\Number( 'field_number_decimals', $this->id ? ( ( isset( $this->extra['places'] ) and $this->extra['places'] ) ? $this->extra['places'] : 0 ) : 0, FALSE, array( 'max' => 6 ), NULL, NULL, NULL, 'field_number_decimals' ) );
/* Upload specific */
$form->add( new \IPS\Helpers\Form\YesNo( 'field_upload_is_multiple', $this->id ? $this->is_multiple : 0, FALSE, array( ), NULL, NULL, NULL, 'field_upload_is_multiple' ) );
@@ -2007,10 +2016,9 @@ class _Fields extends \IPS\CustomField implements \IPS\Node\Permissions
if ( isset( \IPS\Request::i()->database_id ) )
{
$usingForum = \IPS\cms\Databases::load( \IPS\Request::i()->database_id )->forum_record;
if ( ! $usingForum and $this->id )
{
$usingForum = \IPS\Db::i()->select( 'COUNT(*)', 'cms_database_categories', array( 'category_database_id=? and category_forum_override=1 and category_forum_record=1', $this->id ) );
$usingForum = \IPS\Db::i()->select( 'COUNT(*)', 'cms_database_categories', array( 'category_database_id=? and category_forum_override=1 and category_forum_record=1', $this->id ) )->first();
}
if ( $usingForum )
@@ -2277,6 +2285,7 @@ class _Fields extends \IPS\CustomField implements \IPS\Node\Permissions
$columnDefinition['type'] = 'INT';
$columnDefinition['length'] = 10;
$values['field_extra'] = '';
$values['default_value'] = ( isset( $values['default_value'] ) ) ? (int) $values['default_value'] : NULL;
break;
case 'Number':
if ( isset( $values['field_number_decimals_on'] ) and $values['field_number_decimals_on'] and $values['field_number_decimals'] )
@@ -2711,9 +2720,9 @@ class _Fields extends \IPS\CustomField implements \IPS\Node\Permissions
}
/* Special number stuff */
if ( isset( $values['field_type'] ) AND $values['field_type'] === 'Number' AND isset( $values['field_number_decimals_on'] ) )
if ( isset( $values['field_type'] ) AND $values['field_type'] === 'Number' AND ( isset( $values['field_number_decimals_on'] ) or isset( $values['field_number_min'] ) or isset( $values['field_number_max'] ) ) )
{
$values['extra'] = array( 'on' => (boolean) $values['field_number_decimals_on'], 'places' => $values['field_number_decimals'] );
$values['extra'] = array( 'on' => (boolean) $values['field_number_decimals_on'], 'places' => $values['field_number_decimals'], 'min' => $values['field_number_min'], 'max' => $values['field_number_max'] );
}
/* Remove the filter flag if this field cannot be filtered */
@@ -2728,7 +2737,7 @@ class _Fields extends \IPS\CustomField implements \IPS\Node\Permissions
$this->_oldDefaultValue = $this->default_value;
}
foreach( array( 'field_crosslink', 'field_number_decimals_on', 'field_number_decimals', 'field_format_opts_on', 'field_relational_db', 'field_upload_is_multiple', 'field_default_update_existing', 'field_date_time_override', 'field_date_timezone', 'field_date_time_time', 'field_upload_is_image', 'field_image_size', 'field_upload_thumb', 'field_title', 'field_display_display_json_badge', 'field_display_display_json_custom', 'field_display_listing_json_badge', 'field_display_listing_json_custom', 'field_display_listing_json_badge_right', 'media_display_listing_method', 'media_display_display_method', 'field_show_map_listing', 'field_show_map_listing_dims', 'field_show_map_display', 'field_show_map_display_dims', 'field_display_display_json_where' ) as $field )
foreach( array( 'field_crosslink', 'field_number_decimals_on', 'field_number_decimals', 'field_number_min', 'field_number_max', 'field_format_opts_on', 'field_relational_db', 'field_upload_is_multiple', 'field_default_update_existing', 'field_date_time_override', 'field_date_timezone', 'field_date_time_time', 'field_upload_is_image', 'field_image_size', 'field_upload_thumb', 'field_title', 'field_display_display_json_badge', 'field_display_display_json_custom', 'field_display_listing_json_badge', 'field_display_listing_json_custom', 'field_display_listing_json_badge_right', 'media_display_listing_method', 'media_display_display_method', 'field_show_map_listing', 'field_show_map_listing_dims', 'field_show_map_display', 'field_show_map_display_dims', 'field_display_display_json_where' ) as $field )
{
if ( array_key_exists( $field, $values ) )
{
@@ -2867,6 +2876,9 @@ class _Fields extends \IPS\CustomField implements \IPS\Node\Permissions
}
catch( \IPS\Db\Exception $e ) { }
}
\IPS\Lang::deleteCustom( 'cms', "content_field_{$this->id}_desc" );
\IPS\Lang::deleteCustom( 'cms', "content_field_{$this->id}_validation_error" );
}
/**
@@ -2929,13 +2941,14 @@ class _Fields extends \IPS\CustomField implements \IPS\Node\Permissions
break;
case 'Upload':
$options['storageExtension'] = static::$uploadStorageExtension;
$options['canBeModerated'] = static::$uploadsCanBeModerated;
if ( isset( $this->extra['type'] ) )
{
if ( $this->extra['type'] === 'image' )
{
$options['allowStockPhotos'] = TRUE;
$options['image'] = array( 'maxWidth' => $this->extra['maxsize'][0], 'maxHeight' => $this->extra['maxsize'][1] );
$options['image'] = array( 'maxWidth' => $this->extra['maxsize'][0] ?: NULL, 'maxHeight' => $this->extra['maxsize'][1] ?: NULL );
}
else
{
@@ -3098,6 +3111,16 @@ class _Fields extends \IPS\CustomField implements \IPS\Node\Permissions
$options['decimals'] = $this->extra['places'];
}
if ( isset( $this->extra['min'] ) and $this->extra['min'] )
{
$options['min'] = $this->extra['min'];
}
if ( isset( $this->extra['max'] ) and $this->extra['max'])
{
$options['max'] = $this->extra['max'];
}
if( !$this->required )
{
$options['unlimited'] = '';