Skip to content

Commit

Permalink
feat(custom_index): added settings to control homepage modules
Browse files Browse the repository at this point in the history
  • Loading branch information
jdalsem committed Dec 6, 2021
1 parent f95afda commit 54bbf7c
Show file tree
Hide file tree
Showing 5 changed files with 126 additions and 61 deletions.
6 changes: 6 additions & 0 deletions .tx/config
Expand Up @@ -38,6 +38,12 @@ source_file = mod/ckeditor/languages/en.php
source_lang = en
type = PHP_ARRAY

[elgg-core-4.custom_index]
file_filter = mod/custom_index/languages/<lang>.php
source_file = mod/custom_index/languages/en.php
source_lang = en
type = PHP_ARRAY

[elgg-core-4.developers]
file_filter = mod/developers/languages/<lang>.php
source_file = mod/developers/languages/en.php
Expand Down
11 changes: 11 additions & 0 deletions mod/custom_index/elgg-plugin.php
Expand Up @@ -11,4 +11,15 @@
],
],
],
'settings' => [
'module_about_enabled' => 1,
'module_register_enabled' => 1,
'module_login_enabled' => 0,
'module_activity_enabled' => 1,
'module_blog_enabled' => 1,
'module_bookmarks_enabled' => 1,
'module_file_enabled' => 1,
'module_groups_enabled' => 1,
'module_users_enabled' => 1,
],
];
11 changes: 11 additions & 0 deletions mod/custom_index/languages/en.php
@@ -0,0 +1,11 @@
<?php
/**
* Translation file
*
* Note: don't change the return array to short notation because Transifex can't handle those during `tx push -s`
*/

return array(
'custom_index:settings:about' => "About",
'custom_index:settings:enable_module' => "Enable the '%s' module",
);
120 changes: 59 additions & 61 deletions mod/custom_index/views/default/custom_index/content.php
Expand Up @@ -6,79 +6,77 @@
* page-rendering helper functions like elgg_view_page.
*/

$list_params = [
'type' => 'object',
'limit' => 4,
'pagination' => false,
'no_results' => true,
];

?>

<div class="custom-index elgg-main elgg-grid clearfix">
<div class="elgg-col elgg-col-1of2 custom-index-col1">
<div class="elgg-inner">
<?php
// left column

