| 1 |
<?php |
<?php |
| 2 |
// $Id: admin.inc,v 1.154.2.7 2009/09/15 16:47:09 merlinofchaos Exp $ |
// $Id: admin.inc,v 1.154.2.8 2009/11/02 20:09:17 merlinofchaos Exp $ |
| 3 |
/** |
/** |
| 4 |
* @file admin.inc |
* @file admin.inc |
| 5 |
* Provides the Views' administrative interface. |
* Provides the Views' administrative interface. |
| 1226 |
// Get relationship labels |
// Get relationship labels |
| 1227 |
$relationships = array(); |
$relationships = array(); |
| 1228 |
// @todo: get_handlers() |
// @todo: get_handlers() |
| 1229 |
foreach ($display->handler->get_option('relationships') as $id => $relationship) { |
foreach ($display->handler->get_handlers('relationship') as $id => $handler) { |
|
$handler = views_get_handler($relationship['table'], $relationship['field'], 'relationship'); |
|
|
if (empty($handler)) { |
|
|
continue; |
|
|
} |
|
|
$handler->init($view, $relationship); |
|
| 1230 |
$relationships[$id] = $handler->label(); |
$relationships[$id] = $handler->label(); |
| 1231 |
} |
} |
| 1232 |
} |
} |
| 1233 |
|
|
|
// @todo: get_handlers() |
|
| 1234 |
foreach ($display->handler->get_option($types[$type]['plural']) as $id => $field) { |
foreach ($display->handler->get_option($types[$type]['plural']) as $id => $field) { |
| 1235 |
$fields[$id] = array(); |
$fields[$id] = array(); |
| 1236 |
|
|
| 1237 |
$handler = views_get_handler($field['table'], $field['field'], $type); |
$handler = $display->handler->get_handler($type, $id); |
| 1238 |
if (empty($handler)) { |
if (empty($handler)) { |
| 1239 |
$fields[$id]['class'] = 'broken'; |
$fields[$id]['class'] = 'broken'; |
| 1240 |
$fields[$id]['title'] = t("Error: handler for @table > @field doesn't exist!", array('@table' => $field['table'], '@field' => $field['field'])); |
$fields[$id]['title'] = t("Error: handler for @table > @field doesn't exist!", array('@table' => $field['table'], '@field' => $field['field'])); |
| 1241 |
$fields[$id]['info'] = ''; |
$fields[$id]['info'] = ''; |
| 1242 |
continue; |
continue; |
| 1243 |
} |
} |
|
$handler->init($view, $field); |
|
| 1244 |
|
|
| 1245 |
$field_name = $handler->ui_name(TRUE); |
$field_name = $handler->ui_name(TRUE); |
| 1246 |
if (!empty($field['relationship']) && !empty($relationships[$field['relationship']])) { |
if (!empty($field['relationship']) && !empty($relationships[$field['relationship']])) { |
| 1254 |
} |
} |
| 1255 |
$fields[$id]['info'] = $handler->admin_summary(); |
$fields[$id]['info'] = $handler->admin_summary(); |
| 1256 |
|
|
| 1257 |
|
if ($display->handler->use_group_by()) { |
| 1258 |
|
$fields[$id]['links'] = l('<span>' . t('Group settings') . '</span>', "admin/build/views/nojs/config-item-group/$view->name/$display->id/$type/$id", array('attributes' => array('class' => 'views-button-configure views-ajax-link', 'title' => t('Group settings')), 'html' => true)); |
| 1259 |
|
} |
| 1260 |
if ($handler->has_extra_options()) { |
if ($handler->has_extra_options()) { |
| 1261 |
$fields[$id]['links'] = l('<span>' . t('Settings') . '</span>', "admin/build/views/nojs/config-item-extra/$view->name/$display->id/$type/$id", array('attributes' => array('class' => 'views-button-configure views-ajax-link', 'title' => t('Settings')), 'html' => true)); |
$fields[$id]['links'] = l('<span>' . t('Settings') . '</span>', "admin/build/views/nojs/config-item-extra/$view->name/$display->id/$type/$id", array('attributes' => array('class' => 'views-button-configure views-ajax-link', 'title' => t('Settings')), 'html' => true)); |
| 1262 |
} |
} |
| 1451 |
'form_id' => 'views_ui_config_item_form', |
'form_id' => 'views_ui_config_item_form', |
| 1452 |
'args' => array('type', 'id'), |
'args' => array('type', 'id'), |
| 1453 |
), |
), |
| 1454 |
|
'config-item-group' => array( |
| 1455 |
|
'form_id' => 'views_ui_config_item_group_form', |
| 1456 |
|
'args' => array('type', 'id'), |
| 1457 |
|
), |
| 1458 |
'config-item-extra' => array( |
'config-item-extra' => array( |
| 1459 |
'form_id' => 'views_ui_config_item_extra_form', |
'form_id' => 'views_ui_config_item_extra_form', |
| 1460 |
'args' => array('type', 'id'), |
'args' => array('type', 'id'), |
| 2014 |
|
|
| 2015 |
// Get relationship labels |
// Get relationship labels |
| 2016 |
$relationships = array(); |
$relationships = array(); |
| 2017 |
// @todo: get_handlers() |
foreach ($display->handler->get_handlers('relationship') as $id => $handler) { |
|
foreach ($display->handler->get_option('relationships') as $id => $relationship) { |
|
|
$handler = views_get_handler($relationship['table'], $relationship['field'], 'relationship'); |
|
|
if (empty($handler)) { |
|
|
continue; |
|
|
} |
|
|
$handler->init($view, $relationship); |
|
| 2018 |
$relationships[$id] = $handler->label(); |
$relationships[$id] = $handler->label(); |
| 2019 |
} |
} |
| 2020 |
|
|
|
// @todo: get_handlers() |
|
| 2021 |
foreach ($display->handler->get_option($types[$type]['plural']) as $id => $field) { |
foreach ($display->handler->get_option($types[$type]['plural']) as $id => $field) { |
| 2022 |
$form[$id] = array('#tree' => TRUE); |
$form[$id] = array('#tree' => TRUE); |
| 2023 |
$form[$id]['weight'] = array( |
$form[$id]['weight'] = array( |
| 2025 |
'#delta' => 25, |
'#delta' => 25, |
| 2026 |
'#default_value' => ++$count, |
'#default_value' => ++$count, |
| 2027 |
); |
); |
| 2028 |
$handler = views_get_handler($field['table'], $field['field'], $type); |
$handler = $display->handler->get_handler($type, $id); |
| 2029 |
if ($handler) { |
if ($handler) { |
|
$handler->init($view, $field); |
|
| 2030 |
$name = $handler->ui_name() . ' ' . $handler->admin_summary(); |
$name = $handler->ui_name() . ' ' . $handler->admin_summary(); |
| 2031 |
if (!empty($field['relationship']) && !empty($relationships[$field['relationship']])) { |
if (!empty($field['relationship']) && !empty($relationships[$field['relationship']])) { |
| 2032 |
$name = '(' . $relationships[$field['relationship']] . ') ' . $name; |
$name = '(' . $relationships[$field['relationship']] . ') ' . $name; |
| 2147 |
|
|
| 2148 |
// Figure out all the base tables allowed based upon what the relationships provide. |
// Figure out all the base tables allowed based upon what the relationships provide. |
| 2149 |
$base_tables = $view->get_base_tables(); |
$base_tables = $view->get_base_tables(); |
| 2150 |
$options = views_fetch_fields(array_keys($base_tables), $type); |
$options = views_fetch_fields(array_keys($base_tables), $type, $display->handler->use_group_by()); |
| 2151 |
|
|
| 2152 |
if (!empty($options)) { |
if (!empty($options)) { |
| 2153 |
$groups = array('all' => t('<All>')); |
$groups = array('all' => t('<All>')); |
| 2212 |
list($table, $field) = explode('.', $field, 2); |
list($table, $field) = explode('.', $field, 2); |
| 2213 |
$id = $form_state['view']->add_item($form_state['display_id'], $type, $table, $field); |
$id = $form_state['view']->add_item($form_state['display_id'], $type, $table, $field); |
| 2214 |
|
|
| 2215 |
|
// check to see if we have group by settings |
| 2216 |
|
if ($form_state['view']->display_handler->use_group_by()) { |
| 2217 |
|
views_ui_add_form_to_stack('config-item-group', $form_state['view'], $form_state['display_id'], array($type, $id)); |
| 2218 |
|
} |
| 2219 |
|
|
| 2220 |
// check to see if this type has settings, if so add the settings form first |
// check to see if this type has settings, if so add the settings form first |
| 2221 |
$handler = views_get_handler($table, $field, $type); |
$handler = views_get_handler($table, $field, $type); |
| 2222 |
if ($handler && $handler->has_extra_options()) { |
if ($handler && $handler->has_extra_options()) { |
| 2248 |
$item = $view->get_item($display_id, $type, $id); |
$item = $view->get_item($display_id, $type, $id); |
| 2249 |
|
|
| 2250 |
if ($item) { |
if ($item) { |
| 2251 |
$handler = views_get_handler($item['table'], $item['field'], $type); |
$handler = $view->display_handler->get_handler($type, $id); |
| 2252 |
if (empty($handler)) { |
if (empty($handler)) { |
| 2253 |
$form['markup'] = array('#value' => t("Error: handler for @table > @field doesn't exist!", array('@table' => $item['table'], '@field' => $item['field']))); |
$form['markup'] = array('#value' => t("Error: handler for @table > @field doesn't exist!", array('@table' => $item['table'], '@field' => $item['field']))); |
| 2254 |
} |
} |
| 2255 |
else { |
else { |
|
$handler->init($view, $item); |
|
| 2256 |
$types = views_object_types(); |
$types = views_object_types(); |
| 2257 |
|
|
| 2258 |
if ($view->display_handler->defaultable_sections($types[$type]['plural'])) { |
if ($view->display_handler->defaultable_sections($types[$type]['plural'])) { |
| 2280 |
// If this relationship is valid for this type, add it to the list. |
// If this relationship is valid for this type, add it to the list. |
| 2281 |
$data = views_fetch_data($relationship['table']); |
$data = views_fetch_data($relationship['table']); |
| 2282 |
$base = $data[$relationship['field']]['relationship']['base']; |
$base = $data[$relationship['field']]['relationship']['base']; |
| 2283 |
$base_fields = views_fetch_fields($base, $form_state['type']); |
$base_fields = views_fetch_fields($base, $form_state['type'], $view->display_handler->use_group_by()); |
| 2284 |
if (isset($base_fields[$item['table'] . '.' . $item['field']])) { |
if (isset($base_fields[$item['table'] . '.' . $item['field']])) { |
| 2285 |
$relationship_handler->init($view, $relationship); |
$relationship_handler->init($view, $relationship); |
| 2286 |
$relationship_options[$relationship['id']] = $relationship_handler->label(); |
$relationship_options[$relationship['id']] = $relationship_handler->label(); |
| 2290 |
if (!empty($relationship_options)) { |
if (!empty($relationship_options)) { |
| 2291 |
// Make sure the existing relationship is even valid. If not, force |
// Make sure the existing relationship is even valid. If not, force |
| 2292 |
// it to none. |
// it to none. |
| 2293 |
$base_fields = views_fetch_fields($view->base_table, $form_state['type']); |
$base_fields = views_fetch_fields($view->base_table, $form_state['type'], $view->display_handler->use_group_by()); |
| 2294 |
if (isset($base_fields[$item['table'] . '.' . $item['field']])) { |
if (isset($base_fields[$item['table'] . '.' . $item['field']])) { |
| 2295 |
$relationship_options = array_merge(array('none' => t('Do not use a relationship')), $relationship_options); |
$relationship_options = array_merge(array('none' => t('Do not use a relationship')), $relationship_options); |
| 2296 |
} |
} |
| 2365 |
// Store the item back on the view |
// Store the item back on the view |
| 2366 |
$form_state['view']->set_item($form_state['display_id'], $form_state['type'], $form_state['id'], $item); |
$form_state['view']->set_item($form_state['display_id'], $form_state['type'], $form_state['id'], $item); |
| 2367 |
|
|
| 2368 |
$handler = views_get_handler($item['table'], $item['field'], $form_state['type']); |
if ($form_state['handler'] && $form_state['handler']->needs_style_plugin()) { |
|
$handler->init($form_state['view'], $item); |
|
|
if ($handler && $handler->needs_style_plugin()) { |
|
| 2369 |
views_ui_add_form_to_stack('change-style', $form_state['view'], $form_state['display_id'], array($form_state['type'], $form_state['id']), TRUE); |
views_ui_add_form_to_stack('change-style', $form_state['view'], $form_state['display_id'], array($form_state['type'], $form_state['id']), TRUE); |
| 2370 |
} |
} |
| 2371 |
|
|
| 2374 |
} |
} |
| 2375 |
|
|
| 2376 |
/** |
/** |
| 2377 |
|
* Form to config_item items in the views UI. |
| 2378 |
|
*/ |
| 2379 |
|
function views_ui_config_item_group_form(&$form_state) { |
| 2380 |
|
$view = &$form_state['view']; |
| 2381 |
|
$display_id = $form_state['display_id']; |
| 2382 |
|
$type = $form_state['type']; |
| 2383 |
|
$id = $form_state['id']; |
| 2384 |
|
|
| 2385 |
|
$view->init_query(); |
| 2386 |
|
|
| 2387 |
|
$form = array('options' => array('#tree' => TRUE)); |
| 2388 |
|
if (!$view->set_display($display_id)) { |
| 2389 |
|
views_ajax_render(t('Invalid display id @display', array('@display' => $display_id))); |
| 2390 |
|
} |
| 2391 |
|
|
| 2392 |
|
$item = $view->get_item($display_id, $type, $id); |
| 2393 |
|
|
| 2394 |
|
if ($item) { |
| 2395 |
|
$handler = $view->display_handler->get_handler($type, $id); |
| 2396 |
|
if (empty($handler)) { |
| 2397 |
|
$form['markup'] = array('#value' => t("Error: handler for @table > @field doesn't exist!", array('@table' => $item['table'], '@field' => $item['field']))); |
| 2398 |
|
} |
| 2399 |
|
else { |
| 2400 |
|
$handler->init($view, $item); |
| 2401 |
|
$types = views_object_types(); |
| 2402 |
|
|
| 2403 |
|
$form['#title'] = check_plain($view->display[$display_id]->display_title) . ': '; |
| 2404 |
|
$form['#title'] .= t('Configure group settings for @type %item', array('@type' => $types[$type]['lstitle'], '%item' => $handler->ui_name())); |
| 2405 |
|
|
| 2406 |
|
$form['#section'] = $display_id . '-' . $type . '-' . $id; |
| 2407 |
|
|
| 2408 |
|
$info = $view->query->get_aggregation_info(); |
| 2409 |
|
foreach ($info as $id => $aggregate) { |
| 2410 |
|
$group_types[$id] = $aggregate['title']; |
| 2411 |
|
} |
| 2412 |
|
|
| 2413 |
|
$form['group_type'] = array( |
| 2414 |
|
'#type' => 'select', |
| 2415 |
|
'#title' => t('Group type'), |
| 2416 |
|
'#default_value' => $handler->options['group_type'], |
| 2417 |
|
'#description' => t('Grouping is enabled for this display. You must select what function to use on this field.'), |
| 2418 |
|
'#options' => $group_types, |
| 2419 |
|
); |
| 2420 |
|
$form_state['handler'] = &$handler; |
| 2421 |
|
} |
| 2422 |
|
|
| 2423 |
|
views_ui_standard_form_buttons($form, $form_state, 'views_ui_config_item_group_form'); |
| 2424 |
|
} |
| 2425 |
|
return $form; |
| 2426 |
|
} |
| 2427 |
|
|
| 2428 |
|
/** |
| 2429 |
|
* Submit handler for configing group settings on a view. |
| 2430 |
|
*/ |
| 2431 |
|
function views_ui_config_item_group_form_submit($form, &$form_state) { |
| 2432 |
|
$item = $form_state['handler']->options; |
| 2433 |
|
|
| 2434 |
|
$item['group_type'] = $form_state['values']['group_type']; |
| 2435 |
|
|
| 2436 |
|
// Store the item back on the view |
| 2437 |
|
$form_state['view']->set_item($form_state['display_id'], $form_state['type'], $form_state['id'], $item); |
| 2438 |
|
|
| 2439 |
|
// Write to cache |
| 2440 |
|
views_ui_cache_set($form_state['view']); |
| 2441 |
|
} |
| 2442 |
|
|
| 2443 |
|
/** |
| 2444 |
* Submit handler for removing an item from a view |
* Submit handler for removing an item from a view |
| 2445 |
*/ |
*/ |
| 2446 |
function views_ui_config_item_form_remove($form, &$form_state) { |
function views_ui_config_item_form_remove($form, &$form_state) { |
| 2504 |
|
|
| 2505 |
// Get form from the handler. |
// Get form from the handler. |
| 2506 |
$handler->extra_options_form($form['options'], $form_state); |
$handler->extra_options_form($form['options'], $form_state); |
| 2507 |
$form_state['handler'] = &$handler; |
$form_state['handler'] = &$handler; |
|
|
|
| 2508 |
} |
} |
| 2509 |
|
|
| 2510 |
views_ui_standard_form_buttons($form, $form_state, 'views_ui_config_item_extra_form'); |
views_ui_standard_form_buttons($form, $form_state, 'views_ui_config_item_extra_form'); |
| 2945 |
* @return |
* @return |
| 2946 |
* A keyed array of in the form of 'base_table' => 'Description'. |
* A keyed array of in the form of 'base_table' => 'Description'. |
| 2947 |
*/ |
*/ |
| 2948 |
function views_fetch_fields($base, $type) { |
function views_fetch_fields($base, $type, $grouping = FALSE) { |
| 2949 |
static $fields = array(); |
static $fields = array(); |
| 2950 |
if (empty($fields)) { |
if (empty($fields)) { |
| 2951 |
$data = views_fetch_data(); |
$data = views_fetch_data(); |
| 2977 |
} |
} |
| 2978 |
foreach (array('field', 'sort', 'filter', 'argument', 'relationship') as $key) { |
foreach (array('field', 'sort', 'filter', 'argument', 'relationship') as $key) { |
| 2979 |
if (!empty($info[$key])) { |
if (!empty($info[$key])) { |
| 2980 |
|
if ($grouping && !empty($info[$key]['no group by'])) { |
| 2981 |
|
continue; |
| 2982 |
|
} |
| 2983 |
if (!empty($info[$key]['skip base'])) { |
if (!empty($info[$key]['skip base'])) { |
| 2984 |
foreach ((array) $info[$key]['skip base'] as $base_name) { |
foreach ((array) $info[$key]['skip base'] as $base_name) { |
| 2985 |
$skip_bases[$field][$key][$base_name] = TRUE; |
$skip_bases[$field][$key][$base_name] = TRUE; |