|
@@ -48,8 +48,12 @@ class views_content_plugin_display_panel_pane extends views_plugin_display {
|
|
|
return isset($this->has_pane_conf);
|
|
|
}
|
|
|
|
|
|
- function set_pane_conf($conf = array()) {
|
|
|
+ function set_pane_conf($conf = array(), $set_cache = TRUE) {
|
|
|
$this->set_option('pane_conf', $conf);
|
|
|
+ $this->view->dom_id = !empty($this->view->dom_id) ? $this->view->dom_id : md5($this->view->name . REQUEST_TIME . rand());
|
|
|
+ if ($set_cache) {
|
|
|
+ cache_set('view_panel_pane_' . $this->view->dom_id, $conf);
|
|
|
+ }
|
|
|
$this->has_pane_conf = TRUE;
|
|
|
}
|
|
|
|
|
@@ -412,5 +416,153 @@ class views_content_plugin_display_panel_pane extends views_plugin_display {
|
|
|
return empty($conf['exposed_form']);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * Set the pane configuration options
|
|
|
+ * Done here in handler for reuse between views_content_views_panes_content_type_render
|
|
|
+ * and views_content_views_pre_view
|
|
|
+ */
|
|
|
+ function pane_process_conf() {
|
|
|
+ ctools_include('context');
|
|
|
+ $conf = $this->get_option('pane_conf');
|
|
|
+ if (!$conf) {
|
|
|
+ // See if dom id has been cached and get conf from there.
|
|
|
+ if (!empty($this->view->dom_id) && ($cache = cache_get('view_panel_pane_' . $this->view->dom_id))) {
|
|
|
+ $conf = $cache->data;
|
|
|
+ }
|
|
|
+ if (!$conf) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ $this->set_pane_conf($conf);
|
|
|
+ }
|
|
|
+ $contexts = $conf['pane_contexts'];
|
|
|
+ $panel_args = $conf['panel_args'];
|
|
|
+ $args = array();
|
|
|
+ $arguments = $this->get_option('arguments');
|
|
|
+
|
|
|
+ $context_keys = isset($conf['context']) ? $conf['context'] : array();
|
|
|
+ foreach ($this->get_argument_input() as $id => $argument) {
|
|
|
+ switch ($argument['type']) {
|
|
|
+ case 'context':
|
|
|
+ $key = array_shift($context_keys);
|
|
|
+ if (isset($contexts[$key])) {
|
|
|
+ if (strpos($argument['context'], '.')) {
|
|
|
+ list($context, $converter) = explode('.', $argument['context'], 2);
|
|
|
+ $args[] = ctools_context_convert_context($contexts[$key], $converter, array('sanitize' => FALSE));
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ $args[] = $contexts[$key]->argument;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ $args[] = isset($arguments[$id]['exception']['value']) ? $arguments[$id]['exception']['value'] : 'all';
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ case 'fixed':
|
|
|
+ $args[] = $argument['fixed'];
|
|
|
+ break;
|
|
|
+
|
|
|
+ case 'panel':
|
|
|
+ $args[] = isset($panel_args[$argument['panel']]) ? $panel_args[$argument['panel']] : NULL;
|
|
|
+ break;
|
|
|
+
|
|
|
+ case 'user':
|
|
|
+ $args[] = (isset($conf['arguments'][$id]) && $conf['arguments'][$id] !== '') ? ctools_context_keyword_substitute($conf['arguments'][$id], array(), $contexts) : NULL;
|
|
|
+ break;
|
|
|
+
|
|
|
+ case 'wildcard':
|
|
|
+ // Put in the wildcard.
|
|
|
+ $args[] = isset($arguments[$id]['wildcard']) ? $arguments[$id]['wildcard'] : '*';
|
|
|
+ break;
|
|
|
+
|
|
|
+ case 'none':
|
|
|
+ default:
|
|
|
+ // Put in NULL.
|
|
|
+ // views.module knows what to do with NULL (or missing) arguments
|
|
|
+ $args[] = NULL;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // remove any trailing NULL arguments as these are non-args:
|
|
|
+ while (count($args) && end($args) === NULL) {
|
|
|
+ array_pop($args);
|
|
|
+ }
|
|
|
+
|
|
|
+ $this->view->set_arguments($args);
|
|
|
+ $allow = $this->get_option('allow');
|
|
|
+
|
|
|
+ if (!empty($conf['path'])) {
|
|
|
+ $conf['path'] = ctools_context_keyword_substitute($conf['path'], array(), $contexts);
|
|
|
+ }
|
|
|
+ if ($allow['path_override'] && !empty($conf['path'])) {
|
|
|
+ $this->view->override_path = $conf['path'];
|
|
|
+ }
|
|
|
+ else if ($path = $this->get_option('inherit_panels_path')) {
|
|
|
+ $this->view->override_path = $_GET['q'];
|
|
|
+ }
|
|
|
+
|
|
|
+ // more link
|
|
|
+ if ($allow['more_link']) {
|
|
|
+ if (empty($conf['more_link'])) {
|
|
|
+ $this->set_option('use_more', FALSE);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ $this->set_option('use_more', TRUE);
|
|
|
+ // make sure the view runs the count query so we know whether or not the
|
|
|
+ // more link applies.
|
|
|
+ $this->view->get_total_rows = TRUE;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($allow['items_per_page'] && isset($conf['items_per_page'])) {
|
|
|
+ $this->view->set_items_per_page($conf['items_per_page']);
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($allow['offset']) {
|
|
|
+ $this->view->set_offset($conf['offset']);
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($allow['use_pager']) {
|
|
|
+ // Only set use_pager if they differ, this way we can avoid overwriting the
|
|
|
+ // pager type that Views uses.
|
|
|
+ $pager = $this->get_option('pager');
|
|
|
+ if ($conf['use_pager'] && ($pager['type'] == 'none' || $pager['type'] == 'some')) {
|
|
|
+ $pager['type'] = 'full';
|
|
|
+ }
|
|
|
+ elseif (!$conf['use_pager'] && $pager['type'] != 'none' && $pager['type'] != 'some') {
|
|
|
+ $pager['type'] = $this->view->get_items_per_page() || !empty($pager['options']['items_per_page']) ? 'some' : 'none';
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($conf['use_pager']) {
|
|
|
+ if (!isset($pager['options']['id']) || (isset($conf['pager_id']) && $pager['options']['id'] != $conf['pager_id'])) {
|
|
|
+ $pager['options']['id'] = (int) $conf['pager_id'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $this->set_option('pager', $pager);
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($allow['fields_override']) {
|
|
|
+ if ($conf['fields_override']) {
|
|
|
+ $fields = $this->view->get_items('field');
|
|
|
+ foreach ($fields as $field => $field_display) {
|
|
|
+ $fields[$field]['exclude'] = empty($conf['fields_override'][$field]);
|
|
|
+ }
|
|
|
+ $this->set_option('fields', $fields);
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($allow['exposed_form'] && !empty($conf['exposed'])) {
|
|
|
+ foreach ($conf['exposed'] as $filter_name => $filter_value) {
|
|
|
+ if (!is_array($filter_value)) {
|
|
|
+ $conf['exposed'][$filter_name] = ctools_context_keyword_substitute($filter_value, array(), $contexts);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $this->view->set_exposed_input($conf['exposed']);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|