Ver Fonte

Forgot to add new views integration files in the core module

spficklin há 13 anos atrás
pai
commit
ccf56f0789

+ 375 - 0
base/tripal_core/tripal_views_integration.inc

@@ -0,0 +1,375 @@
+<?php
+/**
+ * Purpose: Provide Guidance to new Tripal Admin
+ *
+ * @return
+ *   HTML Formatted text
+ *
+ * @ingroup tripal_views_integration
+ */
+function tripal_core_views_description_page() {
+
+  $text .= '<h3>Tripal Views Quick Links:</h3>';
+  $text .= "<ul>
+             <li><a href=\"".url("admin/tripal/views/mviews") . "\">List of Materialized Views (MViews)</a></li>
+             <li><a href=\"".url("admin/tripal/views/mviews/new") . "\">Create a new MViews</a></li>
+             <li><a href=\"".url("admin/tripal/views/integration/mviews") . "\">List of integrated MViews</a></li>
+             <li><a href=\"".url("admin/tripal/views/integration/mviews/new"). "\">Integrate a MView</a></li>
+             <li><a href=\"".url("admin/tripal/views/integration/chado"). "\">List of integrated Chado tables</a></li>
+             <li><a href=\"".url("admin/tripal/views/integration/chado/new"). "\">Integrate a Chado tables</a></li>
+           </ul>";
+
+  $text .= '<h3>Views Integartion Description:</h3>';
+  $text .= '<p>Tripal Views provides an interface for integrating <a href="http://drupal.org/project/views">Drupal Views</a>
+            with Tripal materialized views.  This will allow site administrators to create custom queries for the materialized views
+            and in turn provide custom content pages, custom blocks and custom search forms. The forms allow a site administrator
+            to select a materialized view and associate other Chado tables on which the view can join.  Usage of this module requires
+            a good understanding of foreign-key relationships in Chado.
+            </p>';
+
+  $text .= '<h3>Setup Instructions:</h3>';
+  $text .= '<p>After installation of the Tripal core module.  The following tasks should be performed
+            <ol>
+              <li><b>Set Permissions</b>: To allow access to site administrators for this module, simply
+               <a href="'.url('admin/user/permissions').'">assign permissions</a> to the appropriate user roles for the
+               permission type "manage tripal_views_integration". </li>
+            </ol>
+            </p>';
+  $text .= '<h3>Usage Instructions:</h3>';
+  $text .= "<p>To use Tripal Views integration follow these steps:
+            <ol>
+               <li><b>Identify or create a materialized view:</b> Using the <a href=\"".url("admin/tripal/views/mviews") . "\">
+                 Tripal materialized View</a> interface, identify the view you would like to integrate or create a new one.</li>
+               <li><b>Setup the Views Integration</b>: Navigate to the <a href=\"".url("admin/tripal/views/integration/mviews/new") . "\">
+                 Tripal views integration setup page</a> to integrate the selected materialized view.  Provide a  user friendly name
+                 and description to help you remember the purpose for integrating the view.  Next, select the view you want to integrate
+                 from the provided select box.  If your materialized view has fields that can join with other Chado tables, you may
+                 provide those relationships in the provided form.  Finally, if your fields require a special handler for display, you
+                 may select it from the drop down provided</li>
+               <li><b>Create custom pages/block/search form</b>:  After saving setup information from step 2 above, you will be redirected to the
+                 Drupal Views interface</a> where you can create a custom page, block or search form.</li>
+               <li><b>Review your integrated views</b>:  A page providing a
+                 <a href=\"".url("admin/tripal/views/integration/mviews/list") . "\">list of all integrated views</a> is provided. You may
+                 view this page to see all integrated views, but also to remove any unwanted integrations.</li>
+            </ol>
+         
+            </p>";
+  return $text;
+}
+/**
+ *
+ * @ingroup tripal_views_integration
+ */
+function tripal_core_views_integration_admin_form(){
+
+  $form = array();
+
+  $form['#theme'] = 'tripal';
+
+  $query_results = db_query('SELECT * FROM public.tripal_views_integration;');
+
+  $header = array('Setup ID', 'Name', 'Materialized View ID', 'Base Table Name', 'Description');
+  $rows = array();
+
+  $results = array();
+  while($result = db_fetch_object($query_results)){
+    $rows[] = array($result->setup_id, $result->name, $result->mview_id, $result->base_table_name, $result->description,);
+    $results[] = $result;
+  }
+
+  $options = array();
+  foreach ($results as $key => $value) {
+    if(!empty($value))
+    $options[] = $value->setup_id;// . ' | ' . $value->name . ' | ' . $value->mview_id . ' | ' . $value->base_table_name;
+  }
+
+  $form['existing_rows'] = array(
+    '#type' => 'select',
+    '#options' => $options,
+    '#description' => '<strong>Select a View Setup to delete from the database.</strong>',
+    '#prefix' => theme('table', $header, $rows),
+  );
+
+  $form['submit'] = array(
+    '#type' => 'submit',
+    '#value' => t('Remove'),
+  );
+
+  $form['new'] = array(
+    '#type' => 'markup',
+    '#value' => l(t(' Add a New MView'), 'admin/tripal/views/integration/mviews/new'),
+  );
+
+  return $form;
+}
+
+/**
+ *
+ * @ingroup tripal_views_integration
+ */
+function tripal_core_views_integration_admin_form_submit($form, &$form_state){
+  $value = $form['existing_rows']['#options'][$form_state['values']['existing_rows']];
+  db_query("DELETE FROM public.tripal_views_integration WHERE setup_id = $value;");
+  db_query("DELETE FROM public.tripal_views_handlers WHERE setup_id = $value;");
+  db_query("DELETE FROM public.tripal_mviews_join WHERE setup_id = $value;");
+}
+/**
+ *
+ * @ingroup tripal_views_integration
+ */
+
+function tripal_core_views_integration_new_setup_form(&$form_state){
+
+  $form = array();
+
+  $data = array();
+
+  $form['#cache'] = TRUE;
+
+  //ahah_helper requires this to register the form with it's module
+  ahah_helper_register($form, $form_state);
+
+  // field for the name of the
+  $form['row_name'] = array(
+    '#title' => t('Name'),
+    '#type' => 'textfield',
+    '#size' => 60,
+    '#maxlength' => 128,
+    '#description' => 'Name of the Views Setup',
+    '#required' => TRUE,
+  );
+
+  $form['row_description'] = array(
+    '#title' => t('Description'),
+    '#type' => 'textfield',
+    '#size' => 60,
+    '#maxlength' => 255,
+    '#description' => 'Briefly describe in which view this will be used',
+    '#required' => TRUE,
+  );
+
+  $mview_query = db_query("SELECT mview_id,name FROM {tripal_mviews} ORDER BY name;");
+  $mview_options = array();
+  $mview_options['0'] = 'Select';
+  while ($mview_option = db_fetch_array($mview_query)){
+    $mview_options[$mview_option['mview_id']] = $mview_option['name'];
+  }
+
+  $form['mview_id'] = array(
+    '#title' => t('Materialized View'),
+    '#type' => 'select',
+    '#options' => $mview_options,
+    '#description' => 'Which materialized view to use.',
+    '#required' => TRUE,
+    '#default_value' => $mview_default_value,
+    '#ahah' => array(
+       'path' => ahah_helper_path(array('view_setup_table')),
+       'wrapper' => 'table-rows-div',
+       'effect' => 'fade',
+       'event' => 'change',
+       'method' => 'replace',
+  ),
+  );
+
+  // ignore this for now... we'll come back to it later -- spf
+  //   $form['row_base_table_name'] = array(
+  //      '#title' => t('Base Table Name'),
+  //      '#type' => 'select',
+  //      // '#options' => array('stub'),
+  //      '#options' => tripal_core_get_chado_tables(),
+  //      '#description' => 'Select which chado table to use for this view.',
+  //      '#required' => TRUE,
+  //   );
+
+  $form['view_setup_table'] = array(
+     '#type' => 'item',
+       '#prefix' => '<div id="table-rows-div">',
+       '#suffix' => '</div>',
+  );
+
+
+  if ($form_state['storage']['mview_id']){
+
+    $mview_id = $form_state['storage']['mview_id'];
+
+    $form['view_setup_table'] = array(
+     '#type' => 'fieldset',
+     '#title' => 'Join Selection',
+     '#prefix' => '<div id="fieldset-table-rows-wrapper">',
+     '#suffix' => '</div>',
+    );
+
+    // get the columns in this materialized view.  They are separated by commas
+    // where the first word is the column name and the rest is the type
+    $sql = "SELECT mv_specs FROM {tripal_mviews} WHERE mview_id = $mview_id";
+    $mview = db_fetch_object(db_query($sql));
+    $columns = explode(",",$mview->mv_specs);
+
+    $i=1;
+    $chado_tables = tripal_core_get_chado_tables();
+    $chado_tables = array_merge(array('',), $chado_tables);
+
+    $handlers_filters = array('<default>');
+    $handlers_fields = array('<default>');
+    $form['view_setup_table']["instructions"] = array(
+         '#type' => 'markup',
+         '#value' => "Select an optional table to which the fields of the materialized view can join.  If a field does not need to join you may leave the selection blank.",
+    );
+    $form['view_setup_table']["fields_headers"] = array(
+         '#type' => 'markup',
+         '#value' => "<div class=\"field-headers\">".
+              "<div class=\"column-id\">Field Name and Type</div>".
+              "<div class=\"fields-column-join\">Join Table</div>".
+              "<div class=\"fields-column-join-column\">Join Column</div>".
+              "<div class=\"fields-filter-handler\">Filter Handler</div>".
+              "<div class=\"fields-field-handler\">Field Handler</div></div>",
+    );
+
+    $data['field_types'] = array();
+
+    foreach ($columns as $column){
+      $column = trim($column);  // trim trailing and leading spaces
+      preg_match("/^(.*?)\ (.*?)$/",$column,$matches);
+      $column_name = $matches[1];
+      $column_type = $matches[2];
+
+      $form['view_setup_table']["fields_start_$mview_id-$i"] = array(
+           '#type' => 'markup',
+           '#value' => "<div class=\"fields-new-row\">",
+      );
+
+      $form['view_setup_table']["fields_name_$mview_id-$i"] = array(
+        '#type' => 'markup',
+        '#attributes' => array('class' => 'fields-column-name'),
+        '#value' => "<div class=\"column-id\"><span class=\"column-name\">$column_name</span>".
+                   "<br><span class=\"column-type\">$column_type</span></div>",
+      );
+
+      $data['field_types'][$column_name] = $column_type;
+
+      $table = $form_state['storage']["fields_join_$mview_id-$i"];
+      $form['view_setup_table']["fields_join_$mview_id-$i"] = array(
+        '#type' => 'select',
+        '#prefix' => "<div class=\"fields-column-join\">",
+        '#suffix' => "</div>",
+        '#options' => $chado_tables,
+        '#required' => FALSE,
+        '#default_value' => $table,
+        '#ahah' => array(
+           'path' => ahah_helper_path(array("view_setup_table","fields_join_column_$mview_id-$i")),
+           'wrapper' => "fields-column-join-column-$mview_id-$i",
+           'effect' => 'fade',
+           'event' => 'change',
+           'method' => 'replace',
+      ),
+      );
+      if($table){
+        $table_desc = module_invoke_all('chado_'.$table.'_schema');
+        $columns = array_keys($table_desc['fields']);
+      } else {
+        $columns = array();
+      }
+      $form['view_setup_table']["fields_join_column_$mview_id-$i"] = array(
+        '#type' => 'select',
+        '#prefix' => "<div id=\"fields-column-join-column-$mview_id-$i\" class=\"fields-column-join-column\">",
+        '#suffix' => "</div>",
+        '#options' => $columns,
+        '#required' => FALSE,
+      );
+      
+      $form['view_setup_table']["fields_filter_handler_$mview_id-$i"] = array(
+        '#type' => 'select',
+        '#prefix' => "<div class=\"fields-filter-handler\">",
+        '#suffix' => "</div>",
+        '#options' => $handlers_filters,
+        '#required' => FALSE,
+      );
+      
+      $form['view_setup_table']["fields_field_handler_$mview_id-$i"] = array(
+         '#type' => 'select',
+         '#prefix' => "<div class=\"fields-field-handler\">",
+         '#suffix' => "</div>",
+         '#options' => $handlers_fields,
+         '#required' => FALSE,
+      );
+      
+      $form['view_setup_table']["fields_end_$i"] = array(
+        '#type' => 'markup',
+        '#value' => "</div>",
+      );
+      $i++;
+   }
+   $form['view_setup_table']['save'] = array(
+      '#type'  => 'submit',
+      '#value' => t('Save'),
+   );
+
+    $data['row_count'] = $i - 1;
+  }
+
+  //use this to put values into $form_state['values']
+  $form['data'] = array();
+
+  //need to find out if storing $form['data'][$key]['#value'] = $value <- is an issue
+  //since it will give me errors if i try to stare an array instead of $value
+  //and yet $value can be an array ie "field_types"
+  foreach ($data as $key => $value) {
+    $form['data'][$key] = array(
+    	'#type' => 'hidden',
+    	'#value' => $value,
+    );
+  }
+
+  return $form;
+}
+
+
+/**
+ *
+ * @ingroup tripal_views_integration
+ */
+function tripal_core_views_integration_new_setup_form_validate($form, &$form_state){
+  $name_array = explode(" ", $form_state['values']['row_name']);
+  if(count($name_array) > 1){
+    form_set_error($form_state['values']['row_name'], 'Name must be ONE word only.');
+  }
+  //TODO: write validation function for this new form
+}
+/**
+ *
+ * @ingroup tripal_views_integration
+ */
+function tripal_core_views_integration_new_setup_form_submit($form, &$form_state){
+  $name = $form_state['values']['row_name'];
+  $mview_id = $form_state['values']['mview_id'];
+  $tripal_views_integration_record = array(
+    'mview_id' => $mview_id,
+    'name' => $name,
+  	 'description' => $form_state['values']['row_description'],
+  );
+
+  drupal_write_record('tripal_views_integration', $tripal_views_integration_record);
+
+  $i = 1;
+  foreach ($form_state['values']['field_types'] as $key => $value){
+    $mview_join_record = array(
+        'setup_id' => $tripal_views_integration_record['setup_id'],
+        'view_table' => $form['mview_id']['#options'][$form_state['values']['mview_id']],
+        'view_column' => $key,
+        'chado_table_join' => $form_state['values']["fields_join_$mview_id-$i"],
+        'chado_column' => $form['view_setup_table']["fields_join_column_$mview_id-$i"]['#options'][$form_state['values']["fields_join_column_$mview_id-$i"]],
+    );
+    drupal_write_record('tripal_mviews_join', $mview_join_record);
+    
+    $handlers_record = array(
+      'setup_id' => $tripal_views_integration_record['setup_id'],
+      'column_name' => $key,//TODO: should we change this to an mview_join_id from tripal_view_join?
+      'handler_filter' => $form['view_setup_table']["fields_filter_handler_$mview_id-$i"]['#options'][$form_state['values']["fields_filter_handler_$mview_id-$i"]],
+    	'handler_field' => $form['view_setup_table']["fields_field_handler_$mview_id-$i"]['#options'][$form_state['values']["fields_field_handler_$mview_id-$i"]],
+    );
+    drupal_write_record('tripal_views_handlers', $handlers_record);
+    $i++;
+  }
+
+}
+

