aboutsummaryrefslogtreecommitdiff
path: root/mod/defaultwidgets/start.php
diff options
context:
space:
mode:
Diffstat (limited to 'mod/defaultwidgets/start.php')
-rw-r--r--mod/defaultwidgets/start.php256
1 files changed, 256 insertions, 0 deletions
diff --git a/mod/defaultwidgets/start.php b/mod/defaultwidgets/start.php
new file mode 100644
index 000000000..e76e16e26
--- /dev/null
+++ b/mod/defaultwidgets/start.php
@@ -0,0 +1,256 @@
+<?php
+/**
+ * Elgg default_widgets plugin.
+ *
+ * @package DefaultWidgets
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU
+ * @author Milan Magudia & Curverider
+ * @copyright HedgeHogs.net & Curverider ltd
+ *
+ * Code based on the work of:
+ * @author Jade Dominguez, Chad Sowald
+ * @copyright tastyseed, 2008
+ * @copyright Chad Sowald, 2008
+ * @link http://www.tastyseed.com
+ * @link http://www.chadsowald.com
+ * @author Diego Ramirez
+ * @links http://www.somosmas.org
+ *
+ */
+
+global $CONFIG;
+
+/**
+ * Default widgets initialisation
+ *
+ * These parameters are required for the event API, but we won't use them:
+ *
+ * @param unknown_type $event
+ * @param unknown_type $object_type
+ * @param unknown_type $object
+ */
+function defaultwidgets_init() {
+
+ // Load system configuration
+ register_page_handler ( 'defaultwidgets', 'defaultwidgets_page_handler' );
+
+ // register create user event hook
+ register_elgg_event_handler ( 'create', 'user', 'defaultwidgets_newusers' );
+
+ // set the widget access to the default access on validation if this is not an admin-created user
+ if (!isadminloggedin()) {
+ register_elgg_event_handler('validate', 'user', 'defaultwidgets_reset_access');
+ }
+
+ // Override metadata permissions
+ //register_plugin_hook ( 'permissions_check:metadata', 'object', 'defaultwidgets_can_edit_metadata' );
+}
+
+/**
+ * Overrides default permissions for the default widgets context
+ *
+ */
+function defaultwidgets_can_edit($hook_name, $entity_type, $return_value, $parameters) {
+ global $defaultwidget_access;
+
+ if ($defaultwidget_access) {
+ return true;
+ }
+ return $return_value;
+}
+
+/**
+ * Override the canEditMetadata function to return true for messages
+ *
+ */
+function defaultwidgets_can_edit_metadata($hook_name, $entity_type, $return_value, $parameters) {
+ global $defaultwidget_access;
+
+ if ($defaultwidget_access) {
+ return true;
+ }
+ return $return_value;
+
+}
+
+/**
+ * Override the canEdit function to return true for messages within a particular context.
+ *
+ */
+function defaultwidgets_can_edit_container($hook_name, $entity_type, $return_value, $parameters) {
+ global $defaultwidget_access;
+
+ if ($defaultwidget_access) {
+ return true;
+ }
+ return $return_value;
+}
+
+/**
+ * Extends the create user event to add admin defined widgets to the dashboard/profile context
+ */
+function defaultwidgets_newusers($event, $object_type, $object) {
+
+ // turn on permissions override
+ global $defaultwidget_access, $CONFIG;
+ $defaultwidget_access = true;
+
+ // get the new user guid
+ $guid = $object->guid;
+
+ if (isadminloggedin()) {
+ // this is an admin-created user
+ // no permissions problems, so set proper access now
+ // use system default access (not the admin's default access!, because that could be a personal access level)
+ $widget_access = $CONFIG->default_access;
+ } else {
+ // this is a regular registration
+ // set widget access to public for now and reset it properly during the validate event
+ // to avoid Elgg permissions problems
+ $widget_access = ACCESS_PUBLIC;
+ }
+
+ // check if it's set
+ if (! empty ( $guid )) {
+
+ // get the user entity
+ if ($user = get_entity ( $guid )) {
+
+ // can this user edit
+ if ($user->canEdit ()) {
+
+ // each of the contexts to add widgets for
+ $contexts = array ('profile', 'dashboard' );
+
+ // get the entities for the module
+ $entities = elgg_get_entities (array('type' => 'object', 'subtype' => 'moddefaultwidgets', 'limit' => 9999));
+
+ // check if the entity exists
+ if (isset ( $entities [0] )) {
+
+ // get the widgets for the context
+ $entity = $entities [0];
+
+ foreach ( $contexts as $context ) {
+ $current_widgets = $entity->$context;
+ list ( $left, $middle, $right ) = split ( '%%', $current_widgets );
+
+ // split columns into seperate widgets
+ $area1widgets = split ( '::', $left );
+ $area2widgets = split ( '::', $middle );
+ $area3widgets = split ( '::', $right );
+
+ // clear out variables if no widgets are available
+ if ($area1widgets [0] == "")
+ $area1widgets = false;
+ if ($area2widgets [0] == "")
+ $area2widgets = false;
+ if ($area3widgets [0] == "")
+ $area3widgets = false;
+
+ // generate left column widgets for a new user
+ if ($area1widgets) {
+ foreach ( $area1widgets as $i => $widget ) {
+ add_widget ( $guid, $widget, $context, ($i + 1), 1, $widget_access );
+ }
+ }
+
+ // generate middle column widgets for a new user
+ if ($area2widgets) {
+ foreach ( $area2widgets as $i => $widget ) {
+ add_widget ( $guid, $widget, $context, ($i + 1), 2, $widget_access );
+ }
+ }
+
+ // generate right column widgets for a new user
+ if ($area3widgets) {
+ foreach ( $area3widgets as $i => $widget ) {
+ add_widget ( $guid, $widget, $context, ($i + 1), 3, $widget_access );
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // turn off permissions override
+ $defaultwidget_access = false;
+}
+
+function defaultwidgets_reset_access($event, $object_type, $object) {
+
+ global $defaultwidget_access;
+
+ // turn on permissions override
+ $defaultwidget_access = true;
+
+ // the widgets are disabled, so turn on the ability to see disabled entities
+
+ $access_status = access_get_show_hidden_status();
+ access_show_hidden_entities(true);
+
+ $widgets = elgg_get_entities(array('type' => 'object', 'subtype' => 'widget', 'owner_guid' => $object->getGUID()));
+
+ if ($widgets) {
+ foreach($widgets as $widget) {
+ $widget->access_id = get_default_access();
+ $widget->save();
+ }
+ }
+
+ access_show_hidden_entities($access_status);
+
+ // turn off permissions override
+ $defaultwidget_access = false;
+
+ return true;
+}
+
+/**
+ * Default widgets page handler; allows the use of fancy URLs
+ *
+ * @param array $page From the page_handler function
+ * @return true|false Depending on success
+ */
+function defaultwidgets_page_handler($page) {
+ global $CONFIG;
+
+ if (isset ( $page [0] )) {
+
+ switch ($page [0]) {
+ case "profile" :
+ include (dirname ( __FILE__ ) . "/profile.php");
+ break;
+ case "dashboard" :
+ include (dirname ( __FILE__ ) . "/dashboard.php");
+ break;
+ }
+ } else {
+ register_error ( elgg_echo ( "defaultwidgets:admin:notfound" ) );
+ forward ( $CONFIG->wwwroot );
+ }
+ return true;
+}
+
+/**
+ * Page setup. Adds admin controls to the admin panel.
+ *
+ */
+function defaultwidgets_pagesetup() {
+ if (get_context () == 'admin' && isadminloggedin ()) {
+ global $CONFIG;
+ add_submenu_item ( elgg_echo ( 'defaultwidgets:menu:profile' ), $CONFIG->wwwroot . 'pg/defaultwidgets/profile' );
+ add_submenu_item ( elgg_echo ( 'defaultwidgets:menu:dashboard' ), $CONFIG->wwwroot . 'pg/defaultwidgets/dashboard' );
+ }
+}
+
+// Make sure the status initialisation function is called on initialisation
+register_elgg_event_handler ( 'init', 'system', 'defaultwidgets_init' );
+register_elgg_event_handler ( 'pagesetup', 'system', 'defaultwidgets_pagesetup' );
+
+register_plugin_hook ( 'permissions_check', 'user', 'defaultwidgets_can_edit' );
+register_plugin_hook ( 'permissions_check', 'object', 'defaultwidgets_can_edit' );
+register_plugin_hook ( 'container_permissions_check', 'user', 'defaultwidgets_can_edit_container' );
+
+register_action ( "defaultwidgets/update", false, $CONFIG->pluginspath . "defaultwidgets/actions/update.php" );