Invision Power Services, Inc. * @copyright (c) Invision Power Services, Inc. * @license https://www.invisioncommunity.com/legal/standards/ * @package Invision Community * @since 10 Apr 2013 */ namespace IPS\core\ProfileFields; /* To prevent PHP errors (extending class does not exist) revealing path */ use IPS\Helpers\Form; use IPS\Helpers\Form\Translatable; use IPS\Http\Url; use IPS\Lang; use IPS\Node\Model; use function defined; if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) ) { header( ( $_SERVER['SERVER_PROTOCOL'] ?? 'HTTP/1.0' ) . ' 403 Forbidden' ); exit; } /** * Custom Profile Field Group Node */ class Group extends Model { /** * @brief [ActiveRecord] Multiton Store */ protected static array $multitons; /** * @brief [ActiveRecord] Database Table */ public static ?string $databaseTable = 'core_pfields_groups'; /** * @brief [ActiveRecord] Database Prefix */ public static string $databasePrefix = 'pf_group_'; /** * @brief [ActiveRecord] ID Database Column */ public static string $databaseColumnId = 'id'; /** * @brief [Node] Order Database Column */ public static ?string $databaseColumnOrder = 'order'; /** * @brief [Node] Node Title */ public static string $nodeTitle = 'profile_fields'; /** * @brief [Node] Subnode class */ public static ?string $subnodeClass = 'IPS\core\ProfileFields\Field'; /** * @brief [Node] Show forms modally? */ public static bool $modalForms = TRUE; /** * @brief [Node] ACP Restrictions */ protected static ?array $restrictions = array( 'app' => 'core', 'module' => 'membersettings', 'prefix' => 'profilefieldgroups_', ); /** * @brief [Node] Title prefix. If specified, will look for a language key with "{$key}_title" as the key */ public static ?string $titleLangPrefix = 'core_pfieldgroups_'; /** * [Node] Add/Edit Form * * @param Form $form The form * @return void */ public function form( Form &$form ) : void { $form->add( new Translatable( 'pfield_group_title', NULL, TRUE, array( 'app' => 'core', 'key' => ( $this->id ? "core_pfieldgroups_{$this->id}" : NULL ) ) ) ); } /** * [Node] Save Add/Edit Form * * @param array $values Values from the form * @return mixed */ public function saveForm( array $values ): mixed { if ( !$this->id ) { $this->save(); } Lang::saveCustom( 'core', "core_pfieldgroups_{$this->id}", $values['pfield_group_title'] ); return NULL; } /** * [Node] Does the currently logged in user have permission to edit permissions for this node? * * @return bool */ public function canManagePermissions(): bool { return false; } /** * [Node] Get buttons to display in tree * Example code explains return value * * @code * array( * array( * 'icon' => 'plus-circle', // Name of FontAwesome icon to use * 'title' => 'foo', // Language key to use for button's title parameter * 'link' => \IPS\Http\Url::internal( 'app=foo...' ) // URI to link to * 'class' => 'modalLink' // CSS Class to use on link (Optional) * ), * ... // Additional buttons * ); * @endcode * @param Url $url Base URL * @param bool $subnode Is this a subnode? * @return array */ public function getButtons( Url $url, bool $subnode=FALSE ):array { $buttons = parent::getButtons( $url, $subnode ); $buttons['add']['title'] = 'add_profile_field'; return $buttons; } }