Skip to content

Commit 61ad0ee

Browse files
committed
Merge branch 'refs/heads/elgg_51'
# Conflicts: # CHANGES.txt # elgg-plugin.php
2 parents 7dd25ae + 83e9d44 commit 61ad0ee

File tree

9 files changed

+110
-61
lines changed

9 files changed

+110
-61
lines changed

CHANGES.txt

+4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
Version history
22
===============
33

4+
16.2 (2024-08-07):
5+
6+
- added: widget page manager can now edit page on the front end
7+
48
17.0 (2024-06-28):
59

610
- changed: updated for Elgg 6.0

actions/widget_manager/widget_page.php

+14-3
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,34 @@
11
<?php
22

33
$entity_guid = (int) get_input('guid');
4+
$entity = null;
5+
46
if ($entity_guid) {
57
$entity = get_entity($entity_guid);
68
if (!$entity instanceof \WidgetPage) {
79
return elgg_error_response(elgg_echo('error:missing_data'));
10+
} elseif (!$entity->canEdit()) {
11+
return elgg_error_response(elgg_echo('actionunauthorized'));
812
}
913
}
1014

1115
$url = get_input('url');
12-
if (empty($url)) {
16+
if (empty($url) && !($entity instanceof \WidgetPage && !elgg_is_admin_logged_in())) {
1317
return elgg_error_response(elgg_echo('error:missing_data'));
1418
}
1519

16-
if (!isset($entity)) {
20+
if (!$entity instanceof \WidgetPage) {
21+
if (!elgg_is_admin_logged_in()) {
22+
return elgg_error_response(elgg_echo('actionunauthorized'));
23+
}
24+
1725
$entity = new \WidgetPage();
1826
}
1927

20-
$entity->url = $url;
28+
if (elgg_is_admin_logged_in()) {
29+
$entity->url = $url;
30+
}
31+
2132
$entity->title = get_input('title');
2233
$entity->description = get_input('description');
2334
$entity->show_description = (bool) get_input('show_description');

classes/ColdTrick/WidgetManager/Access.php

+18
Original file line numberDiff line numberDiff line change
@@ -205,4 +205,22 @@ public static function moreRightsForWidgetManager(\Elgg\Event $event): void {
205205
}
206206
}
207207
}
208+
209+
/**
210+
* Only allow widget page delete by admins
211+
*
212+
* @param \Elgg\Event $event 'permissions_check:delete', 'object'
213+
*
214+
* @return boolean
215+
*/
216+
public static function onlyAdminsCanDeleteWidgetPages(\Elgg\Event $event) {
217+
$user = $event->getUserParam();
218+
$entity = $event->getEntityParam();
219+
220+
if (!$user instanceof \ElggUser || !$entity instanceof \WidgetPage) {
221+
return;
222+
}
223+
224+
return $user->isAdmin();
225+
}
208226
}

elgg-plugin.php

