You are here

widgets.inc in Widgets 6

Implementaion of custom functions for Widgets module.

File

widgets.inc
View source
<?php

/**
 * @file
 * Implementaion of custom functions for Widgets module.
 */

/**
 * Get all widgets.
 *
 * @param $regions
 *	Restrict widgets to only this region.
 * @return
 *	List of widgets.
 */
function widgets_get_widgets($region = NULL) {
  $options = array();

  // Get widget types.
  $types = variable_get('widgets_types', NULL);
  if (is_null($types)) {
    return $options;
  }
  $enabled_types = array();
  foreach ($types as $key => $value) {
    if ($value != '0') {
      $enabled_types[] = "'{$key}'";
    }
  }
  $enabled_types = implode(',', $enabled_types);
  if ($results = db_query("SELECT n.nid, n.title, w.weight FROM {node} n LEFT JOIN {widgets} w ON w.widget_nid = n.nid WHERE n.type IN (" . $enabled_types . ") AND n.status = 1 ORDER BY w.weight ASC")) {
    while ($row = db_fetch_array($results)) {
      $options[$row['nid']] = $row['title'];
    }
  }
  return $options;
}

/**
 * Get selected widgets for a node.
 *
 * @param $nid
 *	Node ID.
 * @return
 *	Array containing selected widget ID's.
 */
function widgets_get_selected($nid) {
  $selected = array();
  if ($results = db_query('SELECT * FROM {widgets} WHERE nid = %d ORDER BY weight ASC', $nid)) {
    while ($row = db_fetch_array($results)) {
      $selected[] = $row['widget_nid'];
    }
  }
  return $selected;
}

/**
 * Get default set of widgets for node type.
 *
 * @param $type
 *	The node type name.
 */
function widgets_get_default($type) {
  return variable_get("widgets_default_{$type}", array());
}

/**
 * Save association between node and widgets.
 *
 * @param $node
 *	Node object.
 */
function widgets_write_record($node) {
  db_query('DELETE FROM {widgets} WHERE nid = %d', $node->nid);
  db_query('DELETE FROM {widgets_status} WHERE nid = %d', $node->nid);
  $widgets = array_values($node->selected_widgets);
  for ($i = 0; $i < sizeof($widgets); $i++) {
    $data = (object) array(
      'nid' => $node->nid,
      'widget_nid' => $widgets[$i],
      'weight' => $i,
    );
    drupal_write_record('widgets', $data);
  }

  // Write status record.
  $disabled = !$node->disable_widgets ? 0 : 1;
  $default = !$node->default_widgets ? 0 : 1;
  drupal_write_record('widgets_status', $data = (object) array(
    'nid' => $node->nid,
    'disabled' => $disabled,
    'use_default' => $default,
  ));
}

/**
 * Add javascript and stylesheets required for the multiselect widget.
 *
 * @param $element_id
 *	DOM ID of the element to transform to a multiselect.
 */
function widgets_add_multiselect($element_id) {

  // Styles.
  drupal_add_css(drupal_get_path('module', 'jquery_ui') . '/jquery.ui/themes/base/ui.all.css');
  drupal_add_css(drupal_get_path('module', 'widgets') . '/js/multiselect/css/ui.multiselect.css');
  drupal_add_css(drupal_get_path('module', 'widgets') . '/css/widgets.css');

  // jQuery UI.
  jquery_ui_add(array(
    'ui.sortable',
    'ui.draggable',
  ));

  // Multiselect.
  drupal_add_js(drupal_get_path('module', 'widgets') . '/js/form.js');
  drupal_add_js(drupal_get_path('module', 'widgets') . '/js/multiselect/js/ui.multiselect.js');
  drupal_add_js('Drupal.behaviors.attachWidgets = function(){$("#' . $element_id . '").multiselect(); widgetsStatus(); }', 'inline');
}

Functions

Namesort descending Description
widgets_add_multiselect Add javascript and stylesheets required for the multiselect widget.
widgets_get_default Get default set of widgets for node type.
widgets_get_selected Get selected widgets for a node.
widgets_get_widgets Get all widgets.
widgets_write_record Save association between node and widgets.