You are here

function webform_protected_downloads_nodeapi in Webform Protected Downloads 6

Implementation of hook_nodeapi().

Parameters

object $node :

string $op :

string $arg3 :

string $arg4 :

Return value

void

File

./webform_protected_downloads.module, line 272
This file contains hook declarations and functions for the Webform Protected Downloads module.

Code

function webform_protected_downloads_nodeapi(&$node, $op, $arg3, $arg4) {
  if (!webform_protected_downloads_node_is_webform($node)) {

    // make sure any non webform is free of protected files governed by this
    // module this is an edge case scenario described in
    // http://drupal.org/node/1558260
    if ($op == 'presave') {
      webform_protected_downloads_remove_deleted_files($node->nid);
    }
    return;
  }
  switch ($op) {
    case 'load':
      if (!isset($node->wpd_valid)) {

        // check if the node has protected files
        if (webform_protected_downloads_node_has_protected_files($node->nid)) {

          // check if the registered component still exists, needed, because we
          // can't prevent webform from deleting a component that we might use
          // as a mail field for the protected downloads
          $result = db_result(db_query("SELECT COUNT(*) FROM {wpd_node_configuration} n LEFT JOIN {webform_component} c ON c.cid = n.mail_field_cid AND c.nid = n.nid WHERE n.nid = %d AND c.cid IS NOT NULL", $node->nid));
          $meta['wpd_valid'] = $result > 0;
        }
        else {
          $meta['wpd_valid'] = TRUE;
        }
        return $meta;
      }
    case 'view':
      if (!$node->wpd_valid && user_access('administer webform protected downloads')) {
        _webform_protected_downloads_set_warning();
      }
      break;
    case 'presave':

      // make sure that protected files stay protected
      if (webform_protected_downloads_node_has_protected_files($node->nid)) {
        foreach ($node->files as $fid => $file) {
          $_file = (object) $file;
          if (webform_protected_downloads_file_is_protected($node->nid, $fid)) {
            $_file->list = FALSE;
            $_file->private = TRUE;
          }
          $node->files[$fid] = is_array($file) ? (array) $_file : $_file;
        }
      }
      break;
    case 'delete':
      db_query("DELETE FROM {wpd_node_configuration} WHERE nid = %d", $node->nid);
      db_query("DELETE FROM {wpd_protected_files} WHERE nid = %d", $node->nid);
      break;
  }
}