+6-3
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,7 @@
6565
'widget_manager/manage_widgets' => [
6666
'access' => 'admin',
6767
],
68-
'widget_manager/widget_page' => [
69-
'access' => 'admin',
70-
],
68+
'widget_manager/widget_page' => [],
7169
'widget_manager/cleanup' => [
7270
'access' => 'admin',
7371
],
@@ -165,6 +163,11 @@
165163
'\ColdTrick\WidgetManager\Widgets::layoutPermissionsCheck' => [],
166164
],
167165
],
166+
'permissions_check:delete' => [
167+
'object' => [
168+
'\ColdTrick\WidgetManager\Access::onlyAdminsCanDeleteWidgetPages' => [],
169+
],
170+
],
168171
'register' => [
169172
'menu:admin_header' => [
170173
'\ColdTrick\WidgetManager\Menus\AdminHeader::registerAdminHeaderMenu' => [],

languages/en.php

+3-1
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,9 @@
6969
'widget_manager:settings:extra_contexts:description' => "Enter the page handler name of the new page which will get a layout similar to the index page. You can add as much pages as you need. Be sure not to add a page handler that is already in use. You can also configure the column layout for that page and optionally assign non-admin users as manager of the page.",
7070
'widget_manager:settings:extra_contexts:page' => "Page",
7171
'widget_manager:settings:extra_contexts:layout' => "Layout",
72-
'widget_manager:settings:extra_contexts:manager' => "Manager",
72+
'widget_manager:settings:extra_contexts:layout:help' => "Set the number of columns",
73+
'widget_manager:settings:extra_contexts:manager' => "Managers",
74+
'widget_manager:settings:extra_contexts:manager:help' => "Configure the users that are allowed to manage the page",
7375

7476
'widget_manager:settings:lazy_loading:enabled' => "Enable Lazy Loading",
7577
'widget_manager:settings:lazy_loading:enabled:help' => "Globally enables the lazy loading feature",

languages/nl.php

+3-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,9 @@
4545
'widget_manager:settings:group:force_tool_widgets:confirm' => 'Weet je het zeker? Dit zal widgets toevoegen/verwijderen die beheerd worden door een groep tool optie (voor de groepen waar widget management is ingeschakeld)',
4646
'widget_manager:settings:extra_contexts:page' => 'Pagina',
4747
'widget_manager:settings:extra_contexts:layout' => 'Layout',
48-
'widget_manager:settings:extra_contexts:manager' => 'Beheerder',
48+
'widget_manager:settings:extra_contexts:layout:help' => 'Bepaald het aantal kolommen',
49+
'widget_manager:settings:extra_contexts:manager' => 'Beheerders',
50+
'widget_manager:settings:extra_contexts:manager:help' => 'Gebruikers die deze pagina kunnen beheren',
4951
'widget_manager:action:force_tool_widgets:error:not_enabled' => 'Widget beheer voor groepen is niet ingeschakeld',
5052
'widget_manager:action:force_tool_widgets:success' => 'Widgets voor groep tool geforceerd bij %s groepen',
5153
'widget_manager:settings:extra_contexts:description' => 'Voer de url in van de nieuwe pagina welke een layout gelijk de widget manager startpagina krijgt. U kunt zoveel pagina\'s toevoegen als nodig is. Vergewis uzelve dat opgegeven pagina nog niet in gebruik is. Alle widgets die normaliter op de voorpagina beschikbaar zijn, zullen ook op deze nieuwe pagina beschikbaar komen. U kunt ook de kolom indeling kiezen en optioneel gewone gebruikers als manager van deze pagina toewijzen.',

views/default/forms/widget_manager/widget_page.php

+15-7
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
<?php
22

33
$entity = elgg_extract('entity', $vars);
4+
if (!$entity->canEdit()) {
5+
throw new \Elgg\Exceptions\Http\EntityPermissionsException();
6+
}
47

58
echo elgg_format_element('div', ['class' => 'elgg-subtext mbm'], elgg_echo('widget_manager:settings:extra_contexts:description'));
69

@@ -10,13 +13,15 @@
1013
'value' => $entity?->guid,
1114
]);
1215

13-
echo elgg_view_field([
14-
'#type' => 'text',
15-
'#label' => elgg_echo('widget_manager:settings:extra_contexts:page'),
16-
'name' => 'url',
17-
'value' => $entity?->url,
18-
'required' => true,
19-
]);
16+
if (elgg_is_admin_logged_in()) {
17+
echo elgg_view_field([
18+
'#type' => 'text',
19+
'#label' => elgg_echo('widget_manager:settings:extra_contexts:page'),
20+
'name' => 'url',
21+
'value' => $entity?->url,
22+
'required' => true,
23+
]);
24+
}
2025

