aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engine/lib/widgets.php253
-rw-r--r--views/default/widgets/add.php2
-rw-r--r--views/default/widgets/wrapper.php2
3 files changed, 160 insertions, 97 deletions
diff --git a/engine/lib/widgets.php b/engine/lib/widgets.php
index 1396a9d8f..1343e1319 100644
--- a/engine/lib/widgets.php
+++ b/engine/lib/widgets.php
@@ -57,7 +57,7 @@ function elgg_get_widgets($user_guid, $context) {
* @since 1.8
*/
function elgg_create_widget($owner_guid, $handler, $access_id = null) {
- if (empty($owner_guid) || empty($handler) || !widget_type_exists($handler)) {
+ if (empty($owner_guid) || empty($handler) || !elgg_widget_type_exists($handler)) {
return false;
}
@@ -144,6 +144,151 @@ function elgg_can_edit_widgets($user_guid = 0) {
}
/**
+ * Add a widget type
+ *
+ * This should be called by plugins in their init function.
+ *
+ * @param string $handler The identifier for the widget handler
+ * @param string $name The name of the widget type
+ * @param string $description A description for the widget type
+ * @param string $context A comma-separated list of contexts where this
+ * widget is allowed (default: 'all')
+ * @param bool $multiple Whether or not multiple instances of this widget
+ * are allowed on a single dashboard (default: false)
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_add_widget_type($handler, $name, $description, $context = "all", $multiple = false) {
+
+ if (!$handler || !$name) {
+ return false;
+ }
+
+ global $CONFIG;
+
+ if (!isset($CONFIG->widgets)) {
+ $CONFIG->widgets = new stdClass;
+ }
+ if (!isset($CONFIG->widgets->handlers)) {
+ $CONFIG->widgets->handlers = array();
+ }
+
+ $handlerobj = new stdClass;
+ $handlerobj->name = $name;
+ $handlerobj->description = $description;
+ $handlerobj->context = explode(",", $context);
+ $handlerobj->multiple = $multiple;
+
+ $CONFIG->widgets->handlers[$handler] = $handlerobj;
+
+ return true;
+}
+
+/**
+ * Remove a widget type
+ *
+ * @param string $handler The identifier for the widget
+ * @return void
+ * @since 1.8.0
+ */
+function elgg_remove_widget_type($handler) {
+ global $CONFIG;
+
+ if (!isset($CONFIG->widgets)) {
+ return;
+ }
+
+ if (!isset($CONFIG->widgets->handlers)) {
+ return;
+ }
+
+ if (isset($CONFIG->widgets->handlers[$handler])) {
+ unset($CONFIG->widgets->handlers[$handler]);
+ }
+}
+
+/**
+ * Determines whether or not widgets with the specified handler have been defined
+ *
+ * @param string $handler The widget handler identifying string
+ * @return bool Whether or not those widgets exist
+ * @since 1.8.0
+ */
+function elgg_is_widget_type($handler) {
+ global $CONFIG;
+
+ if (!empty($CONFIG->widgets) &&
+ !empty($CONFIG->widgets->handlers) &&
+ is_array($CONFIG->widgets->handlers) &&
+ array_key_exists($handler, $CONFIG->widgets->handlers)) {
+
+ return true;
+ }
+
+ return false;
+}
+
+/**
+ * Get the widget types for a context
+ *
+ * The widget types are stdClass objects.
+ *
+ * @param string context The widget context or empty string for current context
+ * @return array
+ * @since 1.8.0
+ */
+function elgg_get_widget_types($context = "") {
+ global $CONFIG;
+
+ if (empty($CONFIG->widgets) ||
+ empty($CONFIG->widgets->handlers) ||
+ !is_array($CONFIG->widgets->handlers)) {
+ // no widgets
+ return array();
+ }
+
+ if (!$context) {
+ $context = elgg_get_context();
+ }
+
+ $widgets = array();
+ foreach ($CONFIG->widgets->handlers as $key => $handler) {
+ if (in_array('all', $handler->context) || in_array($context, $handler->context)) {
+ $widgets[$key] = $handler;
+ }
+ }
+
+ return $widgets;
+}
+
+/**
+ * Regsiter entity of object, widget as ElggWidget objects
+ *
+ * @return void
+ */
+function elgg_widget_run_once() {
+ add_subtype("object", "widget", "ElggWidget");
+}
+
+/**
+ * Function to initialize widgets functionality
+ *
+ * @return void
+ */
+function elgg_widgets_init() {
+ register_action('widgets/save');
+ register_action('widgets/add');
+ register_action('widgets/move');
+ register_action('widgets/delete');
+
+ run_function_once("elgg_widget_run_once");
+}
+
+elgg_register_event_handler('init', 'system', 'elgg_widgets_init');
+
+
+
+/**
* When given a widget entity and a new requested location, saves the new location
* and also provides a sensible ordering for all widgets in that column
*
@@ -301,34 +446,13 @@ function add_widget($entity_guid, $handler, $context, $order = 0, $column = 1, $
* (side or main) where this widget is allowed (default: "side,main")
*
* @return bool Depending on success
+ * @deprecated 1.8
*/
function add_widget_type($handler, $name, $description, $context = "all",
$multiple = false, $positions = "side,main") {
+ elgg_deprecated_notice("add_widget_type deprecated for elgg_add_widget_type", 1.8);
- if (!empty($handler) && !empty($name)) {
- global $CONFIG;
-
- if (!isset($CONFIG->widgets)) {
- $CONFIG->widgets = new stdClass;
- }
-
- if (!isset($CONFIG->widgets->handlers)) {
- $CONFIG->widgets->handlers = array();
- }
-
- $handlerobj = new stdClass;
- $handlerobj->name = $name;
- $handlerobj->description = $description;
- $handlerobj->context = explode(",", $context);
- $handlerobj->multiple = $multiple;
- $handlerobj->positions = explode(",", $positions);
-
- $CONFIG->widgets->handlers[$handler] = $handlerobj;
-
- return true;
- }
-
- return false;
+ return elgg_add_widget_type($handler, $name, $description, $context, $multiple);
}
/**
@@ -338,21 +462,11 @@ $multiple = false, $positions = "side,main") {
*
* @return void
* @since 1.7.1
+ * @deprecated 1.8
*/
function remove_widget_type($handler) {
- global $CONFIG;
-
- if (!isset($CONFIG->widgets)) {
- return;
- }
-
- if (!isset($CONFIG->widgets->handlers)) {
- return;
- }
-
- if (isset($CONFIG->widgets->handlers[$handler])) {
- unset($CONFIG->widgets->handlers[$handler]);
- }
+ elgg_deprecated_notice("remove_widget_type deprecated for elgg_remove_widget_type", 1.8);
+ return elgg_remove_widget_type($handler);
}
/**
@@ -361,45 +475,22 @@ function remove_widget_type($handler) {
* @param string $handler The widget handler identifying string
*
* @return bool Whether or not those widgets exist
+ * @deprecated 1.8
*/
function widget_type_exists($handler) {
- global $CONFIG;
-
- if (!empty($CONFIG->widgets)
- && !empty($CONFIG->widgets->handlers)
- && is_array($CONFIG->widgets->handlers)
- && array_key_exists($handler, $CONFIG->widgets->handlers)) {
- return true;
- }
-
- return false;
+ elgg_deprecated_notice("widget_type_exists deprecated for elgg_is_widget_type", 1.8);
+ return elgg_is_widget_type($handler);
}
/**
* Returns an array of stdClass objects representing the defined widget types
*
* @return array A list of types defined (if any)
+ * @deprecated 1.8
*/
function get_widget_types() {
- global $CONFIG;
-
- if (!empty($CONFIG->widgets)
- && !empty($CONFIG->widgets->handlers)
- && is_array($CONFIG->widgets->handlers)) {
-
- $context = elgg_get_context();
-
- foreach ($CONFIG->widgets->handlers as $key => $handler) {
- if (!in_array('all', $handler->context) &&
- !in_array($context, $handler->context)) {
- unset($CONFIG->widgets->handlers[$key]);
- }
- }
-
- return $CONFIG->widgets->handlers;
- }
-
- return array();
+ elgg_deprecated_notice("get_widget_types deprecrated for elgg_get_widget_types", 1.8);
+ return elgg_get_widget_types();
}
/**
@@ -623,31 +714,3 @@ function display_widget(ElggObject $widget) {
elgg_deprecated_notice("display_widget() was been deprecated. Use elgg_view_entity().", 1.8);
return elgg_view_entity($widget);
}
-
-/**
- * Regsiter entity of object, widget as ElggWidget objects
- *
- * @return void
- */
-function widget_run_once() {
- // Register a class
- add_subtype("object", "widget", "ElggWidget");
-}
-
-/**
- * Function to initialise widgets functionality on Elgg init
- *
- * @return void
- */
-function widgets_init() {
- register_action('widgets/save');
- register_action('widgets/add');
- register_action('widgets/move');
- register_action('widgets/delete');
-
- // Now run this stuff, but only once
- run_function_once("widget_run_once");
-}
-
-// Register event
-elgg_register_event_handler('init', 'system', 'widgets_init');
diff --git a/views/default/widgets/add.php b/views/default/widgets/add.php
index 9687c5bea..c8576cf06 100644
--- a/views/default/widgets/add.php
+++ b/views/default/widgets/add.php
@@ -1,7 +1,7 @@
<?php
$widgets = $vars['widgets'];
-$widget_types = get_widget_types();
+$widget_types = elgg_get_widget_types();
$context = $vars['context'];
diff --git a/views/default/widgets/wrapper.php b/views/default/widgets/wrapper.php
index a113d114e..8e92c119b 100644
--- a/views/default/widgets/wrapper.php
+++ b/views/default/widgets/wrapper.php
@@ -12,7 +12,7 @@ if (!elgg_instanceof($widget, 'object', 'widget')) {
}
// @todo catch for disabled plugins
-$widgettypes = get_widget_types();
+$widgettypes = elgg_get_widget_types('all');
$handler = $widget->handler;