+ 50 - 0
base/tripal_core/tripal_views_integration_fields_form.tpl.php

@@ -0,0 +1,50 @@
+<style type="text/css">
+
+#tripal-core-views-integration-new-setup-form  .fields-new-row, .field-headers {
+   dislay: block;
+   margin: 0px;
+   border-bottom-style: solid;
+   border-bottom-width: 1px;
+}
+#tripal-core-views-integration-new-setup-form .form-item {
+   margin: 0px 0px 5px 0px;
+}
+#tripal-core-views-integration-new-setup-form .column-id, .fields-column-join,.fields-column-join-column, .fields-filter-handler, .fields-field-handler {
+   display: inline-block;
+   margin: 0px;
+   vertical-align: top;
+}
+#tripal-core-views-integration-new-setup-form  .field-headers {
+   font-weight: bold;
+}
+#tripal-core-views-integration-new-setup-form  .field-headers div {
+   display: inline-block;
+   margin: 0px;
+   vertical-align: top;
+}
+#tripal-core-views-integration-new-setup-form .column-name {
+
+}
+#tripal-core-views-integration-new-setup-form .column-type {
+   font-style: italic;
+}
+#tripal-core-views-integration-new-setup-form .column-id {
+   width: 15%;
+}
+#tripal-core-views-integration-new-setup-form .fields-column-join {
+   width: 30%;
+}
+#tripal-core-views-integration-new-setup-form .fields-column-join-column {
+   width: 30%;
+}
+#tripal-core-views-integration-new-setup-form .fields-filter-handler {
+   width: 10%;
+}
+#tripal-core-views-integration-new-setup-form .fields-field-handler {
+   width: 10%;
+}
+
+</style>
+
+<?php print drupal_render($form); ?>
+