danielebarchiesi@0: t("View"), danielebarchiesi@0: 'description' => t('Loads a view result into a context that can then be displayed across a panel or turned into other contexts.'), danielebarchiesi@0: 'context' => 'views_content_context_view_create', danielebarchiesi@0: danielebarchiesi@0: 'edit form' => 'views_content_context_view_settings_form', danielebarchiesi@0: 'edit form validate' => 'views_content_context_view_settings_form_validate', danielebarchiesi@0: 'edit form submit' => 'views_content_context_view_settings_form_submit', danielebarchiesi@0: danielebarchiesi@0: 'defaults' => array('view' => ''), danielebarchiesi@0: danielebarchiesi@0: 'keyword' => 'view', danielebarchiesi@0: 'context name' => 'view', danielebarchiesi@0: danielebarchiesi@0: 'get child' => 'views_content_context_view_get_child', danielebarchiesi@0: 'get children' => 'views_content_context_view_get_children', danielebarchiesi@0: ); danielebarchiesi@0: danielebarchiesi@0: function views_content_context_view_get_child($plugin, $parent, $child) { danielebarchiesi@0: list($name, $id) = explode('-', $child, 2); danielebarchiesi@0: $view = views_get_view($name); danielebarchiesi@0: if (!$view) { danielebarchiesi@0: return; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: $view->set_display($id); danielebarchiesi@0: if ($view->current_display != $id) { danielebarchiesi@0: return; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: $info = _views_content_get_context_from_display($view, $id, $parent, FALSE); danielebarchiesi@0: if ($info) { danielebarchiesi@0: return $info; danielebarchiesi@0: } danielebarchiesi@0: return; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: function views_content_context_view_get_children($plugin, $parent) { danielebarchiesi@0: $types = array( danielebarchiesi@0: 'view' => $plugin, danielebarchiesi@0: ); danielebarchiesi@0: danielebarchiesi@0: // We're keeping the 'view' context around for legacy reasons but danielebarchiesi@0: // we want to disable the UI so you can't add it that way anymore. danielebarchiesi@0: $types['view']['no ui'] = TRUE; danielebarchiesi@0: danielebarchiesi@0: $views = views_get_applicable_views('returns context'); danielebarchiesi@0: foreach ($views as $data) { danielebarchiesi@0: list($view, $id) = $data; danielebarchiesi@0: $info = _views_content_get_context_from_display($view, $id, $parent, FALSE); danielebarchiesi@0: if ($info) { danielebarchiesi@0: $info['no required context ui'] = TRUE; danielebarchiesi@0: $types[$info['name']] = $info; danielebarchiesi@0: } danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: return $types; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: function views_content_context_view_create($empty, $data = NULL, $conf = FALSE, $plugin = array()) { danielebarchiesi@0: $context = new ctools_context('view'); danielebarchiesi@0: $context->plugin = 'view'; danielebarchiesi@0: danielebarchiesi@0: if ($empty) { danielebarchiesi@0: return $context; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: if ($conf) { danielebarchiesi@0: if (is_array($data) && !empty($data['view'])) { danielebarchiesi@0: // This code is left in for backward compatibility. Will not be used danielebarchiesi@0: // with child plugins. danielebarchiesi@0: list($name, $display_id) = explode(':', $data['view'], 2); danielebarchiesi@0: $data = views_get_view($name); danielebarchiesi@0: if ($data) { danielebarchiesi@0: $data->set_display($display_id); danielebarchiesi@0: } danielebarchiesi@0: } danielebarchiesi@0: else if (!empty($plugin['view name'])) { danielebarchiesi@0: $data = views_get_view($plugin['view name']); danielebarchiesi@0: $data->set_display($plugin['view display id']); danielebarchiesi@0: } danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: if (is_object($data) && $data->current_display != 'default') { danielebarchiesi@0: // We don't store the loaded view as we don't want the view object danielebarchiesi@0: // cached. However, in order to extract it you can use: danielebarchiesi@0: // @code danielebarchiesi@0: // $output = views_content_context_get_output($context); danielebarchiesi@0: // $view = $output['view']; danielebarchiesi@0: // @endcode danielebarchiesi@0: $context->data = array( danielebarchiesi@0: 'name' => $data->name, danielebarchiesi@0: 'display' => $data->current_display, danielebarchiesi@0: 'args' => $data->args, danielebarchiesi@0: ); danielebarchiesi@0: danielebarchiesi@0: // At runtime, this can get populated. Once it is populated this danielebarchiesi@0: // object should not be cached. danielebarchiesi@0: $context->view = NULL; danielebarchiesi@0: $context->title = $data->get_title(); danielebarchiesi@0: $context->argument = $data->name . ':' . $data->current_display; danielebarchiesi@0: danielebarchiesi@0: $context->restrictions['base'] = array($data->base_table); danielebarchiesi@0: danielebarchiesi@0: return $context; danielebarchiesi@0: } danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: function views_content_context_view_settings_form($form, &$form_state) { danielebarchiesi@0: $conf = $form_state['conf']; danielebarchiesi@0: $views = views_get_applicable_views('returns context'); danielebarchiesi@0: foreach ($views as $data) { danielebarchiesi@0: list($view, $id) = $data; danielebarchiesi@0: $title = views_content_get_display_title($view, $id, 'admin_title'); danielebarchiesi@0: $options[$view->name . ':' . $id] = $title; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: if (!empty($options)) { danielebarchiesi@0: natcasesort($options); danielebarchiesi@0: $form['view'] = array( danielebarchiesi@0: '#type' => 'select', danielebarchiesi@0: '#options' => $options, danielebarchiesi@0: '#title' => t('View'), danielebarchiesi@0: ); danielebarchiesi@0: } danielebarchiesi@0: else { danielebarchiesi@0: $form['view'] = array( danielebarchiesi@0: '#value' => '

' . t('There are currently no views with Context displays enabled. You should go to the view administration and add a Context display to use a view as a context.') . '

', danielebarchiesi@0: ); danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: return $form; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Validate a node. danielebarchiesi@0: */ danielebarchiesi@0: function views_content_context_view_settings_form_validate($form, &$form_state) { danielebarchiesi@0: if (empty($form_state['values']['view'])) { danielebarchiesi@0: form_error($form['view'], t('You must select a view.')); danielebarchiesi@0: } danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Provide a list of ways that this context can be converted to a string. danielebarchiesi@0: */ danielebarchiesi@0: function views_content_context_view_convert_list() { danielebarchiesi@0: $list = array( danielebarchiesi@0: ); danielebarchiesi@0: danielebarchiesi@0: return $list; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Convert a context into a string. danielebarchiesi@0: */ danielebarchiesi@0: function views_content_context_view_convert($context, $type) { danielebarchiesi@0: switch ($type) { danielebarchiesi@0: } danielebarchiesi@0: } danielebarchiesi@0: