Version 5.0.0 beta 5

This commit is contained in:
Neo committed 2025-12-19 17:04:22 -08:00
1 parent 2f24f9de48
commit 57d9db6ce2
218 files changed
+5331 -7416

No files matched your search

@@ -36,26 +36,26 @@ class {class} extends AchievementActionAbstract // NOTE: Other classes exist to
* @param Url $url The URL the form is being shown on
* @return array
*/
public function filters( ?array $filters, Url $url ): array
{
return [];
}
//public function filters( ?array $filters, Url $url ): array
//{
// return [];
//}
/**
* Format filter form values
*
* @param array $values The values from the form
* @return array
*/
public function formatFilterValues( array $values ): array
{
return [];
}
//public function formatFilterValues( array $values ): array
//{
// return [];
//}
/**
* Work out if the filters applies for a given action
*
* Important note for milestones: consider the context. This method is called by \IPS\Member::achievementAction(). If your code
* Important note for milestones: consider the context. This method is called by \IPS\Member::achievementAction(). If your code
* calls that BEFORE making its change in the database (or there is read/write separation), you will need to add
* 1 to the value being considered for milestones
*
@@ -64,11 +64,11 @@ class {class} extends AchievementActionAbstract // NOTE: Other classes exist to
* @param mixed $extra Any additional information about what is happening (e.g. if a post is being made: the post object)
* @return bool
*/
public function filtersMatch( MemberClass $subject, array $filters, mixed $extra = NULL ): bool
{
return TRUE;
}
//public function filtersMatch( MemberClass $subject, array $filters, mixed $extra = NULL ): bool
//{
// return TRUE;
//}
/**
* Get the labels for the people this action might give awards to
*
@@ -52,37 +52,6 @@ class {class} extends AdminNotification
{
return 'acp_notification_{class}';
}
/**
* Can a member access this type of notification?
*
* @param MemberClass $member The member
* @return bool
*/
public static function permissionCheck( MemberClass $member ): bool
{
return true;// $member->hasAcpRestriction( ... );
}
/**
* Is this type of notification ever optional (controls if it will be selectable as "viewable" in settings)
*
* @return bool
*/
public static function mayBeOptional(): bool
{
return FALSE;
}
/**
* Is this type of notification might recur (controls what options will be available for the email setting)
*
* @return bool
*/
public static function mayRecur(): bool
{
return FALSE;
}
/**
* Notification Title (full HTML, must be escaped where necessary)
@@ -123,14 +92,4 @@ class {class} extends AdminNotification
{
return static::DISMISSIBLE_TEMPORARY;
}
/**
* Quick link from popup menu
*
* @return Url
*/
public function link(): Url
{
return parent::link(); // Url::internal( '...' );
}
}
@@ -49,16 +49,4 @@ class {class} extends AdvertisementLocationsAbstract
{
return array();
}
/**
* Check if the advertisement can be displayed, based on settings
*
* @param AdvertisementClass $advertisement
* @param string $location
* @return bool
*/
public function canShow( AdvertisementClass $advertisement, string $location ) : bool
{
return TRUE;
}
}
@@ -15,7 +15,6 @@ namespace IPS\{app}\extensions\core\ApprovalReason;
use IPS\core\Approval as ApprovalClass;
use IPS\Extensions\ApprovalReasonAbstract;
use RuntimeException;
use function defined;
if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
@@ -41,6 +40,8 @@ class {class} extends ApprovalReasonAbstract
/**
* Parse Reason
* Return an array with 2 elements: lang (the language string to use)
* and sprintf (an array of replacements)
*
* @param ApprovalClass $approval Approval row
* @return array
@@ -18,7 +18,6 @@ use IPS\Extensions\ClubAbstract;
use IPS\Http\Url;
use IPS\Member;
use IPS\Node\Model;
use RuntimeException;
use function defined;
if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
@@ -35,8 +34,8 @@ class {class} extends ClubAbstract
/**
* Tabs
*
* @param \IPS\Member\Club $club The club
* @param \IPS\Node\Model $container Container
* @param Club $club The club
* @param Model|null $container Container
* @return array
*/
public function tabs( Club $club, ?Model $container = NULL ): array
@@ -19,6 +19,7 @@ use IPS\Http\Url;
use IPS\Member as MemberClass;
use IPS\Output;
use IPS\Theme;
use IPS\Settings;
use LogicException;
use function defined;
@@ -30,12 +30,6 @@ if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
*/
class {class} extends ContentRouterAbstract
{
/**
* @brief Can be shown in similar content
*/
public bool $similarContent = FALSE;
/**
* Constructor
*
@@ -62,52 +62,6 @@ class {class} extends CustomFieldAbstract
return '';
}
/**
* Can be overridden by individual extension implementations
* to allow for a field to be available only in certain connditions
*
* @return bool
*/
public static function isEnabled() : bool
{
return true;
}
/**
* A list of form elements that will be toggled on when this field
* type is selected
* @see CustomField::$additionalFieldToggles
*
* @return array
*/
public static function fieldTypeToggles() : array
{
return [];
}
/**
* Add fields to the field creation form
*
* @param Form $form
* @param CustomField $field The field currently being modified
* @return void
*/
public static function form( Form $form, CustomField $field ) : void
{
}
/**
* Process values from the ACP Custom Field form
*
* @param array $values
* @return array
*/
public static function formatFormValues( array $values ) : array
{
return $values;
}
/**
* Display Value
* @see CustomField::displayValue()
@@ -76,39 +76,4 @@ class {class} extends EditorLocationsAbstract
return NULL;
// return Url::internal( ... );
}
/**
* Rebuild content post-upgrade
*
* @param int|null $offset Offset to start from
* @param int|null $max Maximum to parse
* @return int Number completed
* @note This method is optional and will only be called if it exists
*/
//public function rebuildContent( ?int $offset, ?int $max ): int
//{
//}
/**
* Rebuild content to add or remove lazy loading
*
* @param int|null $offset Offset to start from
* @param int|null $max Maximum to parse
* @param bool $status Enable/Disable lazy loading
* @return int Number completed
* @note This method is optional and will only be called if it exists
*/
//public function rebuildLazyLoad( ?int $offset, ?int $max, bool $status=TRUE ): int
//{
//}
/**
* Total content count to be used in progress indicator
*
* @return int Total Count
*/
//public function contentCount() : int
//{
// return \IPS\Db::i()->select( 'COUNT(*) as count', '...', "..." )->setKeyField('count')->first();
//}
}
@@ -45,28 +45,6 @@ class {class} extends FrontNavigationAbstract
return MemberClass::loggedIn()->language()->addToStack('frontnavigation_{app}');
}
/**
* Can this item be used at all?
* For example, if this will link to a particular feature which has been diabled, it should
* not be available, even if the user has permission
*
* @return bool
*/
public static function isEnabled(): bool
{
return TRUE;
}
/**
* Can the currently logged in user access the content this item links to?
*
* @return bool
*/
public function canAccessContent(): bool
{
return TRUE;
}
/**
* Get Title
*
@@ -96,15 +74,4 @@ class {class} extends FrontNavigationAbstract
{
return Dispatcher::i()->application->directory === '{app}';
}
/**
* Children
*
* @param bool $noStore If true, will skip datastore and get from DB (used for ACP preview)
* @return array|null
*/
public function children( bool $noStore=FALSE ): ?array
{
return NULL;
}
}
@@ -52,15 +52,4 @@ class {class} extends GroupFormAbstract
{
$group->example = $values['example'];
}
/**
* Can this group be deleted?
*
* @param SystemGroup $group The group
* @return bool
*/
public function canDelete( SystemGroup $group ): bool
{
return TRUE;
}
}
@@ -33,39 +33,6 @@ if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
class {class} extends IpAddressesAbstract
{
/**
* Removes the logged IP address
*
* @param int $time
* @return void
*/
public function pruneIpAddresses( int $time ) : void
{
//
}
/**
* Supported in the ACP IP address lookup tool?
*
* @return bool
* @note If the method does not exist in an extension, the result is presumed to be TRUE
*/
public function supportedInAcp(): bool
{
return TRUE;
}
/**
* Supported in the ModCP IP address lookup tool?
*
* @return bool
* @note If the method does not exist in an extension, the result is presumed to be TRUE
*/
public function supportedInModCp(): bool
{
return TRUE;
}
/**
* Find Records by IP
*
* @param string $ip The IP Address
@@ -28,16 +28,6 @@ if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
*/
class {class} extends LiveSearchAbstract
{
/**
* Constructor
*
* @return void
*/
public function __construct()
{
/* Check Permissions */
}
/**
* Get the search results
*
@@ -18,57 +18,5 @@ if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
*/
class {class} extends LoaderAbstract
{
/**
* Additional CSS files to load
*
* @return array<string|Url>
*/
public function css(): array
{
return [];
}
/**
* Additional JS files to load
*
* @return array<string|Url>
*/
public function js(): array
{
return [];
}
/**
* If a redirect is needed, return the URL
* or NULL to continue
*
* @return Url|null
*/
public function checkForRedirect() : Url|null
{
return null;
}
/**
* Show a custom error message or null to use the default
*
* @param string $message
* @param mixed $code
* @param int $httpStatusCode
* @return string|null
*/
public function customError( string $message, mixed $code, int $httpStatusCode ) : string|null
{
return null;
}
/**
* Run custom code right on Dispatcher::finish()
*
* @return void
*/
public function onFinish() : void
{
}
}
@@ -49,16 +49,4 @@ class {class} extends MainTab
'IPS\{app}\extensions\core\MemberACPProfileBlocks\BlockName',
);
}
/**
* Get right-column blocks
*
* @return array
*/
public function rightColumnBlocks(): array
{
return array(
'IPS\{app}\extensions\core\MemberACPProfileBlocks\BlockName',
);
}
}
@@ -35,7 +35,6 @@ class {class} extends MemberExportPiiAbstract
*/
public function getData( MemberClass $member ): array
{
$return = array();
return $return;
return array();
}
}
@@ -76,31 +76,4 @@ class {class} extends MemberFilterAbstract
{
return NULL;
}
/**
* Callback for member retrieval database query
* Can be used to set joins
*
* @param array $data The array returned from the save() method
* @param Select $query The query
* @return void
*/
public function queryCallback( array $data, Select $query ) : void
{
}
/**
* Determine if a member matches specified filters
*
* @note This is only necessary if availableIn() includes group_promotions
* @param MemberClass $member Member object to check
* @param array $filters Previously defined filters
* @param object|NULL $object Calling class
* @return bool
*/
public function matches( MemberClass $member, array $filters, ?object $object=NULL ): bool
{
return TRUE;
}
}
@@ -29,66 +29,4 @@ if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
*/
class {class} extends Restriction
{
/**
* Modify Edit Restrictions form
*
* @param Form $form The form
* @return void
*/
public function form( Form $form ) : void
{
// $form->add( ... );
}
/**
* Save Form
*
* @param array $values Values from form
* @return array
*/
public function save( array $values ): array
{
$return = array();
// $return['my_restriction'] = array( 'old' => $oldValue, 'new' => $values['my_restriction'] ); // used in changesForHistory()
// Db::i()->update( ... ); // Actually save the value
return $return;
}
/**
* What restrictions are active on the account?
*
* @return array
*/
public function activeRestrictions(): array
{
$return = array();
/*if ( ... )
{
$return[] = 'my_restricion';
}*/
return $return;
}
/**
* Get details of a change to show on history
*
* @param array $changes Changes as set in save()
* @param array $row Row of data from member history table.
* @return array
*/
public static function changesForHistory( array $changes, array $row ): array
{
$return = array();
if ( isset( $changes['my_restriction'] ) )
{
$return[] = MemberClass::loggedIn()->language()->addToStack( 'changed_my_restriction', FALSE, array( 'sprintf' => array( $changes['my_restriction']['new'], $changes['my_restriction']['new'] ) ) );
}
return $return;
}
}
@@ -52,27 +52,4 @@ class {class} extends ModeratorPermissionsAbstract
'can_delete_course_content' => "YesNo",*/
);
}
/**
* After change
*
* @param array $moderator The moderator
* @param array $changed Values that were changed
* @return void
*/
public function onChange( array $moderator, array $changed ) : void
{
}
/**
* After delete
*
* @param array $moderator The moderator
* @return void
*/
public function onDelete( array $moderator ) : void
{
}
}
@@ -60,42 +60,6 @@ class {class} extends NotificationsAbstract
//...
);
}
/**
* Save "extra" value
*
* @param MemberClass|NULL $member The member or NULL if this is the admin setting defaults
* @param string $key The key
* @param bool $value The value
* @return void
*/
public static function saveExtra( ?MemberClass $member, string $key, bool $value ) : void
{
// You can perform extra processing here to save values in a specific manner if needed
}
/**
* Disable all "extra" values for a particular type
*
* @param MemberClass|NULL $member The member or NULL if this is the admin setting defaults
* @param string $method The method type
* @return void
*/
public static function disableExtra( ?MemberClass $member, string $method ) : void
{
// You can disable extra values for a given type, such as if a setting means the notification preference is irrelevant
}
/**
* Reset "extra" value to the default for all accounts
*
* @return void
*/
public static function resetExtra() : void
{
// Any extra processing you may need to perform when resetting all members to default notification options.
// Typically you won't have to do anything here unless you have custom settings
}
// For each type of notification you need a method like this which controls what will be displayed when the user clicks on the notification icon in the header:
// Note that for each type of notification you must *also* create email templates. See documentation for details: https://remoteservices.invisionpower.com/docs/devdocs-notifications
@@ -49,17 +49,6 @@ class {class} extends ProfileStepsAbstract
{
return array( );
}
/**
* Can the actions have multiple choices?
*
* @param string $action Action key (basic_profile, etc)
* @return bool|null
*/
public static function actionMultipleChoice( string $action ): ?bool
{
return FALSE;
}
/**
* Has a specific step been completed?
@@ -72,54 +61,6 @@ class {class} extends ProfileStepsAbstract
{
return FALSE;
}
/**
* Can be set as required?
*
* @return array
* @note This is intended for items which have their own independent settings and dedicated enable pages, such as MFA and Social Login integration
*/
public static function canBeRequired(): array
{
return array();
}
/**
* Action URL
*
* @param string $action The action
* @param MemberClass|NULL $member The member, or NULL for currently logged in
* @return Url|null
*/
public function url( string $action, ?MemberClass $member = NULL ): ?Url
{
return null;
}
/**
* Post ACP Save
*
* @param ProfileStep $step The step
* @param array $values Form Values
* @return void
*/
public function postAcpSave( ProfileStep $step, array $values ) : void
{
}
/**
* Format Form Values
*
* @param array $values The values from the form
* @param MemberClass $member The member
* @param Form $form The form
* @return void
*/
public static function formatFormValues( array $values, MemberClass $member, Form $form ) : void
{
}
/**
* Wizard Steps
@@ -131,15 +72,4 @@ class {class} extends ProfileStepsAbstract
{
return array( );
}
/**
* Post Delete
*
* @param ProfileStep $step The step
* @return void
*/
public function onDelete( ProfileStep $step ) : void
{
}
}
@@ -64,16 +64,4 @@ class {class} extends QueueAbstract
{
return array( 'text' => 'Doing something...', 'complete' => 50 );
}
/**
* Perform post-completion processing
*
* @param array $data Data returned from preQueueData
* @param bool $processed Was anything processed or not? If preQueueData returns NULL, this will be FALSE.
* @return void
*/
public function postComplete( array $data, bool $processed = TRUE ) : void
{
}
}
@@ -28,59 +28,6 @@ if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
*/
class {class} extends SSOAbstract
{
/**
* Determine if the extension is currently enabled
*
* @return bool
*/
public function isEnabled(): bool
{
return true;
}
/**
* Returns an array of setting keys that will be overridden by this extension
* Example: post_before_registering might always return a value of 0
* Would return an array like [ 'post_before_registering' => 0 ]
*
* @return array
*/
public function overrideSettings(): array
{
return [];
}
/**
* Return URL guest should be redirected to for login
*
* @return Url|null
*/
public function loginUrl(): Url|null
{
return NULL;
}
/**
* Return URL guest should be redirect to for login
*
* @param Url $redirectUrl
* @return Url|null
*/
public function logoutUrl( Url $redirectUrl ): Url|null
{
return NULL;
}
/**
* Return URL user should visit to change display name
*
* @return Url|null
*/
public function displayNameChange(): Url|null
{
return NULL;
}
/**
* Custom logic executed on session init
*
@@ -103,14 +50,4 @@ class {class} extends SSOAbstract
{
return '';
}
/**
* Does SSO support login as?
*
* @return bool
*/
public function supportsLoginAs(): bool
{
return FALSE;
}
}
@@ -21,77 +21,8 @@ if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
*/
class {class} extends UIComment
{
/**
* @brief Class to extend
*/
public static ?string $class = '{comment}';
/**
* Can be used to add additional css classes to the comment
*
* @param BaseComment $comment
* @return string
*/
public function css( BaseComment $comment ): string
{
return '';
}
/**
* Can be used to add additional data attributes to the comment
*
* @param BaseComment $comment
* @return string
*/
public function dataAttributes( BaseComment $comment ): string
{
return '';
}
/**
* Can be used to attach additional content to the author panel
*
* @param BaseComment $comment
* @return string
*/
public function authorPanel( BaseComment $comment ): string
{
return '';
}
/**
* returns additional menu items for the comment menu
*
* @param BaseComment $comment
* @return array<string,MenuItem>
*/
public function menuItems( BaseComment $comment ): array
{
return [];
}
/**
* Add elements to the comment form
*
* @param BaseComment|null $comment
* @param BaseItem $item
* @return array<string,FormAbstract>
*/
public function formElements( ?BaseComment $comment, BaseItem $item ): array
{
return [];
}
/**
* Triggered after the comment form is saved
*
* @param BaseComment $comment
* @param array $values
* @return void
*/
public function formPostSave( BaseComment $comment, array $values ): void
{
}
}
@@ -26,141 +26,4 @@ class {class} extends UIItem
* @brief Class to extend
*/
public static ?string $class = '{item}';
/**
* Can be used to add additional css classes to the item
*
* @param BaseItem $item
* @return string
*/
public function css( BaseItem $item ): string
{
return '';
}
/**
* Can be used to add additional data attributes to the item
*
* @param BaseItem $item
* @return string
*/
public function dataAttributes( BaseItem $item ): string
{
return '';
}
/**
* returns additional menu items for the moderation menu
*
* @param BaseItem $item
* @return array
*/
public function menuItems( BaseItem $item ): array
{
return [];
}
/**
* Returns additional badge icons to display in the header
*
* @param BaseItem $item
* @return array<Icon>
*/
public function badges( BaseItem $item ) : array
{
return [];
}
/**
* Add elements to the item form.
* This method returns all elements that will be added.
* By default, all elements will be added in order at the end of the form.
* To specify placement within the form, @see FormAbstract::setPosition().
*
* @param BaseItem|null $item
* @param Model|null $container
* @return array<string,FormAbstract>
*/
public function formElements( ?BaseItem $item, ?Model $container ): array
{
return [];
}
/**
* Called after the Item form is saved
*
* @param BaseItem $item
* @param array $values
* @return void
*/
public function formPostSave( BaseItem $item, array $values ): void
{
}
/**
* Display content in the contextual sidebar
*
* @param BaseItem $item
* @return string
*/
public function sidebar( BaseItem $item ) : string
{
return "";
}
/**
* Add custom sort options to the content table for this class
* @note $item will ALWAYS be null.
*
* @param BaseItem|null $item
* @param Content $table
* @return array
*/
public function contentTableSortOptions( ?BaseItem $item, Content $table ) : array
{
return [];
}
/**
* Return the sort direction for the selected sort option,
* or NULL to use the default parent method.
*
* @note $item will ALWAYS be null.
*
* @param BaseItem|null $item
* @param Content $table
* @param string $sortBy
* @return string|null
*/
public function contentTableSortDirection( ?BaseItem $item, Content $table, string $sortBy ) : string|null
{
return null;
}
/**
* Add custom filters to the content table for this class
* @note $item will ALWAYS be null.
*
* @param BaseItem|null $item
* @param Content $table
* @return array
*/
public function contentTableFilters( ?BaseItem $item, Content $table ) : array
{
return [];
}
/**
* Add custom conditions to the where clause for a content table.
* @note $item will ALWAYS be null.
*
* @param BaseItem|null $item
* @param Content $table
* @return array
*/
public function contentTableWhere( ?BaseItem $item, Content $table ) : array
{
return [];
}
}
@@ -24,86 +24,4 @@ class {class} extends UINode
* @brief Class to extend
*/
public static ?string $class = '{node}';
/**
* Can be used to add additional css classes to the node
*
* @param Model $node
* @return array
*/
public function css( Model $node ): array
{
return [];
}
/**
* Can be used to add additional data attributes to the node
*
* @param Model $node
* @return string
*/
public function dataAttributes( Model $node ): string
{
return '';
}
/**
* Can be used to add buttons to the ACP tree row
* and to the view page in the ACP
*
* @param Model $node
* @return array
*/
public function rowButtons( Model $node ): array
{
return [];
}
/**
* Returns additional HTML to be displayed in the ACP tree row
*
* @param Model $node
* @return string
*/
public function rowHtml( Model $node ) : string
{
return '';
}
/**
* Return a badge to be displayed in the ACP tree row
*
* @param Model $node
* @return null|array Null for no badge, or an array of badge data (0 => CSS class type, 1 => language string, 2 => optional raw HTML to show instead of language string)
*/
public function rowBadge( Model $node ) : array|null
{
return null;
}
/**
* Add elements to the Node form
* This method returns all elements that will be added.
* By default, all elements will be added in order at the end of the form.
* To specify placement within the form, @see FormAbstract::setPosition().
*
* @param Model $node
* @return array<string,FormAbstract>
*/
public function formElements( Model $node ): array
{
return [];
}
/**
* Called after the Node form is saved
*
* @param Model $node
* @param array $values
* @return void
*/
public function formPostSave( Model $node, array $values ): void
{
}
}
@@ -26,72 +26,4 @@ class {class} extends UIReview
* @brief Class to extend
*/
public static ?string $class = '{review}';
/**
* Can be used to add additional css classes to the comment
*
* @param BaseComment $comment
* @return string
*/
public function css( BaseComment $comment ): string
{
return '';
}
/**
* Can be used to add additional data attributes to the comment
*
* @param BaseComment $comment
* @return string
*/
public function dataAttributes( BaseComment $comment ): string
{
return '';
}
/**
* Can be used to attach additional content to the author panel
*
* @param BaseComment $comment
* @return string
*/
public function authorPanel( BaseComment $comment ): string
{
return '';
}
/**
* returns additional menu items for the comment menu
*
* @param BaseComment $comment
* @return array<string,MenuItem>
*/
public function menuItems( BaseComment $comment ): array
{
return [];
}
/**
* Add elements to the comment form
*
* @param BaseComment|null $comment
* @param BaseItem $item
* @return array<string,FormAbstract>
*/
public function formElements( ?BaseComment $comment, BaseItem $item ): array
{
return [];
}
/**
* Triggered after the comment form is saved
*
* @param BaseComment $comment
* @param array $values
* @return void
*/
public function formPostSave( BaseComment $comment, array $values ): void
{
}
}
@@ -27,33 +27,5 @@ if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
*/
class {class} extends UninstallAbstract
{
/**
* Code to execute before the application has been uninstalled
*
* @param string $application Application directory
* @return void
*/
public function preUninstall( string $application ) : void
{
}
/**
* Code to execute after the application has been uninstalled
*
* @param string $application Application directory
* @return void
*/
public function postUninstall( string $application ) : void
{
}
/**
* Code to execute when other applications or plugins are uninstalled
*
* @param string $application Application directory
* @return void
*/
public function onOtherUninstall( string $application ) : void
{
}
}
@@ -20,58 +20,5 @@ if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
*/
class {class} extends MenuExtension
{
/**
* Used to add additional links to the user account menu
*
* @param string $position ( can be content, settings, logout )
* @return array<MenuItem>
*/
public function accountMenu( string $position = 'content' ): array
{
return [];
}
/**
* Used to add items to the mobile navigation Menu
*
* @param string $position (can be content, settings, logout)
* @return array<MenuItem>
*/
public function mobileMenu( string $position = 'content' ) : array
{
return [];
}
/**
* Used to add additional content to userbar
*
* @return string
*/
public function userNav(): string
{
return '';
}
/**
* Used to add content to the mobile navigation header
*
* @param string $position Where the code will be inserted (header/footer)
* @param string $iconLocation Where the main icons are currently located (header/footer)
* @return string
*/
public function mobileNav( string $position, string $iconLocation = 'footer' ) : string
{
return '';
}
/**
* Used to add items to the user profile menu
*
* @param MemberClass $member Member whose profile is being viewed
* @return array<MenuItem>
*/
public function editProfileMenu( MemberClass $member ) : array
{
return [];
}
}
@@ -16,6 +16,7 @@ namespace IPS\{app}\listeners;
use IPS\Content as ContentClass;
use IPS\Content\Comment as CommentClass;
use IPS\Content\Item as ItemClass;
use IPS\Db;
use IPS\Events\ListenerType\ContentListenerType;
use IPS\Node\Model;
use function defined;
@@ -36,120 +37,4 @@ class {filename} extends ContentListenerType
* @var string
*/
public static string $class = {class};
/**
* Fired when the item/comment is initialized (in constructFromData).
* Useful for loading additional tables or properties
*
* @param ContentClass $object
* @return void
*/
public function onLoad( ContentClass $object ) : void
{
}
/**
* Fired before an item is created/edited
*
* @note This event is NOT fired for comments.
* @param ContentClass $object
* @param array $values
* @param bool $new TRUE when fired before create; FALSE when fired before edit
* @return void
*/
public function onBeforeCreateOrEdit( ContentClass $object, array $values, bool $new = FALSE ) : void
{
}
/**
* Fired after an item/comment is created/edited
*
* @param ContentClass $object
* @param array $values
* @param bool $new TRUE when fired before create; FALSE when fired before edit
* @return void
*/
public function onCreateOrEdit( ContentClass $object, array $values, bool $new = FALSE ) : void
{
}
/**
* Fired when an item/comment is deleted
*
* @param ContentClass $object
* @return void
*/
public function onDelete( ContentClass $object ) : void
{
}
/**
* Fired when an action is taken on a particular item/comment.
* Example: pin, unpin, hide, unhide
* Note: merge is handled with a separate event
*
* @param ContentClass $object
* @param string $action
* @return void
*/
public function onStatusChange( ContentClass $object, string $action ) : void
{
}
/***
* Fired when items/comments are merged
* Note: this is fired AFTER the merge is complete.
*
* @param ContentClass $object
* @param array $items Old items/comments merged into this one
* @return void
*/
public function onMerge( ContentClass $object, array $items ) : void
{
}
/**
* Fired when an item is moved.
* Note: this is fired AFTER the move is complete.
*
* @param ItemClass $item
* @param Model $oldContainer Previous node
* @param bool $keepLink
* @return void
*/
public function onItemMove( ItemClass $item, Model $oldContainer, bool $keepLink = FALSE ) : void
{
}
/**
* Fired when a comment is moved.
* Note: this is fired AFTER the move is complete.
*
* @param CommentClass $comment
* @param ItemClass $oldItem
* @param bool $skip
* @return void
*/
public function onCommentMove( CommentClass $comment, ItemClass $oldItem, bool $skip = FALSE ) : void
{
}
/***
* Fired when an item is viewed, and runs updateViews() via the ViewUpdates trait
*
* @param ItemClass $item
* @return void
*/
public function onItemView( ItemClass $item ) : void
{
}
}
@@ -13,6 +13,7 @@ namespace IPS\{app}\listeners;
/* To prevent PHP errors (extending class does not exist) revealing path */
use IPS\Db;
use IPS\Events\ListenerType\InvoiceListenerType;
use IPS\Member as MemberClass;
use IPS\nexus\Invoice as InvoiceClass;
@@ -29,40 +30,5 @@ if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
*/
class {filename} extends InvoiceListenerType
{
/**
* Fired when the invoice status is changed (e.g. unpaid to paid)
*
* @param InvoiceClass $invoice
* @param string $status The new status
* @return void
*/
public function onStatusChange( InvoiceClass $invoice, string $status ) : void
{
}
/**
* Fired when a member is created by an invoice.
*
* @param InvoiceClass $invoice
* @param MemberClass $member The new member
* @param array $guestData The original values of InvoiceClass::$guest_data
* @return void
*/
public function onCreateAccountForGuest( InvoiceClass $invoice, MemberClass $member, array $guestData ) : void
{
}
/**
* Fired at each checkout step (before submission)
*
* @param InvoiceClass $invoice
* @param string $step The checkout step (customer|pay)
* @return void
*/
public function onCheckout( InvoiceClass $invoice, string $step ) : void
{
}
}
@@ -14,6 +14,7 @@ namespace IPS\{app}\listeners;
/* To prevent PHP errors (extending class does not exist) revealing path */
use IPS\calendar\Event;
use IPS\Db;
use IPS\Events\ListenerType\MemberListenerType;
use IPS\Http\Url;
use IPS\Member as MemberClass;
@@ -33,217 +34,5 @@ if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
*/
class {filename} extends MemberListenerType
{
/**
* Member account has been created
*
* @param MemberClass $member New member account
* @return void
*/
public function onCreateAccount( MemberClass $member ) : void
{
}
/**
* Member has validated
*
* @param MemberClass $member Member validated
* @return void
*/
public function onValidate( MemberClass $member ) : void
{
}
/**
* Member has logged on
*
* @param MemberClass $member Member that logged in
* @return void
*/
public function onLogin( MemberClass $member ) : void
{
}
/**
* Member has logged out
*
* @param MemberClass $member Member that logged out
* @param Url $returnUrl The URL to send the user back to
* @return void
*/
public function onLogout( MemberClass $member, Url $returnUrl ) : void
{
}
/**
* Member account has been updated
*
* @param $member MemberClass member being updated
* @param $changes array The changes
* @return void
*/
public function onProfileUpdate( MemberClass $member, array $changes ) : void
{
}
/**
* Member is flagged as spammer
*
* @param $member MemberClass The member
* @return void
*/
public function onSetAsSpammer( MemberClass $member ) : void
{
}
/**
* Member is unflagged as spammer
*
* @param $member MemberClass The member
* @return void
*/
public function onUnSetAsSpammer( MemberClass $member ) : void
{
}
/**
* Member is merged with another member
*
* @param MemberClass $member Member being kept
* @param MemberClass $member2 Member being removed
* @return void
*/
public function onMerge( MemberClass $member, MemberClass $member2 ) : void
{
}
/**
* Member is deleted
*
* @param $member MemberClass The member
* @return void
*/
public function onDelete( MemberClass $member ) : void
{
}
/**
* Email address is changed
*
* @param MemberClass $member The member
* @param string $new New email address
* @param string $old Old email address
* @return void
*/
public function onEmailChange( MemberClass $member, string $new, string $old ) : void
{
}
/**
* Password is changed
*
* @param MemberClass $member The member
* @param string $new New password, wrapped in an object that can be cast to a string so it doesn't show in any logs
* @return void
*/
public function onPassChange( MemberClass $member, string $new ) : void
{
}
/**
* When a member is added to a club
*
* @param MemberClass $member
* @param Club $club
* @return void
*/
public function onJoinClub( MemberClass $member, Club $club ) : void
{
}
/**
* When a member leaves a club
*
* @param MemberClass $member
* @param Club $club
* @return void
*/
public function onLeaveClub( MemberClass $member, Club $club ) : void
{
}
/**
* When a member RSVPs to an event
*
* @param MemberClass $member
* @param Event $event
* @param int $response The RSVP response
* @return void
*/
public function onEventRsvp( MemberClass $member, Event $event, int $response ) : void
{
}
/**
* Member reacted to content
*
* @param MemberClass $member
* @param ContentClass $content
* @param Reaction $reaction
* @return void
*/
public function onReact( MemberClass $member, ContentClass $content, Reaction $reaction ) : void
{
}
/**
* Member removed reaction
*
* @param MemberClass $member
* @param ContentClass $content
* @return void
*/
public function onUnreact( MemberClass $member, ContentClass $content ) : void
{
}
/**
* Member follows content
*
* @param MemberClass $member
* @param object $object
* @param bool $isAnonymous
* @return void
*/
public function onFollow( MemberClass $member, object $object, bool $isAnonymous ): void
{
}
/**
* Member unfollows content
*
* @param MemberClass $member
* @param object $object
* @return void
*/
public function onUnfollow( MemberClass $member, object $object ) : void
{
}
}
@@ -13,6 +13,7 @@ namespace IPS\{app}\listeners;
/* To prevent PHP errors (extending class does not exist) revealing path */
use IPS\Db;
use IPS\Events\ListenerType\NodeListenerType;
use IPS\Node\Model;
use function defined;
@@ -33,27 +34,4 @@ class {filename} extends NodeListenerType
* @var string
*/
public static string $class = {class};
/**
* Fired when the node is initialized (in constructFromData).
* Useful for loading additional tables or properties
*
* @param Model $node
* @return void
*/
public function onLoad( Model $node ) : void
{
}
/**
* Fired when a node is deleted
*
* @param Model $node
* @return void
*/
public function onDelete( Model $node ) : void
{
}
}
@@ -13,6 +13,7 @@ namespace IPS\{app}\listeners;
/* To prevent PHP errors (extending class does not exist) revealing path */
use IPS\Db;
use IPS\Events\ListenerType\PackageListenerType;
use IPS\Member as MemberClass;
use IPS\nexus\Invoice as InvoiceClass;
@@ -38,155 +39,4 @@ class {filename} extends PackageListenerType
* @var string
*/
public static string $class = {class};
/**
* On Purchase Canceled
*
* @param InvoiceItem $item
* @param PurchaseClass $purchase The purchase
* @return void
*/
public function onCancel( InvoiceItem $item, PurchaseClass $purchase ) : void
{
}
/**
* On Upgrade/Downgrade
*
* @param InvoiceItem $item
* @param PurchaseClass $purchase The purchase
* @param PackageClass $newPackage The package to upgrade to
* @param int|RenewalTerm|NULL $chosenRenewalOption The chosen renewal option
* @return void
*/
public function onChange( InvoiceItem $item, PurchaseClass $purchase, PackageClass $newPackage, int|RenewalTerm $chosenRenewalOption = NULL ) : void
{
}
/**
* On Purchase Deleted
*
* @param InvoiceItem $item
* @param PurchaseClass $purchase The purchase
* @return void
*/
public function onDelete( InvoiceItem $item, PurchaseClass $purchase ) : void
{
}
/**
* On expire soon
* If returns TRUE, the normal expire warning email will not be sent
*
* @param InvoiceItem $item
* @param PurchaseClass $purchase The purchase
* @return void
*/
public function onExpireWarning( InvoiceItem $item, PurchaseClass $purchase ) : void
{
}
/**
* On Purchase Expired
*
* @param InvoiceItem $item
* @param PurchaseClass $purchase The purchase
* @return void
*/
public function onExpire( InvoiceItem $item, PurchaseClass $purchase ) : void
{
}
/**
* On Invoice Cancel (when unpaid)
*
* @param InvoiceItem $item
* @param InvoiceClass $invoice The invoice
* @return void
*/
public function onInvoiceCancel( InvoiceItem $item, InvoiceClass $invoice ) : void
{
}
/**
* On Paid
*
* @param InvoiceItem $item
* @param InvoiceClass $invoice The invoice
* @return void
*/
public function onPaid( InvoiceItem $item, InvoiceClass $invoice ) : void
{
}
/**
* On Purchase Generated
*
* @param InvoiceItem $item
* @param PurchaseClass $purchase The purchase
* @param InvoiceClass $invoice The invoice
* @return void
*/
public function onPurchaseGenerated( InvoiceItem $item, PurchaseClass $purchase, InvoiceClass $invoice ) : void
{
}
/**
* On Purchase Reactivated (renewed after being expired or reactivated after being canceled)
*
* @param InvoiceItem $item
* @param PurchaseClass $purchase The purchase
* @return void
*/
public function onReactivate( InvoiceItem $item, PurchaseClass $purchase ) : void
{
}
/**
* On Renew (Renewal invoice paid. Is not called if expiry data is manually changed)
*
* @param InvoiceItem $item
* @param PurchaseClass $purchase The purchase
* @param int $cycles Cycles
* @return void
*/
public function onRenew( InvoiceItem $item, PurchaseClass $purchase, int $cycles ) : void
{
}
/**
* On Transfer (is run before transferring)
*
* @param InvoiceItem $item
* @param PurchaseClass $purchase The purchase
* @param MemberClass $newCustomer New Customer
* @return void
*/
public function onTransfer( InvoiceItem $item, PurchaseClass $purchase, MemberClass $newCustomer ) : void
{
}
/**
* On Unpaid
*
* @param InvoiceItem $item
* @param InvoiceClass $invoice The invoice
* @param string $status Status
* @return void
*/
public function onUnpaid( InvoiceItem $item, InvoiceClass $invoice, string $status ) : void
{
}
}
+1 -1
View File
@@ -45,7 +45,7 @@
"isDynamicEntry": true
},
"src/main.jsx": {
"file": "assets/main-CoHJ0uDc.js",
"file": "assets/main-JrAf8-U8.js",
"name": "main",
"src": "src/main.jsx",
"isEntry": true,
File diff suppressed because it is too large. Load diff
+3 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<language>
<app key="core" version="5000030">
<app key="core" version="5000031">
<word key="__app_core" js="0">System</word>
<word key="__indefart_personal_conversation" js="0">a personal conversation</word>
<word key="__indefart_personal_conversation_message" js="0">a message in a personal conversation</word>
@@ -187,6 +187,7 @@
<word key="joined" js="0">Joined</word>
<word key="other" js="0">Other</word>
<word key="author" js="0">Author</word>
<word key="author_stats" js="0">Author stats</word>
<word key="read_more" js="0">Read more...</word>
<word key="no_content_to_show" js="0">No content to display</word>
<word key="category_tags" js="0">Tags</word>
@@ -12119,6 +12120,7 @@ In PHP8, altering overloaded method signatures within a subclass results in a fa
<word key="editor_insert_line_after" js="1">Insert line after</word>
<word key="editor_add_box_title" js="1">Add a box title...</word>
<word key="editor_giphy_prompt" js="1">Search for GIFs...</word>
<word key="editor_font_type_generic" js="1">OS Native</word>
<word key="moderator_alert_reply_ready" js="1">Your reply has been sent</word>
<word key="moderator_alert_reply_view" js="1">View Reply</word>
</app>
+1 -1
View File
@@ -1 +1 @@
{"build":1730845557681}
{"build":1731680494374}
+52 -52
View File
@@ -9815,57 +9815,57 @@
"comment": "",
"reporting": "count"
},
"core_rc_author_notification_text": {
"name": "core_rc_author_notification_text",
"columns": {
"id": {
"name": "id",
"type": "BIGINT",
"length": "20",
"unsigned": true,
"allow_null": false,
"default": null,
"auto_increment": true,
"comment": "ID Number"
},
"title": {
"name": "title",
"type": "VARCHAR",
"length": 255,
"decimals": null,
"values": null,
"allow_null": false,
"default": "",
"comment": "",
"unsigned": false,
"auto_increment": false
},
"text": {
"name": "text",
"type": "TEXT",
"length": null,
"decimals": null,
"values": null,
"allow_null": false,
"default": null,
"comment": "",
"unsigned": false,
"auto_increment": false
}
},
"indexes": {
"PRIMARY": {
"type": "primary",
"name": "PRIMARY",
"columns": [
"id"
],
"length": [
null
]
}
}
},
"core_rc_author_notification_text": {
"name": "core_rc_author_notification_text",
"columns": {
"id": {
"name": "id",
"type": "BIGINT",
"length": "20",
"unsigned": true,
"allow_null": false,
"default": null,
"auto_increment": true,
"comment": "ID Number"
},
"title": {
"name": "title",
"type": "VARCHAR",
"length": 255,
"decimals": null,
"values": null,
"allow_null": false,
"default": "",
"comment": "",
"unsigned": false,
"auto_increment": false
},
"text": {
"name": "text",
"type": "TEXT",
"length": null,
"decimals": null,
"values": null,
"allow_null": false,
"default": null,
"comment": "",
"unsigned": false,
"auto_increment": false
}
},
"indexes": {
"PRIMARY": {
"type": "primary",
"name": "PRIMARY",
"columns": [
"id"
],
"length": [
null
]
}
}
},
"core_rc_reports": {
"name": "core_rc_reports",
"columns": {
@@ -26319,7 +26319,7 @@
"event": {
"name": "event",
"type": "VARCHAR",
"length": 32,
"length": 255,
"decimals": null,
"values": null,
"allow_null": false,
File diff suppressed because it is too large. Load diff
+2 -1
View File
@@ -279,5 +279,6 @@
"5000027": "5.0.0 Beta 2",
"5000028": "5.0.0 Beta 2",
"5000029": "5.0.0 Beta 3",
"5000030": "5.0.0 Beta 4"
"5000030": "5.0.0 Beta 4",
"5000031": "5.0.0 Beta 5"
}