[ Index ]

PHP Cross Reference of Drupal 6 (gatewave)

title

Body

[close]

/sites/all/modules/project/package/ -> project_package.module (source)

   1  <?php
   2  // $Id: project_package.module,v 1.2 2009/12/01 02:39:20 dww Exp $
   3  
   4  /**
   5   * @file project_package.module
   6   * Provides packages made up of releases of other projects.
   7   */
   8  
   9  /**
  10   * Implement hook_views_api().
  11   */
  12  function project_package_views_api() {
  13    return array(
  14      'api' => 2,
  15      'path' => drupal_get_path('module', 'project_package') .'/views',
  16    );
  17  }
  18  
  19  /**
  20   * Implement hook_nodeapi().
  21   */
  22  function project_package_nodeapi(&$node, $op, $arg) {
  23    switch ($node->type) {
  24      case 'project_release':
  25        project_package_release_nodeapi($node, $op, $arg);
  26        break;
  27  
  28    }
  29  }
  30  
  31  /**
  32   * hook_nodeapi implementation specific to "project_release" nodes.
  33   *
  34   * @see project_package_nodeapi().
  35   */
  36  function project_package_release_nodeapi(&$node, $op, $arg) {
  37    switch ($op) {
  38      case 'insert':
  39      case 'update':
  40        // We can't rely on $node->project_package since nodeapi() doesn't have
  41        // a fully loaded $node object. :(
  42        $count = db_result(db_query("SELECT COUNT(*) FROM {project_package_local_release_item} WHERE package_nid = %d", $node->nid));
  43        if (!empty($count)) {
  44          project_package_set_update_status($node->nid);
  45        }
  46        break;
  47  
  48      case 'load':
  49        $count = db_result(db_query("SELECT COUNT(*) FROM {project_package_local_release_item} WHERE package_nid = %d", $node->nid));
  50        if (!empty($count)) {
  51          $node->project_package['count'] = $count;
  52        }
  53        break;
  54        
  55    }
  56  }
  57  
  58  /**
  59   * Set the {prn}.update_status for a package based on security updates.
  60   */
  61  function project_package_set_update_status($package_nid) {
  62    $max = db_result(db_query("SELECT MAX(prn.update_status) FROM {project_release_nodes} prn INNER JOIN {project_package_local_release_item} pp ON prn.nid = pp.item_nid WHERE pp.package_nid = %d", $package_nid));
  63    if ($max == PROJECT_RELEASE_UPDATE_STATUS_NOT_SECURE) {
  64      // Something included in this package is insecure, so we are, too.
  65      db_query("UPDATE {project_release_nodes} SET update_status = %d WHERE nid = %d", PROJECT_RELEASE_UPDATE_STATUS_NOT_SECURE, $package_nid);
  66    }
  67  }
  68  
  69  /**
  70   * Fix the {prn}.update_status column whenever the status changes on items.
  71   */
  72  function project_package_check_update_status($item_nids) {
  73    $affected_packages = array();
  74    $placeholders = db_placeholders($item_nids);
  75    $query = db_query("SELECT * FROM {project_package_local_release_item} WHERE item_nid IN ($placeholders) GROUP BY package_nid", $item_nids);
  76    while ($package = db_fetch_object($query)) {
  77      $affected_packages[] = $package->package_nid;
  78    }
  79    if (!empty($affected_packages)) {
  80      $placeholders = db_placeholders($affected_packages);
  81      db_query("UPDATE {project_release_nodes} SET update_status = %d WHERE nid IN ($placeholders)", array_merge(array(PROJECT_RELEASE_UPDATE_STATUS_NOT_SECURE), $affected_packages));
  82    }
  83  }
  84  


Generated: Thu Mar 24 11:18:33 2011 Cross-referenced by PHPXref 0.7