2126
echo elgg_view_field([
2227
'#type' => 'text',
@@ -47,6 +52,7 @@
4752
echo elgg_view_field([
4853
'#type' => 'select',
4954
'#label' => elgg_echo('widget_manager:settings:extra_contexts:layout'),
55+
'#help' => elgg_echo('widget_manager:settings:extra_contexts:layout:help'),
5056
'name' => 'layout',
5157
'options_values' => [
5258
'33|33|33' => elgg_echo('widget_manager:settings:widget_layout:33|33|33'),
@@ -66,8 +72,10 @@
6672
echo elgg_view_field([
6773
'#type' => 'userpicker',
6874
'#label' => elgg_echo('widget_manager:settings:extra_contexts:manager'),
75+
'#help' => elgg_echo('widget_manager:settings:extra_contexts:manager:help'),
6976
'name' => 'manager',
7077
'value' => $entity?->getManagers(),
78+
'show_friends' => false,
7179
]);
7280

7381
$footer = elgg_view_field([

views/default/object/widget_page.php

+43-5
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,49 @@
44
return;
55
}
66

7-
$vars['icon'] = false;
8-
$vars['byline'] = false;
7+
if (!elgg_extract('full_view', $vars)) {
8+
$vars['icon'] = false;
9+
$vars['byline'] = false;
10+
11+
$title = $entity->getDisplayName() . " [{$entity->url}]";
12+
13+
$vars['title'] = elgg_view_url($entity->getURL(), elgg_get_excerpt($title, 100));
14+
15+
echo elgg_view('object/elements/summary', $vars);
16+
return;
17+
}
18+
19+
$num_columns = $entity->getNumColumns();
20+
$layout = $entity->layout;
921

10-
$title = $entity->getDisplayName() . " [{$entity->url}]";
22+
$classes = [];
23+
$column_classes = [];
1124

12-
$vars['title'] = elgg_view_url($entity->getURL(), elgg_get_excerpt($title, 100));
25+
switch ($layout) {
26+
case '33|33|33':
27+
$classes[] = 'widgets-3-columns';
28+
break;
29+
case '50|50':
30+
$classes[] = 'widgets-2-columns';
31+
break;
32+
default:
33+
$classes[] = "widgets-{$num_columns}-columns";
34+
35+
$columns = array_reverse(explode('|', $layout));
36+
foreach ($columns as $column_index => $column_width) {
37+
$column_classes[$column_index + 1] = "col-width-{$column_width}";
38+
}
39+
break;
40+
}
41+
42+
if ($entity->show_description !== false && !empty($entity->description)) {
43+
echo elgg_view('output/longtext', ['value' => $entity->description, 'class' => 'widget-page-description']);
44+
}
1345

14-
echo elgg_view('object/elements/summary', $vars);
46+
echo elgg_view_layout('widgets', [
47+
'class' => $classes,
48+
'num_columns' => $num_columns,
49+
'column_classes' => $column_classes,
50+
'exact_match' => true,
51+
'show_add_widgets' => false,
52+
]);

views/default/resources/widget_manager/widget_page.php

+4-41
Original file line numberDiff line numberDiff line change
@@ -20,31 +20,7 @@
2020
elgg_push_context('index');
2121
elgg_set_page_owner_guid($widget_page->guid);
2222

23-
$num_columns = $widget_page->getNumColumns();
24-
$layout = $widget_page->layout;
25-
26-
$classes = [];
27-
$column_classes = [];
28-
29-
switch ($layout) {
30-
case '33|33|33':
31-
$classes[] = 'widgets-3-columns';
32-
break;
33-
case '50|50':
34-
$classes[] = 'widgets-2-columns';
35-
break;
36-
default:
37-
$classes[] = "widgets-{$num_columns}-columns";
38-
39-
$columns = array_reverse(explode('|', $layout));
40-
foreach ($columns as $column_index => $column_width) {
41-
$column_classes[$column_index + 1] = "col-width-{$column_width}";
42-
}
43-
break;
44-
}
45-
46-
$title = $widget_page->title ?: false;
47-
if ($title && $widget_page->canEdit()) {
23+
if ($widget_page->canEdit()) {
4824
$href = elgg_generate_url('widgets:add_panel', [
4925
'context' => elgg_get_context(),
5026
'context_stack' => elgg_get_context_stack(),
@@ -85,21 +61,8 @@
8561
]);
8662
}
8763

88-
$content = '';
89-
90-
if ($widget_page->show_description !== false && !empty($widget_page->description)) {
91-
$content .= elgg_view('output/longtext', ['value' => $widget_page->description, 'class' => 'widget-page-description']);
92-
}
93-
94-
$content .= elgg_view_layout('widgets', [
95-
'class' => $classes,
96-
'num_columns' => $num_columns,
97-
'column_classes' => $column_classes,
98-
'exact_match' => true,
99-
'show_add_widgets' => empty($title),
100-
]);
101-
10264
echo elgg_view_page($widget_page->getDisplayName(), [
103-
'title' => $title,
104-
'content' => $content,
65+
'title' => $widget_page->title ?: false,
66+
'content' => elgg_view_entity($widget_page),
67+
'entity' => $widget_page,
10568
]);

0 commit comments

Comments
 (0)