Version 4.3.0

This commit is contained in:
Neo committed 2025-12-19 05:47:12 -08:00
1 parent 96997ddd8e
commit fe1acf984a
1349 files changed
+116159 -67711

No files matched your search

+101 -37
View File
@@ -49,6 +49,10 @@ class _clubs extends \IPS\Dispatcher\Controller
$table->include = array( 'name', 'type', 'members', 'owner', 'created' );
$table->langPrefix = 'club_';
$table->parsers = array(
'name' => function( $value, $row )
{
return \IPS\Theme::i()->getTemplate('clubs')->name( $value, $row );
},
'type' => function( $value ) {
return \IPS\Theme::i()->getTemplate('clubs')->privacy( $value );
},
@@ -56,22 +60,26 @@ class _clubs extends \IPS\Dispatcher\Controller
return \IPS\DateTime::ts( $value );
},
'members' => function( $value, $row ) {
$link = \IPS\Http\Url::internal( "app=core&module=clubs&controller=view&id={$row['id']}&do=members", 'front', 'clubs_view', array( \IPS\Http\Url\Friendly::seoTitle( $row['name'] ) ) );
return \IPS\Theme::i()->getTemplate('clubs')->members( $value, $link );
if ( $row['type'] !== \IPS\Member\Club::TYPE_PUBLIC )
{
$link = \IPS\Http\Url::internal( "app=core&module=clubs&controller=view&id={$row['id']}&do=members", 'front', 'clubs_view', array( \IPS\Http\Url\Friendly::seoTitle( $row['name'] ) ) );
return \IPS\Theme::i()->getTemplate('clubs')->members( $value, $link );
}
return '';
},
'owner' => function( $value ) {
return \IPS\Theme::i()->getTemplate('clubs')->owner( \IPS\Member::load( $value ) );
},
'_highlight' => function( $row ) {
if ( !$row['approved'] )
{
return 'ipsModerated';
}
return NULL;
}
);
$table->noSort = array( 'privacy', 'owner' );
$table->sortBy = $table->sortBy ?: 'members';
$table->filters = array(
'club_type_' . \IPS\Member\Club::TYPE_PUBLIC => array( 'type=?', \IPS\Member\Club::TYPE_PUBLIC ),
'club_type_' . \IPS\Member\Club::TYPE_OPEN => array( 'type=?', \IPS\Member\Club::TYPE_OPEN ),
'club_type_' . \IPS\Member\Club::TYPE_CLOSED => array( 'type=?', \IPS\Member\Club::TYPE_CLOSED ),
'club_type_' . \IPS\Member\Club::TYPE_PRIVATE => array( 'type=?', \IPS\Member\Club::TYPE_PRIVATE )
);
$table->quickSearch = 'name';
$table->advancedSearch = array(
'name' => \IPS\Helpers\Table\SEARCH_QUERY_TEXT,
@@ -79,14 +87,56 @@ class _clubs extends \IPS\Dispatcher\Controller
'owner' => \IPS\Helpers\Table\SEARCH_MEMBER,
'created' => \IPS\Helpers\Table\SEARCH_DATE_RANGE,
);
if ( \IPS\Settings::i()->clubs_require_approval )
{
$table->filters = array(
'pending_approval' => 'approved=0'
);
$table->advancedSearch['type'] = array( \IPS\Helpers\Table\SEARCH_SELECT, array( 'options' => array(
\IPS\Member\Club::TYPE_PUBLIC => 'club_type_' . \IPS\Member\Club::TYPE_PUBLIC,
\IPS\Member\Club::TYPE_OPEN => 'club_type_' . \IPS\Member\Club::TYPE_OPEN,
\IPS\Member\Club::TYPE_CLOSED => 'club_type_' . \IPS\Member\Club::TYPE_CLOSED,
\IPS\Member\Club::TYPE_PRIVATE => 'club_type_' . \IPS\Member\Club::TYPE_PRIVATE,
\IPS\Member\Club::TYPE_READONLY => 'club_type_' . \IPS\Member\Club::TYPE_READONLY,
), 'multiple' => TRUE ) );
}
else
{
$table->filters = array(
'club_type_' . \IPS\Member\Club::TYPE_PUBLIC => array( 'type=?', \IPS\Member\Club::TYPE_PUBLIC ),
'club_type_' . \IPS\Member\Club::TYPE_OPEN => array( 'type=?', \IPS\Member\Club::TYPE_OPEN ),
'club_type_' . \IPS\Member\Club::TYPE_CLOSED => array( 'type=?', \IPS\Member\Club::TYPE_CLOSED ),
'club_type_' . \IPS\Member\Club::TYPE_PRIVATE => array( 'type=?', \IPS\Member\Club::TYPE_PRIVATE ),
'club_type_' . \IPS\Member\Club::TYPE_READONLY => array( 'type=?', \IPS\Member\Club::TYPE_READONLY )
);
}
$table->rowButtons = function( $row ) {
$return = array(
'open' => array(
'title' => 'view',
'icon' => 'search',
'link' => \IPS\Http\Url::internal( "app=core&module=clubs&controller=view&id={$row['id']}", 'front', 'clubs_view', array( \IPS\Http\Url\Friendly::seoTitle( $row['name'] ) ) ),
'target'=> '_blank'
)
$return = array();
if ( !$row['approved'] )
{
if ( \IPS\Member::loggedIn()->hasAcpRestriction( 'core', 'clubs', 'clubs_edit' ) )
{
$return['approve'] = array(
'title' => 'approve',
'icon' => 'check',
'link' => \IPS\Http\Url::internal("app=core&module=clubs&controller=clubs&do=approve&id={$row['id']}")
);
}
if ( \IPS\Member::loggedIn()->hasAcpRestriction( 'core', 'clubs', 'clubs_delete' ) )
{
$return['delete'] = array(
'title' => 'delete',
'icon' => 'times',
'link' => \IPS\Http\Url::internal("app=core&module=clubs&controller=clubs&do=delete&id={$row['id']}"),
'data' => \IPS\Db::i()->select( 'COUNT(*)', 'core_clubs_node_map', array( 'club_id=?', $row['id'] ) )->first() ? array( 'ipsDialog' => '', 'ipsDialog-title' => \IPS\Member::loggedIn()->language()->addToStack('delete') ) : array( 'delete' => '' )
);
}
}
$return['open'] = array(
'title' => 'view',
'icon' => 'search',
'link' => \IPS\Http\Url::internal( "app=core&module=clubs&controller=view&id={$row['id']}", 'front', 'clubs_view', array( \IPS\Http\Url\Friendly::seoTitle( $row['name'] ) ) ),
'target'=> '_blank'
);
if ( \IPS\Member::loggedIn()->hasAcpRestriction( 'core', 'clubs', 'clubs_edit' ) )
{
@@ -96,7 +146,7 @@ class _clubs extends \IPS\Dispatcher\Controller
'link' => \IPS\Http\Url::internal("app=core&module=clubs&controller=clubs&do=edit&id={$row['id']}")
);
}
if ( \IPS\Member::loggedIn()->hasAcpRestriction( 'core', 'clubs', 'clubs_delete' ) )
if ( !isset( $return['delete'] ) and \IPS\Member::loggedIn()->hasAcpRestriction( 'core', 'clubs', 'clubs_delete' ) )
{
$return['delete'] = array(
'title' => 'delete',
@@ -107,25 +157,7 @@ class _clubs extends \IPS\Dispatcher\Controller
}
return $return;
};
/* Settings Button */
if ( \IPS\Member::loggedIn()->hasAcpRestriction( 'core', 'clubs', 'fields_manage' ) )
{
\IPS\Output::i()->sidebar['actions']['settings'] = array(
'icon' => 'cog',
'title' => 'clubs_custom_fields',
'link' => \IPS\Http\Url::internal( "app=core&module=clubs&controller=clubs&controller=fields" ),
);
}
if ( \IPS\Member::loggedIn()->hasAcpRestriction( 'core', 'clubs', 'clubs_settings_manage' ) )
{
\IPS\Output::i()->sidebar['actions']['fields'] = array(
'icon' => 'cog',
'title' => 'settings',
'link' => \IPS\Http\Url::internal( "app=core&module=clubs&controller=clubs&controller=settings" ),
);
}
/* Display */
\IPS\Output::i()->output = (string) $table;
}
@@ -244,6 +276,38 @@ class _clubs extends \IPS\Dispatcher\Controller
}
}
/**
* Approve
*
* @return void
*/
protected function approve()
{
\IPS\Dispatcher::i()->checkAcpPermission( 'clubs_edit' );
/* Load Club */
try
{
$club = \IPS\Member\Club::load( \IPS\Request::i()->id );
}
catch ( \Exception $e )
{
\IPS\Output::i()->error( 'node_error', '2C352/8', 404, '' );
}
/* Approve */
$club->approved = TRUE;
$club->save();
/* Redirect */
$target = \IPS\Http\Url::internal("app=core&module=clubs&controller=clubs");
if ( \IPS\Db::i()->select( 'COUNT(*)', 'core_clubs', array( 'approved=0 AND id!=?', $club->id ) )->first() )
{
$target = $target->setQueryString( 'filter', 'pending_approval' );
}
\IPS\Output::i()->redirect( $target, "approved" );
}
/**
* Delete
*
@@ -277,7 +341,7 @@ class _clubs extends \IPS\Dispatcher\Controller
{
return array_key_exists( 'add', $node->permissionTypes() );
}, 'clubs' => TRUE ) );
$field->label = $data['name'];
$field->label = htmlspecialchars( $data['name'] );
$form->add( $field );
}
catch ( \Exception $e ) {}