Skip to content

Commit

Permalink
added: group membership widget sort options
Browse files Browse the repository at this point in the history
  • Loading branch information
jeabakker committed Jan 4, 2023
1 parent d40a39a commit e4ce1c2
Show file tree
Hide file tree
Showing 4 changed files with 89 additions and 8 deletions.
5 changes: 5 additions & 0 deletions languages/en.php
Original file line number Diff line number Diff line change
Expand Up @@ -484,6 +484,11 @@
'widgets:group_related:name' => "Related groups",
'widgets:group_related:description' => "Show a list of related groups",

// a_users_groups (group memberships)
'widgets:a_users_groups:sort_by' => "Sort groups by",
'widgets:a_users_groups:sort_by:activity' => "Recent personal activity",
'widgets:a_users_groups:sort_by:join_date' => "Join date",

// welcome message
'group_tools:welcome_message:title' => "Group welcome message",
'group_tools:welcome_message:description' => "You can configure a welcome message for new users who join this group. If you don't want to send a welcome message leave this field blank.",
Expand Down
7 changes: 5 additions & 2 deletions languages/nl.php
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
<?php
/**
* This file was created by Translation Editor v11.0
* On 2022-10-24 15:28
* This file was created by Translation Editor v11.0.1
* On 2023-01-04 14:11
*/

return array (
'widgets:a_users_groups:sort_by' => 'Sorteer de groepen op',
'widgets:a_users_groups:sort_by:activity' => 'Recente persoonlijke activiteit',
'widgets:a_users_groups:sort_by:join_date' => 'Datum van lidmaatschap',
'group_tools:csv_exporter:user:group_role' => 'Rol',
'group_tools:mail:message:default_subject' => 'Bericht uit de groep %s',
'groups:tool:group_multiple_admin_allow:description' => 'Laat groepsbeheerders andere groepsbeheerders beheren. Normaal kan alleen de groepseigenaar dit beheren.',
Expand Down
68 changes: 62 additions & 6 deletions views/default/widgets/a_users_groups/content.php
Original file line number Diff line number Diff line change
@@ -1,21 +1,77 @@
<?php
/**
* Group membership widget
*
* added: sort_by options
*/

use Elgg\Database\Select;
use Elgg\Database\QueryBuilder;

/* @var $widget \ElggWidget */
$widget = elgg_extract('entity', $vars);

$owner = $widget->getOwnerEntity();
if (!$owner instanceof \ElggUser) {
$owner = elgg_get_logged_in_user_entity();
}

$num_display = (int) $widget->num_display ?: 4;
if (!$owner instanceof \ElggUser) {
echo elgg_view_message('notice', elgg_echo('loggedinrequired'), ['title' => false]);
return;
}

$more_link = elgg_view_url(elgg_generate_url('collection:group:group:member', ['username' => $owner->username]), elgg_echo('groups:more'));
$num_display = (int) $widget->num_display ?: 4;
$sort_by = $widget->sort_by ?? 'alpha';

echo elgg_list_entities([
$params = [
'type' => 'group',
'relationship' => 'member',
'relationship_guid' => $widget->owner_guid,
'relationship_guid' => $owner->guid,
'limit' => $num_display,
'pagination' => false,
'no_results' => elgg_echo('groups:none'),
'widget_more' => $more_link,
]);
'widget_more' => elgg_view_url(elgg_generate_url('collection:group:group:member', ['username' => $owner->username]), elgg_echo('groups:more')),
'sort_by' => [
'property_type' => 'metadata',
'property' => 'name',
],
];

if ($widget->context !== 'profile') {
switch ($sort_by) {
case 'join_date':
$params['sort_by'] = [
'property_type' => 'relationship',
'property' => 'member',
'direction' => 'DESC',
'relationship_guid' => $owner->guid,
];
break;

case 'activity':
unset($params['sort_by']);

// sort by latest activity
$params['select'][] = function (QueryBuilder $qb, $main_alias) use ($owner) {
$river = $qb->subquery('river', 'river');
$river->select('river.posted');
$river->joinEntitiesTable('river', 'object_guid', 'inner', 'ent');
$river->where($qb->compare('river.subject_guid', '=', $owner->guid, ELGG_VALUE_GUID));
$river->andWhere($qb->merge([
$qb->compare("{$main_alias}.guid", '=', 'ent.container_guid'),
$qb->compare("{$main_alias}.guid", '=', 'river.object_guid'),
], 'OR'));
$river->orderBy('river.posted', 'desc');
$river->setMaxResults(1);

return '('. $river->getSQL() . ') AS latest_activity';
};

$params['order_by'][] = new \Elgg\Database\Clauses\OrderByClause('latest_activity', 'desc');
$params['order_by'][] = new \Elgg\Database\Clauses\OrderByClause('e.time_created', 'desc');
break;
}
}

echo elgg_list_entities($params);
17 changes: 17 additions & 0 deletions views/default/widgets/a_users_groups/edit.php
Original file line number Diff line number Diff line change
@@ -1,10 +1,27 @@
<?php
/**
* Elgg group widget edit view
*
* added: sort_by options
*/

/* @var $widget \ElggWidget */
$widget = elgg_extract('entity', $vars);

if ($widget->context !== 'profile') {
echo elgg_view_field([
'#type' => 'select',
'#label' => elgg_echo('widgets:a_users_groups:sort_by'),
'name' => 'params[sort_by]',
'value' => $widget->sort_by,
'options_values' => [
'alpha' => elgg_echo('sort:alpha'),
'activity' => elgg_echo('widgets:a_users_groups:sort_by:activity'),
'join_date' => elgg_echo('widgets:a_users_groups:sort_by:join_date'),
],
]);
}

echo elgg_view('object/widget/edit/num_display', [
'entity' => $widget,
'label' => elgg_echo('groups:widget:num_display'),
Expand Down

0 comments on commit e4ce1c2

Please sign in to comment.