class calendar_plugin_display_ical in Calendar 6.2
Same name and namespace in other branches
- 7 calendar_ical/calendar_plugin_display_ical.inc \calendar_plugin_display_ical
- 7.2 calendar_ical/calendar_plugin_display_ical.inc \calendar_plugin_display_ical
The plugin that handles a feed, such as RSS or atom.
For the most part, feeds are page displays but with some subtle differences.
Hierarchy
- class \calendar_plugin_display_ical extends \views_plugin_display_page
Expanded class hierarchy of calendar_plugin_display_ical
1 string reference to 'calendar_plugin_display_ical'
- calendar_ical_views_plugins in calendar_ical/
calendar_ical.views.inc - Implementation of hook_views_plugins
File
- calendar_ical/
calendar_plugin_display_ical.inc, line 7
View source
class calendar_plugin_display_ical extends views_plugin_display_page {
function get_style_type() {
return 'ical';
}
function uses_breadcrumb() {
return FALSE;
}
/**
* Feeds do not go through the normal page theming mechanism. Instead, they
* go through their own little theme function and then return NULL so that
* Drupal believes that the page has already rendered itself...which it has.
*/
function execute() {
$output = $this->view
->render();
if (empty($output)) {
return drupal_not_found();
}
print $output;
}
function preview() {
return '<pre>' . check_plain($this->view
->render()) . '</pre>';
}
/**
* Instead of going through the standard views_view.tpl.php, delegate this
* to the style handler.
*/
function render() {
return $this->view->style_plugin
->render($this->view->result);
}
function defaultable_sections($section = NULL) {
if (in_array($section, array(
'style_options',
'style_plugin',
'row_options',
'row_plugin',
))) {
return FALSE;
}
$sections = parent::defaultable_sections($section);
// Tell views our sitename_title option belongs in the title section.
if ($section == 'title') {
$sections[] = 'sitename_title';
}
elseif (!$section) {
$sections['title'][] = 'sitename_title';
}
return $sections;
}
function option_definition() {
$options = parent::option_definition();
$options['displays'] = array(
'default' => array(),
);
// Overrides for standard stuff:
$options['style_plugin']['default'] = 'rss';
$options['style_options']['default'] = array(
'mission_description' => FALSE,
'description' => '',
);
$options['sitename_title']['default'] = FALSE;
$options['row_plugin']['default'] = '';
$options['defaults']['default']['style_plugin'] = FALSE;
$options['defaults']['default']['style_options'] = FALSE;
$options['defaults']['default']['row_plugin'] = FALSE;
$options['defaults']['default']['row_options'] = FALSE;
return $options;
}
function options_summary(&$categories, &$options) {
// It is very important to call the parent function here:
parent::options_summary($categories, $options);
// Since we're childing off the 'page' type, we'll still *call* our
// category 'page' but let's override it so it says feed settings.
$categories['page'] = array(
'title' => t('iCal settings'),
);
if ($this
->get_option('sitename_title')) {
$options['title']['value'] = t('Using the site name');
}
// I don't think we want to give feeds menus directly.
unset($options['menu']);
$displays = array_filter($this
->get_option('displays'));
if (count($displays) > 1) {
$attach_to = t('Multiple displays');
}
else {
if (count($displays) == 1) {
$display = array_shift($displays);
if (!empty($this->view->display[$display])) {
$attach_to = $this->view->display[$display]->display_title;
}
}
}
if (!isset($attach_to)) {
$attach_to = t('None');
}
$options['displays'] = array(
'category' => 'page',
'title' => t('Attach to'),
'value' => $attach_to,
);
}
/**
* Provide the default form for setting options.
*/
function options_form(&$form, &$form_state) {
// It is very important to call the parent function here.
parent::options_form($form, $form_state);
switch ($form_state['section']) {
case 'title':
$title = $form['title'];
// A little juggling to move the 'title' field beyond our checkbox.
unset($form['title']);
$form['sitename_title'] = array(
'#type' => 'checkbox',
'#title' => t('Use the site name for the title'),
'#default_value' => $this
->get_option('sitename_title'),
);
$form['title'] = $title;
$form['title']['#process'] = array(
'views_process_dependency',
);
$form['title']['#dependency'] = array(
'edit-sitename-title' => array(
FALSE,
),
);
break;
case 'displays':
$form['#title'] .= t('Attach to');
$displays = array();
foreach ($this->view->display as $display_id => $display) {
if (!empty($display->handler) && $display->handler
->accept_attachments()) {
$displays[$display_id] = $display->display_title;
}
}
$form['displays'] = array(
'#type' => 'checkboxes',
'#description' => t('The ical icon will be shown only on the selected displays.'),
'#options' => $displays,
'#default_value' => $this
->get_option('displays'),
);
break;
case 'path':
$form['path']['#description'] = t('This view will be displayed by visiting this path on your site. It is recommended that the path be something like "path/%/%/ical", putting one % in the path for each argument you have defined in the view.');
break;
}
}
/**
* Perform any necessary changes to the form values prior to storage.
* There is no need for this function to actually store the data.
*/
function options_submit($form, &$form_state) {
// It is very important to call the parent function here:
parent::options_submit($form, $form_state);
switch ($form_state['section']) {
case 'title':
$this
->set_option('sitename_title', $form_state['values']['sitename_title']);
break;
case 'displays':
$this
->set_option($form_state['section'], $form_state['values'][$form_state['section']]);
break;
}
}
/**
* Attach to another view.
*/
function attach_to($display_id) {
$displays = $this
->get_option('displays');
if (empty($displays[$display_id])) {
return;
}
// Defer to the feed style; it may put in meta information, and/or
// attach a feed icon.
$plugin = $this
->get_plugin();
if ($plugin) {
$clone = $this->view
->clone_view();
$clone
->set_display($this->display->id);
$clone
->build_title();
$plugin
->attach_to($display_id, $this
->get_path(), $clone
->get_title());
}
}
/**
* Display validation.
*/
function validate() {
$errors = parent::validate();
$arguments = $this->display->handler
->get_option('arguments');
$filters = $this->display->handler
->get_option('filters');
if (!array_key_exists('date_argument', $arguments) && !array_key_exists('date_filter', $filters)) {
if (empty($this->view->date_info->arg_missing)) {
$errors[] = t("A Calendar period display will not work without a Date argument or a Date filter.");
}
$this->view->date_info->arg_missing = TRUE;
}
if (array_key_exists('date_argument', $arguments) && ($arguments['date_argument']['default_action'] != 'default' || $arguments['date_argument']['default_argument_type'] != 'date')) {
if (empty($this->view->date_info->arg_missing_default)) {
$errors[] = calendar_errors('missing_argument_default');
}
$this->view->date_info->arg_missing_default = TRUE;
}
return $errors;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
calendar_plugin_display_ical:: |
function | Attach to another view. | ||
calendar_plugin_display_ical:: |
function | |||
calendar_plugin_display_ical:: |
function | Feeds do not go through the normal page theming mechanism. Instead, they go through their own little theme function and then return NULL so that Drupal believes that the page has already rendered itself...which it has. | ||
calendar_plugin_display_ical:: |
function | |||
calendar_plugin_display_ical:: |
function | Provide the default form for setting options. | ||
calendar_plugin_display_ical:: |
function | Perform any necessary changes to the form values prior to storage. There is no need for this function to actually store the data. | ||
calendar_plugin_display_ical:: |
function | |||
calendar_plugin_display_ical:: |
function | |||
calendar_plugin_display_ical:: |
function | |||
calendar_plugin_display_ical:: |
function | Instead of going through the standard views_view.tpl.php, delegate this to the style handler. | ||
calendar_plugin_display_ical:: |
function | |||
calendar_plugin_display_ical:: |
function | Display validation. |