// Top box for login or welcome message
if (elgg_is_logged_in()) {
$content = elgg_format_element('h2', [], elgg_echo('welcome') . ' ' . elgg_get_logged_in_user_entity()->getDisplayName());

echo elgg_view_module('featured', '', $content);
} else {
echo elgg_view_module('featured', elgg_echo('login'), elgg_view_form('login'));
$plugin = elgg_get_plugin_from_id('custom_index');
$is_module_enabled = function(string $module) use ($plugin) {
return (bool) $plugin->{"module_{$module}_enabled"};
};

$get_list_params = function(array $extras = []) {
return array_merge([
'type' => 'object',
'limit' => 4,
'pagination' => false,
'no_results' => true,
], $extras);
};

$modules = [];

if ($is_module_enabled('about')) {
$about = $plugin->about;
if (!empty($about)) {
$modules[] = elgg_view_module('featured', '', $about);
}
}

// a view for plugins to extend
echo elgg_view('index/lefthandside');
if (!elgg_is_logged_in() && $is_module_enabled('register') && elgg_get_config('allow_registration')) {
$modules[] = elgg_view_module('featured', elgg_echo('register'), elgg_view_form('register'));
}

if (!elgg_is_logged_in() && $is_module_enabled('login')) {
$modules[] = elgg_view_module('featured', elgg_echo('login'), elgg_view_form('login'));
}

// files
if (elgg_is_active_plugin('file')) {
$file_params = $list_params;
$file_params['subtype'] = 'file';
echo elgg_view_module('featured', elgg_echo('collection:object:file'), elgg_list_entities($file_params));
if (elgg_is_active_plugin('file') && $is_module_enabled('file')) {
$modules[] = elgg_view_module('featured', elgg_echo('collection:object:file'), elgg_list_entities($get_list_params(['subtype' => 'file'])));
}

// groups
if (elgg_is_active_plugin('groups')) {
$group_params = $list_params;
$group_params['type'] = 'group';
echo elgg_view_module('featured', elgg_echo('collection:group'), elgg_list_entities($group_params));
if (elgg_is_active_plugin('groups') && $is_module_enabled('groups')) {
$modules[] = elgg_view_module('featured', elgg_echo('collection:group'), elgg_list_entities($get_list_params(['type' => 'group'])));
}
?>
</div>
</div>
<div class="elgg-col elgg-col-1of2 custom-index-col2">
<div class="elgg-inner">
<?php
// right column

// a view for plugins to extend
echo elgg_view("index/righthandside");

$newest_members = elgg_list_entities([
'type' => 'user',
'limit' => 10,
'pagination' => false,
'no_results' => true,
]);
echo elgg_view_module('featured', elgg_echo('collection:user'), $newest_members);
if ($is_module_enabled('users')) {
$modules[] = elgg_view_module('featured', elgg_echo('collection:user'), elgg_list_entities($get_list_params(['type' => 'user'])));
}

// groups
if (elgg_is_active_plugin('blog')) {
$blog_params = $list_params;
$blog_params['subtype'] = 'blog';
echo elgg_view_module('featured', elgg_echo('collection:object:blog'), elgg_list_entities($blog_params));
if (elgg_is_active_plugin('blog') && $is_module_enabled('blog')) {
$modules[] = elgg_view_module('featured', elgg_echo('collection:object:blog'), elgg_list_entities($get_list_params(['subtype' => 'blog'])));
}

// files
if (elgg_is_active_plugin('bookmarks')) {
$bookmarks_params = $list_params;
$bookmarks_params['subtype'] = 'bookmarks';
echo elgg_view_module('featured', elgg_echo('collection:object:bookmarks'), elgg_list_entities($bookmarks_params));
if (elgg_is_active_plugin('bookmarks') && $is_module_enabled('bookmarks')) {
$modules[] = elgg_view_module('featured', elgg_echo('collection:object:bookmarks'), elgg_list_entities($get_list_params(['subtype' => 'bookmarks'])));
}

$left = '';
$right = '';

// spread modules evenly
foreach ($modules as $index => $module) {
if ($index % 2 == 0) {
$left .= $module;
} else {
$right .= $module;
}
}
?>
</div>
</div>
</div>

$left .= elgg_view('index/lefthandside');
$right .= elgg_view('index/righthandside');

$left = elgg_format_element('div', ['class' => ['elgg-col', 'elgg-col-1of2', 'custom-index-col1']], elgg_format_element('div', ['class' => 'elgg-inner'], $left));
$right = elgg_format_element('div', ['class' => ['elgg-col', 'elgg-col-2of2', 'custom-index-col2']], elgg_format_element('div', ['class' => 'elgg-inner'], $right));

echo elgg_format_element('div', ['class' => ['custom-index', 'elgg-main', 'elgg-grid', 'clearfix']], $left . $right);
39 changes: 39 additions & 0 deletions mod/custom_index/views/default/plugins/custom_index/settings.php
@@ -0,0 +1,39 @@
<?php

/* @var $custom_index \ElggPlugin */
$custom_index = elgg_extract('entity', $vars);

echo elgg_view_field([
'#type' => 'longtext',
'#label' => elgg_echo('custom_index:settings:about'),
'name' => "params[about]",
'value' => $custom_index->about,
]);

$modules = [
'about' => '',
'register' => '',
'login' => '',
'activity' => 'activity',
'blog' => 'blog',
'bookmarks' => 'bookmarks',
'file' => 'file',
'groups' => 'groups',
'users' => '',
];

foreach ($modules as $module => $plugin) {
if (!empty($plugin) && !elgg_is_active_plugin($plugin)) {
continue;
}

echo elgg_view_field([
'#type' => 'checkbox',
'#label' => elgg_echo('custom_index:settings:enable_module', [$module]),
'name' => "params[module_{$module}_enabled]",
'checked' => (bool) $custom_index->{"module_{$module}_enabled"},
'switch' => true,
'default' => 0,
'value' => 1,
]);
}

0 comments on commit 54bbf7c

Please sign in to comment.