Removing translation directories
[project/views.git] / views.module
index 743dfda..833cd0c 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-// $Id$
 
 // ---------------------------------------------------------------------------
 // Drupal Hooks
@@ -145,7 +144,7 @@ function views_menu_inline_items(&$items) {
 function views_views_tabs($op) {
   switch ($op) {
     case 'names':
-      return array('edit', 'view', 'clone', 'export');
+      return array('edit', 'view', 'clone', 'export', 'add');
       break;
   }
 }
@@ -183,7 +182,8 @@ function views_get_all_urls() {
   if ($cache == 0) {
     $views = array();
     $used = array();
-    $result = db_query("SELECT name, url FROM {view_view} WHERE page = 1");
+    // avoid creating empty path items by requiring an URL to be set
+    $result = db_query("SELECT name, url FROM {view_view} WHERE page = 1 AND LENGTH(url) > 0");
 
     while ($view = db_fetch_object($result)) {
       $used[$view->name] = TRUE;
@@ -196,9 +196,7 @@ function views_get_all_urls() {
 
     foreach ($default_views as $name => $view) {
       if ($view->page && !$used[$name] && ($views_status[$name] == 'enabled' || (!$view->disabled && $views_status[$name] != 'disabled'))) {
-        if ($view->url{0} == '$' || strpos($view->url, '/$') !== FALSE) {
           $views[$view->name] = $view->url;
-        }
       }
     }
     cache_set("views_urls", 'cache_views', serialize($views));
@@ -303,7 +301,7 @@ function views_access($view, $account = NULL) {
   }
 
   // All views with an empty access setting are available to all roles.
-  if (!$view->access) { 
+  if (!$view->access) {
     return TRUE;
   }
 
@@ -524,7 +522,7 @@ function views_build_view($type, &$view, $args = array(), $use_pager = false, $l
   if ($args == NULL) {
     $args = array();
   }
-  
+
   // if no filter values are passed in, get them from the $_GET array
   if ($filters == NULL) {
     $filters = views_get_filter_values();
@@ -565,10 +563,10 @@ function views_build_view($type, &$view, $args = array(), $use_pager = false, $l
     return $info;
   }
 
-  $query = db_rewrite_sql($info['query'], 'node');
-
   $items = array();
-  if ($query) {
+  if ($info['query']) {
+    $query = db_rewrite_sql($info['query'], 'node');
+
     if ($view->use_pager) {
       $cquery = db_rewrite_sql($info['countquery'], 'node', 'nid', $info['rewrite_args']);
       $result = pager_query($query, $view->pager_limit, $view->use_pager - 1, $cquery, $info['args']);
@@ -833,47 +831,47 @@ function views_invalidate_cache() {
  */
 function _views_view_fields() {
   return array(
-    'vid' => '%d', 
-    'name' => "'%s'", 
-    'description' => "'%s'", 
-    'access' => "'%s'", 
-    'page' => '%d', 
-    'page_title' => "'%s'", 
-    'page_header' => "'%s'", 
-    'page_header_format' => '%d', 
-    'page_footer' => "'%s'", 
-    'page_footer_format' => '%d', 
-    'page_empty' => "'%s'", 
-    'page_empty_format' => '%d', 
-    'page_type' => "'%s'", 
-    'use_pager' => '%d', 
-    'nodes_per_page' => '%d', 
-    'url' => "'%s'", 
-    'menu' => '%d', 
-    'menu_tab' => '%d', 
-    'menu_tab_default' => '%d', 
-    'menu_tab_weight' => '%d', 
-    'menu_title' => "'%s'", 
+    'vid' => '%d',
+    'name' => "'%s'",
+    'description' => "'%s'",
+    'access' => "'%s'",
+    'page' => '%d',
+    'page_title' => "'%s'",
+    'page_header' => "'%s'",
+    'page_header_format' => '%d',
+    'page_footer' => "'%s'",
+    'page_footer_format' => '%d',
+    'page_empty' => "'%s'",
+    'page_empty_format' => '%d',
+    'page_type' => "'%s'",
+    'use_pager' => '%d',
+    'nodes_per_page' => '%d',
+    'url' => "'%s'",
+    'menu' => '%d',
+    'menu_tab' => '%d',
+    'menu_tab_default' => '%d',
+    'menu_tab_weight' => '%d',
+    'menu_title' => "'%s'",
     'menu_tab_default_parent_type' => "'%s'",
-    'menu_parent_title' => "'%s'", 
-    'menu_parent_tab_weight' => '%d', 
-    'block' => '%d', 
-    'block_title' => "'%s'", 
-    'block_use_page_header' => '%d', 
-    'block_header' => "'%s'", 
-    'block_header_format' => '%d', 
-    'block_use_page_footer' => '%d', 
-    'block_footer' => "'%s'", 
-    'block_footer_format' => '%d', 
-    'block_use_page_empty' => '%d', 
-    'block_empty' => "'%s'", 
-    'block_empty_format' => '%d', 
-    'block_type' => "'%s'", 
-    'nodes_per_block' => '%d', 
-    'block_more' => '%d', 
-    'breadcrumb_no_home' => '%d', 
-    'changed' => '%d', 
-    'view_args_php' => "'%s'", 
+    'menu_parent_title' => "'%s'",
+    'menu_parent_tab_weight' => '%d',
+    'block' => '%d',
+    'block_title' => "'%s'",
+    'block_use_page_header' => '%d',
+    'block_header' => "'%s'",
+    'block_header_format' => '%d',
+    'block_use_page_footer' => '%d',
+    'block_footer' => "'%s'",
+    'block_footer_format' => '%d',
+    'block_use_page_empty' => '%d',
+    'block_empty' => "'%s'",
+    'block_empty_format' => '%d',
+    'block_type' => "'%s'",
+    'nodes_per_block' => '%d',
+    'block_more' => '%d',
+    'breadcrumb_no_home' => '%d',
+    'changed' => '%d',
+    'view_args_php' => "'%s'",
     'is_cacheable' => '%d',
   );
 }
@@ -1315,7 +1313,7 @@ function views_filters($view) {
   $form['#action'] = url($view->real_url ? $view->real_url : $view->url, NULL, NULL, true);
   $form['view'] = array('#type' => 'value', '#value' => $view);
   $form['submit'] = array('#type' => 'button', '#name' => '', '#value' => t('Submit'));
-  
+
   // clean URL get forms breaks if we don't give it a 'q'.
   if (!(bool)variable_get('clean_url', '0')) {
     $form['q'] = array(
@@ -1330,6 +1328,10 @@ function views_filters($view) {
 }
 
 function _views_build_filters_form($view) {
+  // When the form is retrieved through an AJAX callback, the cache hasn't
+  // been loaded yet. The cache is necesssary for _views_get_filters().
+  views_load_cache();
+
   $filters = _views_get_filters();
   foreach ($view->exposed_filter as $count => $expose) {
     $id = $expose['id'];
@@ -1387,7 +1389,7 @@ function _views_build_filters_form($view) {
     }
     $form["filter$count"] = $item;
   }
-  
+
   return $form;
 }
 
@@ -1679,6 +1681,7 @@ function views_handler_sort_date_options() {
 }
 
 function views_handler_sort_date($op, &$query, $sortinfo, $sort) {
+  $timezone = _views_get_timezone();
   switch($sort['options']) {
     case 'normal':
     default:
@@ -1686,19 +1689,19 @@ function views_handler_sort_date($op, &$query, $sortinfo, $sort) {
       $field = $sortinfo['field'];
       break;
     case 'minute':
-      $field = "DATE_FORMAT(FROM_UNIXTIME($sortinfo[table].$sortinfo[field]), '%Y%m%%d%H%m')";
+      $field = "DATE_FORMAT(FROM_UNIXTIME($sortinfo[table].$sortinfo[field]), '%Y%m%%d%H%i')";
       break;
     case 'hour':
       $field = "DATE_FORMAT(FROM_UNIXTIME($sortinfo[table].$sortinfo[field]), '%Y%m%%d%H')";
       break;
     case 'day':
-      $field = "DATE_FORMAT(FROM_UNIXTIME($sortinfo[table].$sortinfo[field]), '%Y%m%%d')";
+      $field = "DATE_FORMAT(FROM_UNIXTIME($sortinfo[table].$sortinfo[field]+$timezone), '%Y%m%%d')";
       break;
     case 'month':
-      $field = "DATE_FORMAT(FROM_UNIXTIME($sortinfo[table].$sortinfo[field]), '%Y%m%)";
+      $field = "DATE_FORMAT(FROM_UNIXTIME($sortinfo[table].$sortinfo[field]+$timezone), '%Y%m')";
       break;
     case 'year':
-      $field = "DATE_FORMAT(FROM_UNIXTIME($sortinfo[table].$sortinfo[field]), '%Y%')";
+      $field = "DATE_FORMAT(FROM_UNIXTIME($sortinfo[table].$sortinfo[field]+$timezone), '%Y')";
       break;
   }
   $alias = $as = $sortinfo['table'] . '_' . $sortinfo['field'];
@@ -1987,6 +1990,23 @@ function views_handler_filter_like($op, $filter, $filterinfo, &$query) {
 }
 
 /**
+ * Custom filter for IS NULL and IS NOT NULL operations
+ * Operator must be 'IS' or 'IS NOT'
+ */
+function views_handler_filter_null($op, $filter, $filterinfo, &$query) {
+  switch($op) {
+    case 'handler':
+      $table = $filterinfo['table'];
+      $column = $filterinfo['field'];
+      $field = "$table.$column";
+      $query->ensure_table($table);
+      $operator = $filter['operator'];
+      $query->add_where("$field $operator NULL");
+      break;
+  }
+}
+
+/**
  * Format a field as file size.
  */
 function views_handler_field_filesize($fieldinfo, $fielddata, $value, $data) {
@@ -2123,3 +2143,8 @@ function views_form_alter($form_id, &$form) {
     views_invalidate_cache();
   }
 }
+
+// An implementation of hook_devel_caches() from devel.module. Must be in views.module so it always is included.
+function views_devel_caches() {
+  return array('cache_views');
+}
\ No newline at end of file