Version 4.7.6

This commit is contained in:
Neo committed 2025-12-19 16:05:19 -08:00
1 parent 8ba7d43898
commit 7b7404e741
1085 files changed
+30590 -7837

No files matched your search

+97 -8
View File
@@ -109,7 +109,7 @@ class _Alert extends \IPS\Content\Item
$form = new \IPS\Helpers\Form( NULL, 'save' );
$form->class = 'ipsForm_vertical';
if ( \IPS\Member::loggedIn()->members_disable_pm == 2 )
if ( ! \IPS\Member::loggedIn()->canUseMessenger() )
{
$form->addMessage( 'alert_you_cannot_receive_messages', 'ipsMessage ipsMessage_info' );
}
@@ -157,11 +157,38 @@ class _Alert extends \IPS\Content\Item
{
throw new \InvalidArgumentException( 'alert_no_recipient_selected' );
}
if ( ! $member->canUseMessenger() and \IPS\Request::i()->alert_reply == 2 )
{
throw new \InvalidArgumentException( \IPS\Member::loggedIn()->language()->addToStack( 'alert_member_pm_disabled', NULL, [ 'sprintf' => $member->name ] ) );
}
}
},
NULL, NULL, 'alert_recipient_user' ) );
$form->add( new \IPS\Helpers\Form\CheckboxSet( 'alert_recipient_group', ( $alert and $alert->recipient_group ) ? explode( ',', $alert->recipient_group ) : array(), FALSE, array( 'options' => $groups, 'multiple' => TRUE ), NULL, NULL, NULL, 'alert_recipient_group' ) );
$form->add( new \IPS\Helpers\Form\CheckboxSet( 'alert_recipient_group', ( $alert and $alert->recipient_group ) ? explode( ',', $alert->recipient_group ) : array(), FALSE, array( 'options' => $groups, 'multiple' => TRUE ), function( $groups )
{
if ( \IPS\Request::i()->alert_reply == 2 )
{
$module = \IPS\Application\Module::get( 'core', 'messaging' );
$names = [];
foreach( $groups as $group )
{
$group = \IPS\Member\Group::load( $group );
if ( ! ( \IPS\Application::load( $module->application )->canAccess( $group ) and ( $module->protected or $module->can( 'view', $group ) ) ) )
{
$names[] = $group->name;
}
}
if ( \count( $names ) )
{
throw new \InvalidArgumentException( \IPS\Member::loggedIn()->language()->addToStack( 'alert_member_group_pm_disabled', NULL, [ 'htmlsprintf' => \IPS\Member::loggedIn()->language()->formatList( $names ) ] ) );
}
}
},
NULL, NULL, 'alert_recipient_group' ) );
$form->add( new \IPS\Helpers\Form\Radio( 'alert_show_to', ( $alert and $alert->show_to ) ? $alert->show_to : 'all', FALSE, [
'options' => [
'all' => 'alert_show_to_all',
@@ -170,10 +197,11 @@ class _Alert extends \IPS\Content\Item
], NULL, NULL, NULL, 'alert_show_to' ) );
$form->add( new \IPS\Helpers\Form\YesNo( 'alert_anonymous', ( $alert and $alert->anonymous ) ? TRUE : FALSE, TRUE, array( 'togglesOff' => array( 'alert_reply') ) ) );
$form->add( new \IPS\Helpers\Form\Radio( 'alert_reply', $alert ? $alert->reply : 0, TRUE, array( 'disabled' => (bool) \IPS\Member::loggedIn()->members_disable_pm, 'options' => array( '0' => 'alert_no_reply', '1' => 'alert_can_reply', '2' => 'alert_must_reply' ) ), NULL, NULL, NULL, 'alert_reply' ) );
if ( \IPS\Member::loggedIn()->members_disable_pm != 2 )
if ( \IPS\Member::loggedIn()->members_disable_pm )
{
$form->add( new \IPS\Helpers\Form\Radio( 'alert_reply', $alert ? $alert->reply : 0, TRUE, array( 'options' => array( '0' => 'alert_no_reply', '1' => 'alert_can_reply', '2' => 'alert_must_reply' ) ), NULL, NULL, NULL, 'alert_reply' ) );
\IPS\Member::loggedIn()->language()->words['alert_reply_desc'] = \IPS\Member::loggedIn()->language()->get('alert_reply__nopm_desc');
}
return $form;
@@ -191,7 +219,7 @@ class _Alert extends \IPS\Content\Item
\IPS\Data\Store::i()->alerts = iterator_to_array( \IPS\Db::i()->select( '*', static::$databaseTable, [
[ 'alert_enabled=?', 1 ],
[ 'alert_start < ?', time() ],
[ '( alert_end = 0 or alert_end < ? )', time() ]
[ '( alert_end = 0 or alert_end > ? )', time() ]
], "alert_start ASC" )->setKeyField( 'alert_id' ) );
}
@@ -220,8 +248,8 @@ class _Alert extends \IPS\Content\Item
$obj->title = $values['alert_title'];
$obj->seo_title = \IPS\Http\Url\Friendly::seoTitle( $values['alert_title'] );
$obj->content = $values['alert_content'];
$obj->start = $values['alert_start'] ? ( $values['alert_start']->getTimestamp() < time() ) ? time() : $values['alert_start']->getTimestamp() : time();
$obj->end = $values['alert_end'] ? $values['alert_end']->getTimestamp() : 0;
$obj->start = !empty( $values['alert_start'] ) ? ( $values['alert_start']->getTimestamp() < time() ) ? time() : $values['alert_start']->getTimestamp() : time();
$obj->end = !empty ($values['alert_end'] ) ? $values['alert_end']->getTimestamp() : 0;
$obj->recipient_type = $values['alert_recipient_type'];
@@ -242,7 +270,7 @@ class _Alert extends \IPS\Content\Item
}
$obj->anonymous = $values['alert_anonymous'];
$obj->reply = ( \IPS\Member::loggedIn()->members_disable_pm == 2 ) ? 0 : $values['alert_reply'];
$obj->reply = ( ! \IPS\Member::loggedIn()->canUseMessenger() ) ? 0 : $values['alert_reply'];
$obj->save();
@@ -486,4 +514,65 @@ class _Alert extends \IPS\Content\Item
\IPS\Db::i()->delete( 'core_alerts_seen', [ 'seen_alert_id=?', $this->id ] );
}
/**
* Get the count of how many replies have been sent in via this alert
*
* @return int
*/
public function membersRepliedCount(): int
{
return (int) \IPS\Db::i()->select( 'COUNT(*)', 'core_message_topics', [ 'mt_alert=?', $this->id ] )->first();
}
/**
* Returns the current alert that messenger is being filtered by
*
* @param \IPS\Member|null $member
* @return Alert|null
*/
public static function getAlertCurrentlyFilteringMessages( ?\IPS\Member $member = NULL ): ?\IPS\core\Alerts\Alert
{
$member = $member ?: \IPS\Member::loggedIn();
if ( isset( $_SESSION['mt_alert'] ) )
{
try
{
$alert = static::load( $_SESSION['mt_alert'] );
/* Only show details about this alert to the alert owner */
if ( $alert->author()->member_id != $member->member_id )
{
return NULL;
}
return $alert;
}
catch( \Exception $e ) { }
}
return NULL;
}
/**
* Set the alert to currently filter by
*
* @param Alert $alert
* @return void
*/
public static function setAlertCurrentlyFilteringMessages( \IPS\core\Alerts\Alert $alert )
{
$_SESSION['mt_alert'] = $alert->id;
}
/**
* Unset any messenger filters
*
* @return void
*/
public static function clearMessengerFilters()
{
unset( $_SESSION['mt_alert'] );
}
}