CRM_Utils_GlobalStack - Allow top-level vars
authorTim Otten <totten@civicrm.org>
Tue, 30 Jul 2013 04:15:28 +0000 (21:15 -0700)
committerTim Otten <totten@civicrm.org>
Tue, 30 Jul 2013 04:15:28 +0000 (21:15 -0700)
CRM/Utils/GlobalStack.php
tests/phpunit/CRM/Utils/GlobalStackTest.php

index 6dedf152a0a3904ba40e16fd4d4d4f7f78957882..09dcccc7d9c580e27e90bae37cf13d356ac7bec8 100644 (file)
@@ -80,8 +80,12 @@ class CRM_Utils_GlobalStack {
   public function createBackup($new) {
     $frame = array();
     foreach ($new as $globalKey => $values) {
-      foreach ($values as $key => $value) {
-        $frame[$globalKey][$key] = CRM_Utils_Array::value($key, $GLOBALS[$globalKey]);
+      if (is_array($values)) {
+        foreach ($values as $key => $value) {
+          $frame[$globalKey][$key] = CRM_Utils_Array::value($key, $GLOBALS[$globalKey]);
+        }
+      } else {
+        $frame[$globalKey] = CRM_Utils_Array::value($globalKey, $GLOBALS);
       }
     }
     return $frame;
@@ -89,8 +93,12 @@ class CRM_Utils_GlobalStack {
 
   public function applyFrame($newFrame) {
     foreach ($newFrame as $globalKey => $values) {
-      foreach ($values as $key => $value) {
-        $GLOBALS[$globalKey][$key] = $value;
+      if (is_array($values)) {
+        foreach ($values as $key => $value) {
+          $GLOBALS[$globalKey][$key] = $value;
+        }
+      } else {
+        $GLOBALS[$globalKey] = $values;
       }
     }
   }
index 21008307c6af66d98ce8b8290d76f6f036325099..685cfce14b2cabb3b0391b2466372caaaefb2bfd 100644 (file)
@@ -5,30 +5,35 @@ require_once 'CiviTest/CiviUnitTestCase.php';
 class CRM_Utils_GlobalStackTest extends CiviUnitTestCase {
 
   public function testPushPop() {
-    global $FOO;
+    global $FOO, $EXTRA;
 
     $FOO['bar'] = 1;
     $FOO['whiz'] = 1;
+    $EXTRA = 1;
 
     $this->assertEquals(1, $FOO['bar']);
     $this->assertEquals(1, $FOO['whiz']);
     $this->assertFalse(isset($FOO['bang']));
+    $this->assertEquals(1, $EXTRA);
 
     CRM_Utils_GlobalStack::singleton()->push(array(
       'FOO' => array(
         'bar' => 2,
         'bang' => 2,
       ),
+      'EXTRA' => 2,
     ));
 
     $this->assertEquals(2, $FOO['bar']);
     $this->assertEquals(1, $FOO['whiz']);
     $this->assertEquals(2, $FOO['bang']);
+    $this->assertEquals(2, $EXTRA);
 
     CRM_Utils_GlobalStack::singleton()->pop();
 
     $this->assertEquals(1, $FOO['bar']);
     $this->assertEquals(1, $FOO['whiz']);
     $this->assertEquals(NULL, $FOO['bang']);
+    $this->assertEquals(1, $EXTRA);
   }
 }