Version 5.0.13

This commit is contained in:
Neo committed 2025-12-19 19:04:57 -08:00
1 parent b89858b2ff
commit 5efe744c5f
1407 files changed
+69690 -30177

No files matched your search

+95 -4
View File
@@ -25,6 +25,7 @@ use IPS\Helpers\Form\Radio;
use IPS\Helpers\Form\Translatable;
use IPS\Helpers\Form\YesNo;
use IPS\Http\Url;
use IPS\IPS;
use IPS\Lang;
use IPS\Login;
use IPS\Login\Exception as LoginException;
@@ -33,6 +34,7 @@ use IPS\Login\Handler\Standard;
use IPS\Member;
use IPS\Member\Device;
use IPS\Node\Model;
use IPS\Output;
use IPS\Request;
use IPS\Settings;
use LogicException;
@@ -60,6 +62,22 @@ if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) )
*/
abstract class Handler extends Model
{
/**
* @brief [ActiveRecord] Caches
* @note Defined cache keys will be cleared automatically as needed
*/
protected array $caches = [ 'loginMethods' ];
/**
* Is this login handler supported? - Implemented like this for BC
*
* @return bool
*/
public static function isSupported(): bool
{
return TRUE;
}
/**
* Get all handler classes
*
@@ -84,7 +102,10 @@ abstract class Handler extends Model
foreach ( Application::allExtensions( 'core', 'LoginHandler', FALSE, 'core' ) as $key => $extension )
{
$return[] = $extension::class;
if( $extension::isSupported() )
{
$return[] = $extension::class;
}
}
return $return;
@@ -175,6 +196,21 @@ abstract class Handler extends Model
* @return int
*/
abstract public function type(): int;
/**
* Determine if a root can be added
*
* @return bool
*/
public static function canAddRoot(): bool
{
if ( IPS::canManageResources() )
{
return TRUE;
}
return parent::canAddRoot();
}
/**
* Can this handler process a login for a member?
@@ -196,6 +232,16 @@ abstract class Handler extends Model
{
return FALSE;
}
/**
* Can this handler sync profile photos?
*
* @return bool
*/
public function canSyncProfilePhoto() : bool
{
return false;
}
/**
* @brief Cached links
@@ -441,6 +487,19 @@ abstract class Handler extends Model
'linked' => TRUE,
) );
}
/**
* [ActiveRecord] Delete Record
*
* @return void
*/
public function delete(): void
{
parent::delete();
/* Delete login links for this handler */
Db::i()->delete( 'core_login_links', [ 'token_login_method=?', $this->_id ] );
}
/**
* Unlink Account
@@ -543,6 +602,11 @@ abstract class Handler extends Model
{
$return[] = 'email';
}
if( isset( $this->settings['update_photo_changes'] ) and $this->settings['update_photo_changes'] === 'force' )
{
$return[] = 'photo';
}
return $return;
}
@@ -775,6 +839,17 @@ abstract class Handler extends Model
/* Return */
return $obj;
}
/**
* [Node] Get whether or not this node is locked to current enabled/disabled status
*
* @note Return value NULL indicates the node cannot be enabled/disabled
* @return bool|null
*/
protected function get__locked(): ?bool
{
return !IPS::canManageResources();
}
/**
* Get settings
@@ -804,7 +879,7 @@ abstract class Handler extends Model
*/
public function canCopy(): bool
{
if ( !static::$allowMultiple )
if ( !static::$allowMultiple OR !IPS::canManageResources() )
{
return FALSE;
}
@@ -818,6 +893,10 @@ abstract class Handler extends Model
*/
public function canDelete(): bool
{
if( !IPS::canManageResources() )
{
return FALSE;
}
if ( parent::canDelete() )
{
return count( static::roots() ) > 1;
@@ -840,6 +919,14 @@ abstract class Handler extends Model
*/
public function form( Form &$form ) : void
{
/* No Editing for Managed */
if ( !IPS::canManageResources() )
{
$form->attributes = ['inert' => 'true'];
$form->actionButtons = [];
$form->addMessage( 'login_method_cannot_edit_managed', 'error' );
}
$form->addHeader('login_method_basic_settings');
$form->add( new Translatable( 'login_method_name', NULL, TRUE, array( 'app' => 'core', 'key' => ( $this->id ? 'login_method_' . $this->id : NULL ) ) ) );
if ( !( $this instanceof Standard ) ) {
@@ -870,8 +957,6 @@ abstract class Handler extends Model
) ) );
}
$form->add( new YesNo( 'login_front', $this->id ? $this->front : static::$enableAcpLoginByDefault, FALSE, array() ) );
foreach ( $this->acpForm() as $key => $field )
{
if ( is_string( $field ) )
@@ -909,6 +994,12 @@ abstract class Handler extends Model
*/
public function saveForm( array $values ): mixed
{
/* No Editing for Managed */
if( !IPS::canManageResources() )
{
Output::i()->error( 'login_method_cannot_edit_managed', '3S440/1', 403, '' );
}
if ( isset( static::$shareService ) and isset( $values[ 'share_autoshare_' . static::$shareService ] ) )
{
try