Index: code/sites/all/modules/contrib/features_extra/fe_block.module
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- code/sites/all/modules/contrib/features_extra/fe_block.module	(revision 416ec1331099af98fca3773f67e1f781120fe242)
+++ code/sites/all/modules/contrib/features_extra/fe_block.module	(revision )
@@ -90,6 +90,20 @@
   $theme_default = variable_get('theme_default', 'garland');
   $themes = list_themes();
 
+  // Per-role visibility.
+  $role_options_res = db_query("SELECT * FROM {block_role}");
+  $role_options = array();
+  while($row = $role_options_res->fetchAssoc()){
+    $role = user_role_load($row['rid']);
+    $role_options[$row['module'] . '-' . $row['delta']][] = $role->name;
+  }
+  // Per-content type visibility.
+  $type_options_res = db_query("SELECT * FROM {block_node_type}");
+  $type_options = array();
+  while($row = $type_options_res->fetchAssoc()){
+    $type_options[$row['module'] . '-' . $row['delta']][] = $row['type'];
+  }
+
   $code = array();
   $code[] = '  $export = array();';
   $code[] = '';
@@ -111,6 +125,14 @@
           continue;
         }
         if (in_array($block_id, $data)) {
+          // Per-role visibility settings.
+          if(isset($role_options[$block['module'] . '-' . $block['delta']])){
+            $block['roles'] = $role_options[$block['module'] . '-' . $block['delta']];
+          }
+          // Per-type visibility settings.
+          if(isset($type_options[$block['module'] . '-' . $block['delta']])){
+            $block['types'] = $type_options[$block['module'] . '-' . $block['delta']];
+          }
           // Use machine name with boxes.
           if ($block['module'] == 'block') {
             $block['machine_name'] = _fe_block_get_machine_name($block['delta']);
@@ -167,6 +189,38 @@
       }
 
       drupal_write_record('block', $block, array('module', 'delta', 'theme'));
+      if(!empty($block['roles'])){
+        db_delete('block_role')
+          ->condition('module', $block['module'])
+          ->condition('delta', $block['delta'])
+          ->execute();
+        $query = db_insert('block_role')->fields(array('rid', 'module', 'delta'));
+        foreach ($block['roles'] as $role_name) {
+          $role = user_role_load_by_name($role_name);
+          $query->values(array(
+            'rid' => $role->rid,
+            'module' => $block['module'],
+            'delta' => $block['delta'],
+          ));
+        }
+        $query->execute();
+      }
+
+      if(!empty($block['types'])){
+        db_delete('block_node_type')
+          ->condition('module', $block['module'])
+          ->condition('delta', $block['delta'])
+          ->execute();
+        $query = db_insert('block_node_type')->fields(array('type', 'module', 'delta'));
+        foreach ($block['types'] as $type) {
+          $query->values(array(
+            'type' => $type,
+            'module' => $block['module'],
+            'delta' => $block['delta'],
+          ));
+        }
+        $query->execute();
+      }
     }
   }
 
