summaryrefslogtreecommitdiff
path: root/general_deletion.inc
blob: dc06a7a40fb8a7a6513a3020750b6d61e085bd32 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
<?php

/******************************************************************************/
/****************************** DELETION FUNCTIONS ****************************/
/******************************************************************************/

function delete_solution($solution_id)
{
  global $user;
  $root_path = lab_migration_path();
  $status = TRUE;

  $solution_q = db_query("SELECT * FROM {lab_migration_solution} WHERE id = %d", $solution_id);
  $solution_data = db_fetch_object($solution_q);
  if (!$solution_data)
  {
    drupal_set_message(t('Invalid solution.'), 'error');
    return FALSE;
  }

  $experiment_q = db_query("SELECT * FROM {lab_migration_experiment} WHERE id = %d", $solution_data->experiment_id);
  $experiment_data = db_fetch_object($experiment_q);
  if (!$experiment_data)
  {
    drupal_set_message(t('Invalid experiment.'), 'error');
    return FALSE;
  }

  /* deleting solution files */
  $solution_files_q = db_query("SELECT * FROM {lab_migration_solution_files} WHERE solution_id = %d", $solution_id);
  while ($solution_files_data = db_fetch_object($solution_files_q))
  {
    if (!file_exists($root_path . $solution_files_data->filepath))
    {
      $status = FALSE;
      drupal_set_message(t('Error deleting !file. File does not exists.', array('!file' => $solution_files_data->filepath)), 'error');
      continue;
    }

    /* removing solution file */
    if (!unlink($root_path . $solution_files_data->filepath))
    {
      $status = FALSE;
      drupal_set_message(t('Error deleting !file', array('!file' => $solution_files_data->filepath)), 'error');

      /* sending email to admins */
      $email_to = variable_get('lab_migration_emails', '');
      $param['standard']['subject'] = "[ERROR] Error deleting example file";
      $param['standard']['body'] = "Error deleting solution files by " . $user->uid . " at " . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] . " :
        solution id : " . $solution_id . "
        file id : " .  $solution_files_data->id . "
        file path : " . $solution_files_data->filepath;
      if (!drupal_mail('lab_migration', 'standard', $email_to, language_default(), $param, variable_get('lab_migration_from_email', NULL), TRUE))
        drupal_set_message('Error sending email message.', 'error');
    } else {
      /* deleting example files database entries */
      db_query("DELETE FROM {lab_migration_solution_files} WHERE id = %d", $solution_files_data->id);
    }
  }

  if (!$status)
    return FALSE;

  /* removing code folder */
  $ex_path = $experiment_data->proposal_id . '/EXP' . $experiment_data->number . '/CODE' . $solution_data->code_number;
  $dir_path = $root_path . $ex_path;
  if (is_dir($dir_path))
  {
    if (!rmdir($dir_path))
    {
      drupal_set_message(t('Error deleting folder !folder', array('!folder' => $dir_path)), 'error');

      /* sending email to admins */
      $email_to = variable_get('lab_migration_emails', '');
      $param['standard']['subject'] = "[ERROR] Error deleting folder";
      $param['standard']['body'] = "Error deleting folder " . $dir_path . " by " . $user->uid . " at " . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
      if (!drupal_mail('lab_migration', 'standard', $email_to, language_default(), $param, variable_get('lab_migration_from_email', NULL), TRUE))
        drupal_set_message('Error sending email message.', 'error');
      return FALSE;
    }
  } else {
    drupal_set_message(t('Cannot delete solution folder. !folder does not exists.', array('!folder' => $dir_path)), 'error');
    return FALSE;
  }

  /* deleting solution dependency and solution database entries */
  db_query("DELETE FROM {lab_migration_solution_dependency} WHERE solution_id = %d", $solution_id);
  db_query("DELETE FROM {lab_migration_solution} WHERE id = %d", $solution_id);

  return $status;
}