array()); $options['default'] = array('default' => ''); $options['info'] = array('default' => array()); $options['override'] = array('default' => TRUE); $options['sticky'] = array('default' => FALSE); $options['order'] = array('default' => 'asc'); return $options; } /** * Determine if we should provide sorting based upon $_GET inputs. */ function build_sort() { if (!isset($_GET['order']) && ($this->options['default'] == -1 || empty($this->view->field[$this->options['default']]))) { return TRUE; } // If a sort we don't know anything about gets through, exit gracefully. if (isset($_GET['order']) && empty($this->view->field[$_GET['order']])) { return TRUE; } // Let the builder know whether or not we're overriding the default sorts. return empty($this->options['override']); } /** * Add our actual sort criteria */ function build_sort_post() { if (!isset($_GET['order'])) { // check for a 'default' clicksort. If there isn't one, exit gracefully. if (empty($this->options['default'])) { return; } $sort = $this->options['default']; $this->order = !empty($this->options['order']) ? $this->options['order'] : 'asc'; } else { $sort = $_GET['order']; // Store the $order for later use. $this->order = !empty($_GET['sort']) ? strtolower($_GET['sort']) : 'asc'; } // If a sort we don't know anything about gets through, exit gracefully. if (empty($this->view->field[$sort])) { return; } // Ensure $this->order is valid. if ($this->order != 'asc' && $this->order != 'desc') { $this->order = 'asc'; } // Store the $sort for later use. $this->active = $sort; // Tell the field to click sort. $this->view->field[$sort]->click_sort($this->order); } /** * Normalize a list of columns based upon the fields that are * available. This compares the fields stored in the style handler * to the list of fields actually in the view, removing fields that * have been removed and adding new fields in their own column. * * - Each field must be in a column. * - Each column must be based upon a field, and that field * is somewhere in the column. * - Any fields not currently represented must be added. * - Columns must be re-ordered to match the fields. * * @param $columns * An array of all fields; the key is the id of the field and the * value is the id of the column the field should be in. * @param $fields * The fields to use for the columns. If not provided, they will * be requested from the current display. The running render should * send the fields through, as they may be different than what the * display has listed due to access control or other changes. */ function sanitize_columns($columns, $fields = NULL) { $sanitized = array(); if ($fields === NULL) { $fields = $this->display->handler->get_option('fields'); } // Preconfigure the sanitized array so that the order is retained. foreach ($fields as $field => $info) { // Set to itself so that if it isn't touched, it gets column // status automatically. $sanitized[$field] = $field; } foreach ($columns as $field => $column) { // first, make sure the field still exists. if (!isset($sanitized[$field])) { continue; } // If the field is the column, mark it so, or the column // it's set to is a column, that's ok if ($field == $column || $columns[$column] == $column && !empty($sanitized[$column])) { $sanitized[$field] = $column; } // Since we set the field to itself initially, ignoring // the condition is ok; the field will get its column // status back. } return $sanitized; } /** * Render the given style. */ function options_form(&$form, &$form_state) { parent::options_form($form, $form_state); $handlers = $this->display->handler->get_handlers('field'); if (empty($handlers)) { $form['error_markup'] = array( '#value' => t('You need at least one field before you can configure your table settings'), '#prefix' => '