aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engine/lib/widgets.php35
-rw-r--r--js/lib/ui.widgets.js6
-rw-r--r--languages/en.php6
-rw-r--r--views/default/css.php22
-rw-r--r--views/default/layouts/widgets.php22
-rw-r--r--views/default/widgets/add.php20
-rw-r--r--views/default/widgets/add_button.php13
7 files changed, 111 insertions, 13 deletions
diff --git a/engine/lib/widgets.php b/engine/lib/widgets.php
index e3ab07227..1de114833 100644
--- a/engine/lib/widgets.php
+++ b/engine/lib/widgets.php
@@ -146,13 +146,23 @@ function get_widgets($user_guid, $context, $column) {
}
/**
- * Displays a particular widget
+ * Get widgets for a particular context in order of display
*
- * @param ElggObject $widget The widget to display
+ * @param int $user_guid The owner user GUID
+ * @param string $context The context (profile, dashboard, etc)
*
- * @return string The HTML for the widget, including JavaScript wrapper
+ * @return array|false An array of widget ElggObjects, or false
+ */
+function elgg_get_widgets($user_guid, $context) {
+ // @todo implement elgg_get_entities_from_private_settings() first
+ return false;
+}
+
+/**
+ * @deprecated 1.8
*/
function display_widget(ElggObject $widget) {
+ elgg_deprecated_notice("display_widget() was been deprecated. Use elgg_view_entity().", 1.8);
return elgg_view_entity($widget);
}
@@ -480,6 +490,25 @@ function reorder_widgets_from_panel($panelstring1, $panelstring2, $panelstring3,
}
/**
+ * Can the user edit the widgets
+ *
+ * @param int $user_guid The GUID of the user or 0 for logged in user
+ * @return bool
+ */
+function elgg_can_edit_widgets($user_guid = 0) {
+ $return = false;
+ if (isadminloggedin()) {
+ $return = true;
+ }
+ if (elgg_get_page_owner_guid() == get_loggedin_userid()) {
+ $return = true;
+ }
+
+ // @todo add plugin hook
+ return $return;
+}
+
+/**
* Regsiter entity of object, widget as ElggWidget objects
*
* @return void
diff --git a/js/lib/ui.widgets.js b/js/lib/ui.widgets.js
index cf13d6e95..f4fa4b256 100644
--- a/js/lib/ui.widgets.js
+++ b/js/lib/ui.widgets.js
@@ -9,6 +9,12 @@ elgg.ui.widgets.init = function() {
placeholder: 'widget_placeholder'
});
+ $('#widget_add_button a').bind('click', function(event) {
+ $('.widgets_add').slideToggle('medium');
+ event.preventDefault();
+ });
+
+
};
//List active widgets for each page column
diff --git a/languages/en.php b/languages/en.php
index ad6461fd0..e78d01c81 100644
--- a/languages/en.php
+++ b/languages/en.php
@@ -227,10 +227,8 @@ $english = array(
'dashboard:configure' => "Edit page",
'dashboard:nowidgets' => "Your dashboard is your gateway into the site. Click 'Edit page' to add widgets to keep track of content and your life within the system.",
- 'widgets:add' => 'Add widgets to your page',
- 'widgets:add:description' => "Choose the features you want to add to your page by dragging them from the <b>Widget gallery</b> on the right, to any of the three widget areas below, and position them where you would like them to appear.
-
-To remove a widget drag it back to the <b>Widget gallery</b>.",
+ 'widgets:add' => 'Add widgets',
+ 'widgets:add:description' => "Click on any widget button below to add it to your page.",
'widgets:position:fixed' => '(Fixed position on page)',
'widgets' => "Widgets",
diff --git a/views/default/css.php b/views/default/css.php
index 8409ceb8b..edb0ebe07 100644
--- a/views/default/css.php
+++ b/views/default/css.php
@@ -881,6 +881,28 @@ li.navigation_more ul li {
.widget_first_col {
margin-right: 0;
}
+#widget_add_button {
+ padding: 0px;
+ background-color: transparent;
+ text-align: right;
+}
+.widgets_add {
+ width: 100%;
+ padding: 10px;
+ margin-bottom: 15px;
+ background: #dedede;
+}
+.widgets_add li {
+ float: left;
+ margin: 2px 10px;
+ list-style: none;
+}
+.widgets_add li a {
+ display: block;
+ width: 200px;
+ padding: 4px;
+ background-color: #cccccc;
+}
.widget {
background-color: #dedede;
padding: 2px;
diff --git a/views/default/layouts/widgets.php b/views/default/layouts/widgets.php
index 21d942080..5d6e42a43 100644
--- a/views/default/layouts/widgets.php
+++ b/views/default/layouts/widgets.php
@@ -4,21 +4,25 @@
*
* @uses $vars['box'] Optional display box at the top of layout
* @uses $vars['num_columns'] Number of widget columns for this layout
+ * @uses $vars['show_add_widgets'] Display the add widgets button
*/
+$box = elgg_get_array_value('box', $vars, '');
+$num_columns = elgg_get_array_value('num_columns', $vars, 3);
+$show_add_widgets = elgg_get_array_value('show_add_widgets', $vars, true);
+
$owner = elgg_get_page_owner();
$context = elgg_get_context();
elgg_push_context('widgets');
-if (isset($vars['box'])) {
- echo $vars['box'];
-}
+elgg_get_widgets($owner->guid, $context);
-$num_columns = 3;
-if (isset($vars['num_columns'])) {
- $num_columns = $vars['num_columns'];
+if (elgg_can_edit_widgets()) {
+ echo elgg_view('widgets/add', array('widgets' => $widgets));
}
+echo $vars['box'];
+
$widget_class = "widget_col_$num_columns";
for ($column_index = 1; $column_index <= $num_columns; $column_index++) {
$widgets = get_widgets($owner->guid, $context, $column_index);
@@ -33,6 +37,12 @@ for ($column_index = 1; $column_index <= $num_columns; $column_index++) {
$first = ($column_index == 1) ? 'widget_first_col' : '';
echo "<div class=\"widget_column $widget_class $first\">";
+ // button for adding new widgets
+ if ($column_index == 1) {
+ if ($show_add_widgets && elgg_can_edit_widgets()) {
+ echo elgg_view('widgets/add_button');
+ }
+ }
if (is_array($widgets) && sizeof($widgets) > 0) {
foreach ($widgets as $widget) {
echo elgg_view_entity($widget);
diff --git a/views/default/widgets/add.php b/views/default/widgets/add.php
new file mode 100644
index 000000000..2cc06dab7
--- /dev/null
+++ b/views/default/widgets/add.php
@@ -0,0 +1,20 @@
+<?php
+
+$widgets = $vars['widgets'];
+$widget_types = get_widget_types();
+
+?>
+<div class="widgets_add hidden">
+ <p>
+ <?php echo elgg_echo('widgets:add:description'); ?>
+ </p>
+ <ul>
+ <?php
+ foreach ($widget_types as $widget_type) {
+ $link = elgg_view('output/url', array('text' => $widget_type->name, 'href' => '#'));
+ echo "<li>$link</li>";
+ }
+ ?>
+ </ul>
+ <div class="clearfloat"></div>
+</div>
diff --git a/views/default/widgets/add_button.php b/views/default/widgets/add_button.php
new file mode 100644
index 000000000..8ec36b086
--- /dev/null
+++ b/views/default/widgets/add_button.php
@@ -0,0 +1,13 @@
+<?php
+
+?>
+<div class="widget" id="widget_add_button">
+<?php
+$options = array(
+ 'href' => '#',
+ 'text' => elgg_echo('widgets:add'),
+ 'class' => 'action_button',
+);
+echo elgg_view('output/url', $options);
+?>
+</div>