You are here

outline_designer_og.module in Outline Designer 7

Same filename and directory in other branches
  1. 6 outline_designer_og/outline_designer_og.module

File

outline_designer_og/outline_designer_og.module
View source
<?php

/**
 * Implements hook_form_alter().
 */
function outline_designer_og_form_alter(&$form, $form_state, $form_id) {
  if ($form_id == 'book_admin_edit' && arg(0) == 'outline_designer' && (arg(1) == 'og_ajax' || arg(1) == 'book')) {
    _outline_designer_book_admin_form_alter($form, $form_state, $form_id, 'outline_designer/og_ajax/');
  }
}

/**
 * Implements hook_menu().
 */
function outline_designer_og_menu() {
  $items['node/%node/outline_designer'] = array(
    'title' => 'Edit books',
    'page callback' => 'outline_designer_og_books',
    'page arguments' => array(
      1,
    ),
    'access callback' => '_outline_designer_og_books_access',
    'access arguments' => array(
      1,
    ),
    'weight' => 9,
    'type' => MENU_LOCAL_TASK,
  );
  $items['outline_designer/book/%node'] = array(
    'title' => 'Re-order book pages and change titles',
    'page callback' => 'drupal_get_form',
    'page arguments' => array(
      'book_admin_edit',
      2,
    ),
    'access callback' => '_outline_designer_og_book_access',
    'access arguments' => array(
      2,
    ),
    'type' => MENU_CALLBACK,
    'file' => 'book.admin.inc',
    'file path' => drupal_get_path('module', 'book'),
  );
  $items['outline_designer/og_ajax'] = array(
    'access callback' => '_outline_designer_og_ajax_access',
    'page callback' => '_outline_designer_ajax',
    'page arguments' => array(
      2,
      3,
      4,
      5,
      6,
    ),
    'type' => MENU_CALLBACK,
  );
  return $items;
}

/**
 * This function checks if the user accessign the ajax callback is a group admin
 * for any group. It'd be better obviously if we were checking that they were
 * admin for the group which books they are editing but that'd take rewritting
 * more of outline_designer than I'd like to do now.
 */
function _outline_designer_og_ajax_access() {
  global $user;

  // check for permissions that superceed groups
  if ($user->uid == 1 || user_access('administer book outlines') || user_access('outline own pages') && user_access('add content to books')) {
    return 1;
  }
  $result = db_query("SELECT uid\n                                  FROM {og_uid}\n                                  WHERE is_admin = :is_admin\n                                  AND uid = :uid", array(
    ':is_admin' => 1,
    ':uid' => $user->uid,
  ))
    ->fetchField();
  if (!empty($result)) {
    return 1;
  }
  else {
    return 0;
  }
}
function _outline_designer_og_books_access($node) {
  global $user;
  if (!og_is_group_type($node->type)) {
    return 0;
  }

  // Check that there's books in this group
  $val = db_query("SELECT bid\n                                 FROM {book} b\n                                 JOIN {og_ancestry} o\n                                 ON b.bid = o.nid\n                                 WHERE o.group_nid = :o.group_nid\n                                 LIMIT 1", array(
    ':o.group_nid' => $node->nid,
  ))
    ->fetchField();
  if (empty($val)) {
    return 0;
  }
  if ($user->uid == 1) {
    return 1;
  }
  if (!og_is_group_admin($node, $user)) {
    return 0;
  }
  return 1;
}
function _outline_designer_og_book_access($node) {
  global $user;
  if ($user->uid == 1) {
    return 1;
  }
  $group_nodes = og_get_node_groups($node);
  $is_group_admin = FALSE;
  foreach ($group_nodes as $nid => $title) {
    if (og_is_group_admin(node_load($nid), $user)) {
      $is_group_admin = TRUE;
    }
  }
  return $is_group_admin;
}

/**
 * @todo Please document this function.
 * @see http://drupal.org/node/1354
 */
function outline_designer_og_books($group_node) {
  $sql = "SELECT b.bid\n          FROM {book} b\n          JOIN {og_ancestry} o\n          ON b.bid = o.nid\n          WHERE o.group_nid = %d\n          GROUP BY b.bid";
  $bids = db_query("SELECT b.bid\n          FROM {book} b\n          JOIN {og_ancestry} o\n          ON b.bid = o.nid\n          WHERE o.group_nid = :o.group_nid\n          GROUP BY b.bid", array(
    ':o.group_nid' => $group_node->nid,
  ));
  $books = array();
  while ($row = db_fetch_array($bids)) {
    $books[$row['bid']] = node_load($row['bid']);
  }
  $item_list = array();
  foreach ($books as $book) {
    $item_list[] = l($book->title, "outline_designer/book/" . $book->nid);
  }
  return theme('item_list', array(
    'items' => $item_list,
    'title' => t("Books to rearrange in %group_name", array(
      '%group_name' => $group_node->title,
    )),
  ));
}

/**
 * Implements hook_new_book_alter().
 */
function outline_designer_og_new_book_object_alter(&$node) {

  // Load the group node.
  $group_node = node_load(db_query("SELECT group_nid\n                                    FROM {og_ancestry}\n                                    WHERE nid = :nid", array(
    ':nid' => $node->book['bid'],
  ))
    ->fetchField());
  $is_public = TRUE;
  if ($group_node->og_private) {
    $is_public = FALSE;
  }
  $node->og_public = $is_public;
  $node->og_groups[$group_node->nid] = $group_node->nid;
}

Functions

Namesort descending Description
outline_designer_og_books @todo Please document this function.
outline_designer_og_form_alter Implements hook_form_alter().
outline_designer_og_menu Implements hook_menu().
outline_designer_og_new_book_object_alter Implements hook_new_book_alter().
_outline_designer_og_ajax_access This function checks if the user accessign the ajax callback is a group admin for any group. It'd be better obviously if we were checking that they were admin for the group which books they are editing but that'd take rewritting more of…
_outline_designer_og_books_access
_outline_designer_og_book_access