123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350 |
- <?php
- function tripal_project_admin($form_state = NULL) {
- $form = array();
-
-
-
- $active_jobs = FALSE;
- if (tripal_get_module_active_jobs('tripal_project')) {
- $active_jobs = TRUE;
- }
-
- if (!$active_jobs) {
- get_tripal_project_admin_form_sync_set($form);
- get_tripal_project_admin_form_cleanup_set($form);
- }
- else {
- $form['notice'] = array(
- '#type' => 'fieldset',
- '#title' => t('Project Management Temporarily Unavailable')
- );
- $form['notice']['message'] = array(
- '#value' => t('Currently, project management jobs are waiting or are running. . Managemment features have been hidden until these jobs complete. Please check back later once these jobs have finished. You can view the status of pending jobs in the Tripal jobs page.'),
- );
- }
- return system_settings_form($form);
- }
- function get_tripal_project_admin_form_cleanup_set(&$form) {
- $form['cleanup'] = array(
- '#type' => 'fieldset',
- '#title' => t('Clean Up')
- );
- $form['cleanup']['description'] = array(
- '#type' => 'item',
- '#value' => t("With Drupal and chado residing in different databases ".
- "it is possible that nodes in Drupal and projects in Chado become ".
- "\"orphaned\". This can occur if an project node in Drupal is ".
- "deleted but the corresponding chado project is not and/or vice ".
- "versa. Click the button below to resolve these discrepancies."),
- '#weight' => 1,
- );
- $form['cleanup']['button'] = array(
- '#type' => 'submit',
- '#value' => t('Clean up orphaned projects'),
- '#weight' => 2,
- );
- }
- function get_tripal_project_admin_form_sync_set(&$form) {
-
- $form['sync'] = array(
- '#type' => 'fieldset',
- '#title' => t('Sync Projects')
- );
-
-
-
- $active_jobs = FALSE;
- if (tripal_get_module_active_jobs('tripal_project')) {
- $active_jobs = TRUE;
- }
- if (!$active_jobs) {
-
- $sql = "SELECT * FROM {project} ORDER BY name";
- $org_rset = chado_query($sql);
-
-
-
-
- $proj_boxes = array();
- $added = 0;
- while ($project = $org_rset->fetchObject()) {
-
-
- $sql = "SELECT * FROM {chado_project} WHERE project_id = :project_id";
- if (!db_query($sql, array(':project_id' => $project->project_id))->fetchObject()) {
- $proj_boxes[$project->project_id] = $project->name;
- $added++;
- }
- }
-
-
- if ($added > 0) {
- $proj_boxes['all'] = "All Projects";
- $form['sync']['projects'] = array(
- '#title' => t('Available Projects'),
- '#type' => t('checkboxes'),
- '#description' => t("Check the projects you want to sync. Drupal content will be created for each of the projects listed above. Select 'All Projects' to sync all of them."),
- '#required' => FALSE,
- '#prefix' => '<div id="org_boxes">',
- '#suffix' => '</div>',
- '#options' => $proj_boxes,
- );
- $form['sync']['button'] = array(
- '#type' => 'submit',
- '#value' => t('Submit Sync Job')
- );
- }
-
- else {
- $form['sync']['value'] = array(
- '#value' => t('All projects in Chado are currently synced with Drupal.')
- );
- }
- }
-
- else {
- $form['sync']['value'] = array(
- '#value' => t('Currently, jobs exist related to chado projects. Please check back later for projects that can by synced once these jobs have finished. You can view the status of pending jobs in the Tripal jobs page.')
- );
- }
- }
- function tripal_project_admin_validate($form, &$form_state) {
- global $user;
- $job_args = array();
- if ($form_state['values']['op'] == t('Submit Sync Job')) {
-
-
- $projects = $form_state['values']['projects'];
- $do_all = FALSE;
- $to_sync = array();
- foreach ($projects as $project_id) {
- if (preg_match("/^all$/i" , $project_id)) {
- $do_all = TRUE;
- }
- if ($project_id and preg_match("/^\d+$/i" , $project_id)) {
-
- $sql = "SELECT * FROM {project} WHERE project_id = :project_id";
- $project = chado_query($sql, array(':project_id' => $project_id))->fetchObject();
- $to_sync[$project_id] = "$project->genus $project->species";
- }
- }
-
- if ($do_all) {
- tripal_add_job('Sync all projects' , 'tripal_project',
- 'tripal_project_sync_projects' , $job_args , $user->uid);
- }
- else{
- foreach ($to_sync as $project_id => $name) {
- $job_args[0] = $project_id;
- tripal_add_job("Sync project: $name" , 'tripal_project',
- 'tripal_project_sync_projects' , $job_args , $user->uid);
- }
- }
- }
-
-
- if ($form_state['values']['op'] == t('Reindex Features')) {
- $projects = $form_state['values']['re-projects'];
- foreach ($projects as $project_id) {
- if ($project_id and preg_match("/^\d+$/i" , $project_id)) {
-
- $sql = "SELECT * FROM {project} WHERE project_id = :project_id";
- $project = chado_query($sql , array(':project_id' => $project_id))->fetchObject();
- $job_args[0] = $project_id;
- tripal_add_job("Reindex features for project: $project->genus ".
- "$project->species", 'tripal_project' ,
- 'tripal_project_reindex_features', $job_args, $user->uid);
- }
- }
- }
-
-
- if ($form_state['values']['op'] == t('Set Feature Taxonomy')) {
- $projects = $form_state['values']['tx-projects'];
- foreach ($projects as $project_id) {
- if ($project_id and preg_match("/^\d+$/i", $project_id)) {
-
- $sql = "SELECT * FROM {project} WHERE project_id = :project_id";
- $project = chado_query($sql , array(':project_id' => $project_id))->fetchObject();
- $job_args[0] = $project_id;
- tripal_add_job("Set taxonomy for features in project: ".
- "$project->genus $project->species" , 'tripal_project',
- 'tripal_project_taxonify_features', $job_args, $user->uid);
- }
- }
- }
-
-
- if ($form_state['values']['op'] == t('Clean up orphaned projects')) {
- tripal_add_job('Cleanup orphaned projects', 'tripal_project',
- 'tripal_project_cleanup', $job_args, $user->uid);
- }
- }
- function tripal_project_sync_projects($project_id = NULL, $job_id = NULL) {
- global $user;
- $page_content = '';
- if (!$project_id) {
- $sql = "SELECT * FROM {project} P";
- $results = chado_query($sql);
- }
- else {
- $sql = "SELECT * FROM {project} P WHERE project_id = :project_id";
- $results = chado_query($sql, array(':project_id' => $project_id));
- }
-
-
- $sql = "SELECT * FROM {chado_project} WHERE project_id = :project_id";
- while ($project = $results->fetchObject()) {
-
-
- if (!db_query($sql, array(':project_id' => $project->project_id))->fetchObject()) {
- $new_node = new stdClass();
- $new_node->type = 'chado_project';
- $new_node->uid = $user->uid;
- $new_node->title = "$project->name";
- $new_node->project_id = $project->project_id;
- $new_node->name = $project->name;
- $new_node->description = $project->description;
- node_validate($new_node);
- if (!form_get_errors()) {
- $node = node_submit($new_node);
- node_save($node);
- if ($node->nid) {
- print "Added $project->name\n";
- }
- }
- else {
- print "Failed to insert project $project->name\n";
- }
- }
- else {
- print "Skipped $project->name\n";
- }
- }
- return $page_content;
- }
- function tripal_project_sync_projects_form_submit($form, &$form_state) {
- global $user;
-
- $job_id = tripal_add_job('Sync Projects', 'tripal_project',
- 'tripal_project_sync_all_projects', array(), $user->uid);
- }
- function tripal_project_sync_all_projects() {
-
- $resource = db_query('SELECT project_id FROM {chado_project}');
- $drupal_projects = array();
- while ($r = $resource->fetchObject()) {
- $drupal_projects[$r->project_id] = $r->project_id;
- }
-
- $chado_projects = array();
- $resource = chado_query('SELECT project_id FROM {project}');
- while ($r = $resource->fetchObject()) {
-
- if (!isset($drupal_projects[$r->project_id])) {
- $chado_projects[$r->project_id] = $r->project_id;
- }
- }
- print 'Number of Projects to Sync: ' . sizeof($chado_projects) . "\n";
- foreach ($chado_projects as $project_id) {
- $project = tripal_core_chado_select('project', array('name', 'description'), array('project_id' => $project_id));
-
- $new_node = new stdClass();
- $new_node->type = 'chado_project';
- $new_node->uid = $user->uid;
- $new_node->title = $project[0]->name;
- $new_node->project_id = $project_id;
- $new_node->description = $project[0]->description;
- node_validate($new_node);
- $errors = form_get_errors();
- if (!$errors) {
- $node = node_submit($new_node);
- node_save($node);
- if ($node->nid) {
- print "Added " . $project[0]->name . " (Node ID:" . $node->nid . ")\n";
- }
- }
- else {
- print "Failed to insert project: " . $project[0]->name . "\n";
- print "Errors: " . print_r($errors, TRUE) . "\n";
- }
- }
- }
- function tripal_project_cleanup($dummy = NULL, $job_id = NULL) {
- return tripal_core_clean_orphaned_nodes('project', $job_id);
- }
|