? .git
? Doxyfile
? Views2.kdevelop
? Views2.kdevses
? profile.views.inc.patch
? views_test
? modules/taxonomy.views.inc.txt
? modules/views_taxonomy.inc_.txt
Index: css/admin.css
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/views/css/admin.css,v
retrieving revision 1.23
diff -u -p -r1.23 admin.css
--- css/admin.css	17 Mar 2008 21:43:04 -0000	1.23
+++ css/admin.css	29 Mar 2008 13:33:46 -0000
@@ -189,8 +189,6 @@ div.views-display-deleted div.tab-sectio
 #views-ajax-pad {
   background: transparent;
   margin-top: 0px;
-  min-height: 200px;
-  _height: 200px; /* stupid IE */
 }
 
 #views-ajax-title {
@@ -207,7 +205,7 @@ div.views-display-deleted div.tab-sectio
   margin-left: 117px;
   border: #ADB7BE 1px solid;
   border-top: 0;
-  padding: 3em 0em;
+  /* padding: 3em 0em; */
   text-align: center;
   background: transparent;
   font-style: italic;
Index: modules/profile.views.inc
===================================================================
RCS file: modules/profile.views.inc
diff -N modules/profile.views.inc
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ modules/profile.views.inc	29 Mar 2008 13:33:46 -0000
@@ -0,0 +1,215 @@
+<?php
+//$Id$
+/**
+ * @file
+ * Provide views data and handlers for user.module
+ */
+
+/**
+ * @defgroup views_user_module user.module handlers
+ *
+ * @{
+ */
+
+/**
+ * Implementation of hook_views_data()
+ */
+function profile_views_data() {
+  // Define the base group of this table. Fields that don't
+  // have a group defined will go into this field by default.
+  $data['profile_values']['table']['group']  = t('Profile');
+  $data['profile_values']['table']['join']['users']['handler'] = 'views_join';
+  $data['profile_values']['table']['join']['users']['arguments'] = array('profile_values', 'users', 'uid', 'uid');
+  $data['profile_values']['table']['join']['node']['handler'] = 'views_join';
+  $data['profile_values']['table']['join']['node']['arguments'] = array('profile_values', 'users', 'uid', 'uid');
+
+  $fields = profile_views_get_fields();
+  foreach($fields as $field) {
+    $data[$field->name] = array(
+      'group' => t('Profile'),
+      'table' => array(
+        'join' => array(
+          'table' => 'profile_values',
+          'users' => array(
+            'arguments' => array('profile_values', 'users', 'uid', 'uid'),
+          ),
+          'node' => array(
+            'arguments' => array('profile_values', 'users', 'uid', 'uid'),
+          ),
+        ),
+      ),
+      'value' => profile_views_fetch_field($field),
+    );
+  }
+
+  return $data;
+}
+
+/**
+ * Get all profile fields
+ */
+function profile_views_get_fields() {
+
+    $fields = array();
+
+    $results = db_query("SELECT * FROM {profile_fields} ORDER BY category, weight");
+
+    while ($row = db_fetch_object($results)) {
+        // don't include private fields
+        if (user_access('administer users') || $row->visibility != PROFILE_PRIVATE) {
+            // make this work for default and modified profile.module
+            //$row->options = unserialize($row->options);
+            if( !empty($row->options) ){
+              if( unserialize($row->options) == false ){
+                // unserialized fields default version
+                $options = $row->options;
+                unset($row->options);
+                $row->options['selection'] = $options;
+              }
+              else {
+                // serialized fields or modified version
+                $row->options = unserialize($row->options);
+              }
+            }
+            $fields[] = $row;
+        }
+    }
+    return $fields;
+}
+
+/**
+ * Add profile fields to view table
+ */
+function profile_views_fetch_field($field) {
+  // build a base structure of knowns.
+  // ['profile_values']['value-'. $field->fid]
+  $data = array(
+    'title' => t('@field-name', array('@field-name' => $field->title)),
+    'field' => array(
+      'group' => t('Profile'),
+      // this is optional?
+      'field' => 'value',
+      // Provide handler below
+    ),
+/*
+Not implemented yet
+    'sort' => array(
+      'handler' => 'views_handler_sort',
+      'help' => t('This will sort nodes by taxonomy weight and name, as defined in the category administration.'),
+    ),
+    'filter' => array(
+      'handler' => 'views_handler_filter_taxonomy',
+    ),
+*/
+  );
+
+  // TODO - merge other array into data array
+  switch ($field->type) {
+    case 'vocabulary':
+      $data['help'] = t('This will display all options of the profile field %field-name. ', array('%field-name' => $field->title));
+      $data['sortable'] = true;
+      $data['field']['handler'] = 'views_handler_field_profile_vocabulary';
+      break;
+
+    case 'selection':
+      $data['help'] = t('This will display all options of the profile field %field-name. ', array('%field-name' => $field->title));
+      $data['sortable'] = true;
+      $data['field']['handler'] = 'views_handler_field_profile_selection';
+      break;
+
+    case 'date':
+      $data['help'] = t('Display the date of the %field-name field.', array('%field-name' => $field ->title));
+      $data['sortable'] = false;
+      $data['field']['handler'] = 'views_handler_field_profile_date';
+      break;
+
+    case 'checkbox':
+      $data['help'] = t('Checkbox based profile field help');
+      $data['sortable'] = true;
+      $data['field']['handler'] = 'views_handler_field_profile_checkbox';
+      break;
+
+    case 'textarea':
+      $data['help'] = t('Other types based profile field help');
+      $data['sortable'] = true;
+      $data['field']['handler'] = 'views_handler_field_profile_textarea';
+      break;
+
+    default:
+      $data['help'] = t('Other types based profile field help');
+      $data['sortable'] = true;
+      $data['field']['handler'] = 'views_handler_field_profile_default';
+  }
+
+  return $data;
+}
+
+
+class views_handler_field_profile extends views_handler_field {
+
+  // looks like only date field is serialized now...
+  function prepare_value($value) {
+
+    return $value->{$this->field_alias};
+    $temp = unserialize($value->{$this->field_alias});
+    return ($temp === false) ? $value->{$this->field_alias} : $temp;
+  }
+
+  function render() {
+    $value = $this->prepare_value($value);
+    return check_markup($value);
+  }
+}
+
+class views_handler_field_profile_vocabulary extends views_handler_field_profile {
+  /**
+   * Use profile function to render output.
+   */
+  function render($value) {
+    return _profile_field_vocabulary_getlist( unserialize($value) , 'taxonomy/term/' );
+  }
+}
+
+class views_handler_field_profile_selection extends views_handler_field_profile {
+  function render() {
+    $value = $this->prepare_value($value);
+    if ( !is_array($value)) { $value = array($value); } // handles cases where values were set before this new profile module was put in place
+    return check_plain(implode(', ',$value));
+  }
+}
+
+class views_handler_field_profile_date extends views_handler_field_profile {
+  /**
+   * Display a profile field of type 'date'
+   */
+  function render($value) {
+    // TODO - add options.
+    $format = substr(variable_get('date_format_short', 'm/d/Y - H:i'), 0, 5);
+    // Note: Avoid PHP's date() because it does not handle dates before
+    // 1970 on Windows. This would make the date field useless for e.g.
+    // birthdays.
+    $value = unserialize($value);
+    $replace = array('d' => sprintf('%02d', $value['day']),
+                    'j' => $value['day'],
+                    'm' => sprintf('%02d', $value['month']),
+                    'M' => map_month($value['month']),
+                    'Y' => $value['year'],
+                    'H:i' => null,
+                    'g:ia' => null);
+    return strtr($format, $replace);
+  }
+}
+
+class views_handler_field_profile_checkbox extends views_handler_field_profile {
+  /**
+   * Display a profile field of type 'checkbox', view as tick mark
+   */
+  function render($value) {
+    return ((check_plain($this->prepare_value($value)) == 0) ? '&#10007;' : '&#10003;');
+  }
+}
+
+class views_handler_field_profile_textarea extends views_handler_field_profile {
+
+  // use parent render
+}
