Commit a0ff98eb authored by Gordon Heydon's avatar Gordon Heydon
Browse files

Issue #1916316 by Simon Georges, pounard: Performance and hook_node_load().

parent fe18f248
Loading
Loading
Loading
Loading
+31 −15
Changes for simple_access.module: 31 added lines, 15 removed lines.
Original line number Diff line number Diff line
@@ -162,28 +162,44 @@ function simple_access_node_prepare($node) {
 * Implement hook_node_load().
 */
function simple_access_node_load($nodes, $types) {
  foreach ($nodes as $node) {

    if ($row = db_select('simple_access_owner', 'o')->fields('o', array('sa_view', 'sa_update', 'sa_delete'))->condition('nid', $node->nid)->execute()->fetchAssoc()) {
      $node->simple_access_owner = $row;
    }
    else {
      $node->simple_access_owner = array('sa_view' => 0, 'sa_update' => 0, 'sa_delete' => 0);
  $nids = array();
  foreach ($nodes as $nid => $node) {
    $nids[] = $nid;
    $node->simple_access = array();
    $node->simple_access_profiles = array();
  }

    $node->simple_access = db_select('simple_access_node', 'na')
      ->fields('na', array('gid', 'sa_view', 'sa_update', 'sa_delete'))
      ->condition('nid', $node->nid)
  $owners = db_select('simple_access_owner', 'o')
    ->fields('o', array('nid', 'sa_view', 'sa_update', 'sa_delete'))
    ->condition('nid', $nids)
    ->execute()
      ->fetchAllAssoc('gid', PDO::FETCH_ASSOC);
    ->fetchAllAssoc('nid', PDO::FETCH_ASSOC);

    $node->simple_access_profiles = db_select('simple_access_profiles_node', 'pn')
      ->fields('pn', array('pid'))
      ->condition('nid', $node->nid)
  $access = db_select('simple_access_node', 'na')
    ->fields('na', array('nid', 'gid', 'sa_view', 'sa_update', 'sa_delete'))
    ->condition('nid', $nids)
    ->execute()
      ->fetchAllAssoc('pid', PDO::FETCH_ASSOC);
    ->fetchAll(PDO::FETCH_ASSOC);

    $nodes[$node->nid] = $node;
  $profiles = db_select('simple_access_profiles_node', 'pn')
    ->fields('pn', array('nid', 'pid'))
    ->condition('nid', $nids)
    ->execute()
    ->fetchAll(PDO::FETCH_ASSOC);

  foreach ($nodes as $nid => $node) {
    if (isset($owners[$nid])) {
      $node->simple_access_owner = $owners[$nid];
    } else {
      $node->simple_access_owner = array('sa_view' => 0, 'sa_update' => 0, 'sa_delete' => 0);
    }
  }
  foreach ($access as $row) {
    $nodes[$row['nid']]->simple_access[$row['gid']] = $row;
  }
  foreach ($profiles as $row) {
    $nodes[$row['nid']]->simple_access_profiles_node[$row['pid']] = $row;
  }
}