From 8f69c1fa943e2f5a6bdf10eabde1f24f9971a267 Mon Sep 17 00:00:00 2001
From: Sascha Grossenbacher <saschagros@gmail.com>
Date: Sat, 2 Apr 2011 10:51:31 +0200
Subject: [PATCH] Issue #1103458 by Berdir: Simplified relationship types listing pgae.

---
 .../user_relationship_defaults.module              |   47 ++++++++-----------
 .../user_relationship_implications.module          |   23 ---------
 user_relationships.admin.inc                       |   49 ++++++++++----------
 user_relationships.api.php                         |   28 +++++++++++
 4 files changed, 72 insertions(+), 75 deletions(-)

diff --git a/user_relationship_defaults/user_relationship_defaults.module b/user_relationship_defaults/user_relationship_defaults.module
index a4fcaf5..a1be106 100644
--- a/user_relationship_defaults/user_relationship_defaults.module
+++ b/user_relationship_defaults/user_relationship_defaults.module
@@ -258,36 +258,29 @@ function _user_relationship_defaults_create_default_relationships($account) {
 /**
  * hook_user_relationships_admin_page_alter()
  */
-function user_relationship_defaults_user_relationships_page_alter($page_id, &$page, &$current_table) {
-  switch ($page_id) {
-  case 'types list':
-    $defaults = user_relationship_defaults_load();
-
-    $default_rows = array();
-    foreach ($defaults as $default) {
-      $default_rows[] = array(
-        theme('username', array('account' => $default->user)),
-        $default->relationship_type->name,
-        l(t('delete'), "admin/config/people/relationships/defaults/{$default->rdid}/delete"),
-      );
-    }
-
-    if (sizeof($default_rows) <= 0) {
-      $default_rows[] = array(array('data' => t('No default relationships available.'), 'colspan' => 3));
-    }
+function user_relationship_defaults_user_relationships_types_list_alter(&$page) {
+  $defaults = user_relationship_defaults_load();
 
-    $page['defaults'] = array(
-      '#type'   => 'fieldset',
-      '#title'  => t('Default Relationships'),
-      '#weight' => 2,
-      '#pre_render' => array(),
-      '#attributes' => array(),
+  $default_rows = array();
+  foreach ($defaults as $default) {
+    $default_rows[] = array(
+      $default->relationship_type->name,
+      theme('username', array('account' => $default->user)),
+      l(t('delete'), "admin/config/people/relationships/defaults/{$default->rdid}/delete"),
     );
-      $page['defaults']['list'] = array(
-        '#markup' => theme('table', array('header' => array(t('User'), t('Relationship'), t('Operations')), 'rows' => $default_rows))
-      );
-    break;
   }
+
+  $page['defaults'] = array(
+    '#type'   => 'fieldset',
+    '#title'  => t('Default Relationships'),
+    '#weight' => 2,
+  );
+  $page['defaults']['list'] = array(
+    '#theme' => 'table',
+    '#header' => array(t('Relationship type'), t('User'), t('Operations')),
+    '#rows' => $default_rows,
+    '#empty' => t('No default relationships available.'),
+  );
 }
 
 /**
diff --git a/user_relationship_implications/user_relationship_implications.module b/user_relationship_implications/user_relationship_implications.module
index 1b6242f..c38c89c 100644
--- a/user_relationship_implications/user_relationship_implications.module
+++ b/user_relationship_implications/user_relationship_implications.module
@@ -262,29 +262,6 @@ function user_relationship_implications_user_relationships_save($relationship, $
 }
 
 /**
- * hook_user_relationships_page_alter()
- */
-function user_relationship_implications_user_relationships_page_alter($page_id, &$page, &$table) {
-  switch ($page_id) {
-  case 'types list':
-    array_splice($table['headers'], 2, 0, t('Implies'));
-
-    foreach ($table['data'] as $key => $rtype) {
-      $rtype = user_relationships_type_load($rtype->rtid);
-      array_splice($table['rows'][$key], 2, 0, '&nbsp;');
-
-      $names = array();
-      foreach ($rtype->implies as $implied_rtid => $implication) {
-        $implied = user_relationships_type_load($implied_rtid);
-        $names[] = $implied->name;
-      }
-      $table['rows'][$key][2] = implode(', ', $names);
-    }
-    break;
-  }
-}
-
-/**
  * Categorized list of relationships for a given user
  */
 function theme_user_relationship_implications_page($variables) {
diff --git a/user_relationships.admin.inc b/user_relationships.admin.inc
index 298f83b..5faf3df 100644
--- a/user_relationships.admin.inc
+++ b/user_relationships.admin.inc
@@ -471,46 +471,45 @@ function _user_relationships_update_translations(&$relationship_type) {
 function user_relationships_admin_types_list_page() {
   $relationship_types = user_relationships_types_load();
 
-  $table['headers'] = array(t('Name'), t('Plural'), t('Type'), t('Requires Approval'), t('Expiration'), t('Operations'));
-  $table['data'] = array();
-  $table['rows'] = array();
+  $headers = array(t('Name'), t('Type'), t('Requires Approval'), t('Operations'));
+  $rows = array();
 
   foreach ($relationship_types as $relationship) {
-    $table['data'][] = $relationship;
-    $table['rows'][] = array(
+
+    $approval = t('No');
+    if ($relationship->requires_approval) {
+      if ($relationship->expires_val) {
+        $approval = format_plural($relationship->expires_val, 'Yes (within 1 day)', 'Yes (within @count days)');
+      }
+      else {
+        $approval = t('Yes');
+      }
+    }
+
+    $rows[$relationship->rtid] = array(
       $relationship->name,
-      $relationship->plural_name,
-      ($relationship->is_oneway ? ($relationship->is_reciprocal ? t('reciprocal') : t('one way')) : t('mutual')),
-      ($relationship->requires_approval ? t('yes') : t('no')),
-      ($relationship->expires_val ? t('@expires_val', array('@expires_val' => format_plural($relationship->expires_val, '1 day', '@count days'))) : t('Never')),
-      l(t('edit'),    "admin/config/people/relationships/{$relationship->rtid}/edit") .' | '.
+      ($relationship->is_oneway ? ($relationship->is_reciprocal ? t('Reciprocal') : t('One-way')) : t('Mutual')),
+      $approval,
+      l(t('edit'),    "admin/config/people/relationships/{$relationship->rtid}/edit") . ' | ' .
       l(t('delete'),  "admin/config/people/relationships/{$relationship->rtid}/delete")
     );
   }
 
-  foreach (module_implements('user_relationships_page_alter') as $module) {
-    $function = "{$module}_user_relationships_page_alter";
-    $function('types list', $page, $table);
-  }
-
-  if (!sizeof($table['rows'])) {
-    $table['rows'][] = array(array('data' => t('No relationships available.'), 'colspan' => sizeof($table['headers'])));
-  }
-
   $page['relationships'] = array(
     '#type'   => 'fieldset',
     '#title'  => t('Relationship Types'),
     '#weight' => 0,
-    // No automatic fieldset processing to avoid fatal error. Maybe a core bug?
-    '#pre_render' => array(),
-    // Avoid notice/error in seven theme.
-    '#attributes' => array(),
   );
   $page['relationships']['list'] = array(
-    '#markup' => theme('table', array('header' => $table['headers'], 'rows' => $table['rows']))
+    '#theme' => 'table',
+    '#header' => $headers,
+    '#rows' => $rows,
+    '#empty' => t('No relationships available.'),
   );
 
-  return drupal_render($page);
+  drupal_alter('user_relationships_types_list', $page);
+
+  return $page;
 }
 
 
diff --git a/user_relationships.api.php b/user_relationships.api.php
index 31385e7..fb8f7c8 100644
--- a/user_relationships.api.php
+++ b/user_relationships.api.php
@@ -128,4 +128,32 @@ function hook_user_relationships_insert($relationship) {
  */
 function hook_user_relationships_delete($relationship, $action) {
 
+}
+
+/**
+ * Alter the relationship types listing page.
+ */
+function hook_user_relationships_types_list_alter(&$page) {
+  $defaults = user_relationship_defaults_load();
+
+  $default_rows = array();
+  foreach ($defaults as $default) {
+    $default_rows[] = array(
+      theme('username', array('account' => $default->user)),
+      $default->relationship_type->name,
+      l(t('delete'), "admin/config/people/relationships/defaults/{$default->rdid}/delete"),
+    );
+  }
+
+  $page['defaults'] = array(
+    '#type'   => 'fieldset',
+    '#title'  => t('Default Relationships'),
+    '#weight' => 2,
+  );
+  $page['defaults']['list'] = array(
+    '#theme' => 'table',
+    '#header' => array(t('User'), t('Relationship'), t('Operations')),
+    '#rows' => $default_rows,
+    '#empty' => t('No default relationships available.'),
+  );
 }
\ No newline at end of file
-- 
1.7.4.1

