123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- <?php
- /**
- * @file
- * Field API handler plugin.
- */
- $plugin = array(
- 'label' => 'FieldAPI',
- 'handler' => array(
- 'class' => 'draggableviews_handler_fieldapi',
- ),
- );
- class draggableviews_handler_fieldapi extends draggableviews_handler {
- /**
- * Set default value of field option.
- */
- public function option_definition() {
- return array('field' => '');
- }
- /**
- * Add field options for handler.
- */
- function options_form($field) {
- $form = array();
- $options = array('' => t('- Select -'));
- // Check all the sortings added to a view. Hope there is
- // better way to determine them. Need to research.
- foreach ($field->view->display_handler->display->display_options['sorts'] as $sort_option) {
- $field_name = $sort_option['field'];
- // Field should be like "field_name_value".
- if (strpos($field_name, 'field_') === FALSE || strpos($field_name, '_value') === FALSE) {
- continue;
- }
- // Remove "_value" from field name and try to load the field.
- $field_name = drupal_substr($field_name, 0, drupal_strlen($field_name) - 6);
- if ($field_info = field_info_field($field_name)) {
- if ($field_info['type'] == 'number_integer') {
- $views_field_data = field_views_field_default_views_data($field_info);
- $options[$sort_option['table'] . ':' . $sort_option['field']] = filter_xss($views_field_data[$sort_option['table']][$sort_option['field']]['title']);
- }
- }
- }
- // If options are emtpy, show warning message.
- if (count($options) == 1) {
- $form['field_warning'] = array(
- '#markup' => '<div class="messages warning">' . t('Add weight integer field to sorts so it can be selected.') . '</div>',
- );
- }
- $form['field'] = array(
- '#type' => 'select',
- '#title' => t('Field'),
- '#options' => $options,
- '#default_value' => $field->options['draggableviews']['draggableviews_handler_fieldapi']['field'],
- '#description' => t('Please select field that contains weight. It should be integer type and already added to sorts of the view.'),
- );
- return $form;
- }
- function get($field, $index) {
- // Get the name of selected field.
- $field_option = $field->options['draggableviews']['draggableviews_handler_fieldapi']['field'];
- list($field_table, $field_name) = explode(':', $field_option);
- // Current row.
- $row = $field->view->result[$index];
- // Check whether key has table name and field name in it.
- foreach ($row as $key => $value) {
- if (strpos($key, $field_table) !== FALSE && strpos($key, $field_name) !== FALSE) {
- return $value;
- }
- }
- }
- function set($form_state) {
- $fv = $form_state['values'];
- $view = $form_state['build_info']['args'][0];
- $view_name = $view->name;
- $view_display = $view->current_display;
- // View arguments.
- $arguments = $view->args;
- if (isset($view->exposed_raw_input)) {
- $arguments += $view->exposed_raw_input;
- ksort($arguments);
- // Redirect view to the same page with exposed filters set.
- $form_state['redirect'] = array(current_path(), array('query' => $view->exposed_raw_input));
- }
- $base_table = $view->base_table;
- $entity_info_all = entity_get_info();
- $entity_type = '';
- foreach ($entity_info_all as $entity_name_key => $entity_info) {
- if ($entity_info['base table'] == $view->base_table) {
- $entity_type = $entity_name_key;
- break;
- }
- }
- $options_field = $view->field['draggableviews']->options['draggableviews']['draggableviews_handler_fieldapi']['field'];
- list($field_tabe, $field_column) = explode(':', $options_field);
- // Remove '_value' from column name to get field name.
- $field_name = drupal_substr($field_column, 0, drupal_strlen($field_column) - 6);
- // Save the values of the field.
- foreach ($fv['draggableviews'] as $item) {
- $entity_wrapper = entity_metadata_wrapper($entity_type, $item['id']);
- $entity_wrapper->{$field_name}->set($item['weight']);
- $entity_wrapper->save();
- }
- }
- }
|