Index: modules/views/views.install
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/views/views.install,v
retrieving revision 1.9
diff -u -r1.9 views.install
--- modules/views/views.install	20 Mar 2006 17:50:19 -0000	1.9
+++ modules/views/views.install	22 Mar 2006 02:42:01 -0000
@@ -42,6 +42,7 @@
         block_use_page_empty int(1),
         block_empty longtext,
         block_empty_format int(4) NOT NULL,
+        block_args longtext,
         block_type varchar(20),
         nodes_per_block int(5),
         block_more int(1),
@@ -290,3 +291,9 @@
   db_add_column($ret, 'view_view', 'block_empty_format', 'int(4)', array('default' => 0));
   return $ret;
 }
+
+function views_update_5() {
+  $ret = array();
+  db_add_column($ret, 'view_view', 'block_args', 'longtext');
+  return $ret;
+}
Index: modules/views/views.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/views/views.module,v
retrieving revision 1.91
diff -u -r1.91 views.module
--- modules/views/views.module	20 Mar 2006 20:02:22 -0000	1.91
+++ modules/views/views.module	22 Mar 2006 04:00:54 -0000
@@ -463,6 +463,11 @@
   }
 
   $output = views_build_view('page', $view, $args, $view->use_pager, $view->nodes_per_page);
+  if (!$output) {
+    drupal_not_found();
+    exit;
+  }
+
   return $output;
 }
 
@@ -481,10 +486,21 @@
   if ($view->access && !array_intersect($roles, $view->access)) {
     return NULL;
   }
-
-  $block['content'] = views_build_view('block', $view, $args, false, $view->nodes_per_block);
-  $block['subject'] = views_get_title($view, 'block');
-  return $block;
+  
+  $args = array();
+  if ($view->block_args) {
+    $args = eval($view->block_args);
+  }
+  
+  $content = views_build_view('block', $view, $args, false, $view->nodes_per_block);
+  if ($content) {
+    $block['content'] = $content;
+    $block['subject'] = views_get_title($view, 'block');
+    return $block;
+  }
+  else {
+    return NULL;
+  }
 }
 
 /**
@@ -591,6 +607,13 @@
     $output .= $function($view, $items);
   }
 
+  // In block mode, change $view->url to include the proper arguments.
+  if ($viewtype == $view->block_type && $args) {
+    $url = views_get_summary_link_base($view->argument[count($args)-1]['type'], $view->url, count($args), $args);
+    if ($url) {
+      $view->url = $url;
+    }
+  }
   $output .= views_theme('views_view', $view, $type, $items, $info['level'], $args);
 
   if ($use_pager) {
@@ -722,7 +745,7 @@
  * Provide all the fields in a view.
  */
 function _views_view_fields() {
-  return array('vid', 'name', 'description', 'access', 'page', 'page_title', 'page_header', 'page_header_format', 'page_footer', 'page_footer_format', 'page_empty', 'page_empty_format', 'page_type', 'use_pager', 'nodes_per_page', 'url', 'menu', 'menu_tab', 'menu_tab_default', 'menu_tab_weight', 'menu_title', 'block', 'block_title', 'block_use_page_header', 'block_header', 'block_header_format', 'block_use_page_footer', 'block_footer', 'block_footer_format', 'block_use_page_empty', 'block_empty', 'block_empty_format', 'block_type', 'nodes_per_block', 'block_more', 'url', 'breadcrumb_no_home', 'changed', 'query', 'countquery');
+  return array('vid', 'name', 'description', 'access', 'page', 'page_title', 'page_header', 'page_header_format', 'page_footer', 'page_footer_format', 'page_empty', 'page_empty_format', 'page_type', 'use_pager', 'nodes_per_page', 'url', 'menu', 'menu_tab', 'menu_tab_default', 'menu_tab_weight', 'menu_title', 'block', 'block_title', 'block_use_page_header', 'block_header', 'block_header_format', 'block_use_page_footer', 'block_footer', 'block_footer_format', 'block_use_page_empty', 'block_empty', 'block_empty_format', 'block_type', 'block_args', 'nodes_per_block', 'block_more', 'url', 'breadcrumb_no_home', 'changed', 'query', 'countquery');
 }
 
 /**
Index: modules/views/views_query.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/views/views_query.inc,v
retrieving revision 1.17
diff -u -r1.17 views_query.inc
--- modules/views/views_query.inc	20 Mar 2006 20:02:22 -0000	1.17
+++ modules/views/views_query.inc	22 Mar 2006 03:12:58 -0000
@@ -21,8 +21,8 @@
       // This is what we do if we expected an arg but we didn't get it.
       switch ($argument['argdefault']) {
         case 1:
-          drupal_not_found();
-          exit;
+          $info['fail'] = TRUE;
+          return $info;
         case 3:
         case 4:
           $self_sort = "ASC";
Index: modules/views/views_ui.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/views/views_ui.module,v
retrieving revision 1.4
diff -u -r1.4 views_ui.module
--- modules/views/views_ui.module	20 Mar 2006 06:30:48 -0000	1.4
+++ modules/views/views_ui.module	22 Mar 2006 02:48:44 -0000
@@ -996,6 +996,21 @@
 
   $form['block-info']['block_empty_fieldset']['block_empty_format'] = filter_form($view->block_empty_format, 1, array( 'block_empty_format'));
 
+  $form['block-info']['block_args_fieldset'] = array(
+    '#type' => 'fieldset',
+    '#collapsible' => TRUE,
+    '#collapsed' => TRUE,
+    '#title' => t('Block Arguments'),
+  );
+  $form['block-info']['block_args_fieldset']['block_args'] = array(
+    '#type' => 'textarea',
+    '#title' => t('Block Arguments Code'),
+    '#default_value' => $view->block_args,
+    '#cols' => 60,
+    '#rows' => 6,
+    '#description' => t('A snippet of PHP code that returns an array of arguments for views that require them.'),
+  );
+
   $form['save'] = array(
     '#type' => 'submit',
     '#value' => t('Save'),
