|
@@ -11,24 +11,39 @@ class tripal_views_handler_area_collections extends views_handler_area_result {
|
|
|
*/
|
|
|
function render($empty = FALSE) {
|
|
|
|
|
|
- // If collections are dispabled then don't show anything.
|
|
|
+ // If collections are disbabled then don't show anything.
|
|
|
$collections_enabled = variable_get('tripal_data_collections_enabled', 1);
|
|
|
if (!$collections_enabled) {
|
|
|
return '';
|
|
|
}
|
|
|
|
|
|
- // This will only work with Tripal content types and the tripal_views_query
|
|
|
- // plugin. So don't show anything for others.
|
|
|
- if ($this->query->plugin_name != 'tripal_views_query') {
|
|
|
- return '';
|
|
|
+ // We need a specific form to work with Tripal content types and the tripal_views_query plugin.
|
|
|
+ if ($this->query->plugin_name == 'tripal_views_query') {
|
|
|
+ $form = drupal_get_form('tripal_views_handler_area_collections_form', $this->view, $this->query);
|
|
|
+ return drupal_render($form);
|
|
|
+ }
|
|
|
+ // We also want to support views created via the Drupal Search API.
|
|
|
+ elseif ($this->query->plugin_name == 'search_api_views_query') {
|
|
|
+ $form = drupal_get_form('tripal_views_handler_area_collections_search_api_form', $this->view, $this->query);
|
|
|
+ return drupal_render($form);
|
|
|
+ }
|
|
|
+ // If we don't support this type of view, then we should tell the admin
|
|
|
+ // so they're not left scratching their head like I was ;-).
|
|
|
+ else {
|
|
|
+ tripal_set_message('Unfortunatly Tripal Collections are not supported for your current view type.');
|
|
|
}
|
|
|
- $form = drupal_get_form('tripal_views_handler_area_collections_form', $this->view, $this->query);
|
|
|
- return drupal_render($form);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * Views Area Handler Form: Tripal Collections on Tripal Entity-based Views
|
|
|
*
|
|
|
+ * @param $form
|
|
|
+ * @param $form_state
|
|
|
+ * @param $view
|
|
|
+ * The views object that this form will be rendered on.
|
|
|
+ * @param $query
|
|
|
+ * The views query object generating the views results.
|
|
|
*/
|
|
|
function tripal_views_handler_area_collections_form($form, $form_state, $view, $query) {
|
|
|
|
|
@@ -186,6 +201,7 @@ function tripal_views_handler_area_collections_form($form, $form_state, $view, $
|
|
|
$form['#suffix'] = '</div>';
|
|
|
return $form;
|
|
|
}
|
|
|
+
|
|
|
/**
|
|
|
* Theme the fields section of the tripal_views_handler_area_collections form.
|
|
|
*
|
|
@@ -230,13 +246,14 @@ function theme_tripal_views_handler_area_collections_fields_fset($variables) {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- *
|
|
|
+ * AJAX: Tripal Collections on Tripal Entity-based Views
|
|
|
*/
|
|
|
function tripal_views_handler_area_collections_form_ajax($form, $form_state) {
|
|
|
return $form;
|
|
|
}
|
|
|
+
|
|
|
/**
|
|
|
- *
|
|
|
+ * Views Area Handler Form SUBMIT: Tripal Collections on Tripal Entity-based Views
|
|
|
*/
|
|
|
function tripal_views_handler_area_collections_form_submit($form, $form_state) {
|
|
|
global $user;
|
|
@@ -277,3 +294,138 @@ function tripal_views_handler_area_collections_form_submit($form, $form_state) {
|
|
|
'fields' => $selected_fids,
|
|
|
));
|
|
|
}
|
|
|
+
|
|
|
+/**
|
|
|
+ * Views Area Handler Form: Tripal Collections on Drupal Search API-based
|
|
|
+ *
|
|
|
+ * @param $form
|
|
|
+ * @param $form_state
|
|
|
+ * @param $view
|
|
|
+ * The views object that this form will be rendered on.
|
|
|
+ * @param $query
|
|
|
+ * The views query object generating the views results.
|
|
|
+ */
|
|
|
+function tripal_views_handler_area_collections_search_api_form($form, $form_state, $view, $query) {
|
|
|
+
|
|
|
+ // Set form defaults.
|
|
|
+ $collection_name = '';
|
|
|
+ $collection_desc = '';
|
|
|
+
|
|
|
+ $form['save_collection'] = array(
|
|
|
+ '#type' => 'fieldset',
|
|
|
+ '#title' => t('Save Results'),
|
|
|
+ '#collapsible' => TRUE,
|
|
|
+ '#collapsed' => TRUE,
|
|
|
+ '#description' => t('A data collection is a virtual container into which you can
|
|
|
+ save data. You can place your search results into a data collection for
|
|
|
+ download or use with other tools on this site that support data collections.'),
|
|
|
+ );
|
|
|
+
|
|
|
+ $form['save_collection']['summary'] = array(
|
|
|
+ '#type' => 'item',
|
|
|
+ '#title' => 'Results Summary',
|
|
|
+ '#markup' => t('There are @total_rows record(s) that can be added to a data collection.', array('@total_rows' => $view->total_rows)),
|
|
|
+ );
|
|
|
+
|
|
|
+ $form['save_collection']['collection_name'] = array(
|
|
|
+ '#type' => 'textfield',
|
|
|
+ '#title' => t('Collection Name'),
|
|
|
+ '#description' => t('Please name this collection for future reference.'),
|
|
|
+ '#default_value' => $collection_name,
|
|
|
+ '#required' => TRUE,
|
|
|
+ );
|
|
|
+
|
|
|
+ $form['save_collection']['description_fset'] = array(
|
|
|
+ '#type' => 'fieldset',
|
|
|
+ '#title' => t('Add a Description'),
|
|
|
+ '#collapsible' => TRUE,
|
|
|
+ '#collapsed' => TRUE,
|
|
|
+ );
|
|
|
+
|
|
|
+ $form['save_collection']['description_fset']['collection_desc'] = array(
|
|
|
+ '#type' => 'textarea',
|
|
|
+ '#title' => t('Description'),
|
|
|
+ '#description' => t('Please provide a description about this data collection. This is meant to help you remember what is in the collection.'),
|
|
|
+ '#default_value' => $collection_name,
|
|
|
+ );
|
|
|
+
|
|
|
+ // @todo add ability to choose fields for the collection.
|
|
|
+
|
|
|
+ $form['save_collection']['button'] = array(
|
|
|
+ '#type' => 'submit',
|
|
|
+ '#value' => 'Save Data Collection',
|
|
|
+ '#name' => 'save_collection',
|
|
|
+ '#ajax' => array(
|
|
|
+ 'callback' => "tripal_views_handler_area_collections_form_ajax",
|
|
|
+ 'wrapper' => 'tripal-views-handler-area-collections',
|
|
|
+ 'effect' => 'fade',
|
|
|
+ 'method' => 'replace',
|
|
|
+ 'prevent' => 'click'
|
|
|
+ ),
|
|
|
+ );
|
|
|
+
|
|
|
+ $form['#prefix'] = '<div id="tripal-views-handler-area-collections">';
|
|
|
+ $form['#suffix'] = '</div>';
|
|
|
+
|
|
|
+ return $form;
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * Views Area Handler Form SUBMIT: Tripal Collections on Drupal Search API-based Views
|
|
|
+ */
|
|
|
+function tripal_views_handler_area_collections_search_api_form_submit($form, $form_state) {
|
|
|
+ global $user;
|
|
|
+
|
|
|
+ $view = $form_state['values']['view'];
|
|
|
+ $query = $form_state['values']['query'];
|
|
|
+ $collection_name = trim($form_state['values']['collection_name']);
|
|
|
+ $description = $form_state['values']['collection_desc'];
|
|
|
+ $uid = $user->uid;
|
|
|
+
|
|
|
+ // @todo implment creating the collection
|
|
|
+ // This can't be done via tripal_create_collection() since we support more
|
|
|
+ // then a single bundle. Instead we are going to use the controller class directly.
|
|
|
+ /* @code
|
|
|
+ $collection = new TripalEntityCollection();
|
|
|
+ $collection->create($details);
|
|
|
+ $collection_id = $collection->getCollectionID();
|
|
|
+ $collection->addBundle($details);
|
|
|
+
|
|
|
+ drupal_set_message(t("Collection '%name' created with %num_recs record(s). Check the !view to generate file links.",
|
|
|
+ array(
|
|
|
+ '%name' => $details['collection_name'],
|
|
|
+ '%num_recs' => count($details['ids']),
|
|
|
+ '!view' => l('data collections page', 'user/' . $user->uid . '/data-collections'),
|
|
|
+ ))
|
|
|
+ );
|
|
|
+ */
|
|
|
+
|
|
|
+ /* How it was implemented for tripal entities.
|
|
|
+ // Get the fields that have been selected
|
|
|
+ $selected_fids = array();
|
|
|
+ foreach ($form_state['values'] as $key => $value) {
|
|
|
+ $matches = array();
|
|
|
+ if (preg_match('/select-(\d+)/', $key, $matches)) {
|
|
|
+ if ($value == 1) {
|
|
|
+ $selected_fids[] = $matches[1];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // Get the entity Ids that match results
|
|
|
+ $query->range['length'] = $view->total_rows;
|
|
|
+ $results = $query->execute();
|
|
|
+ $entities = array();
|
|
|
+ foreach ($results['TripalEntity'] as $entity) {
|
|
|
+ $entities[] = $entity->id;
|
|
|
+ }
|
|
|
+ $collection = tripal_create_collection(array(
|
|
|
+ 'uid' => $uid,
|
|
|
+ 'collection_name' => $collection_name,
|
|
|
+ 'description' => $description,
|
|
|
+ 'bundle_name' => $bundle_name,
|
|
|
+ 'ids' => $entities,
|
|
|
+ 'fields' => $selected_fids,
|
|
|
+ ));
|
|
|
+ */
|
|
|
+}
|