public function getProfiles(array $uids, array $domainKeys, array $propertyNames)
 {
     if (count($uids) != count($domainKeys)) {
         throw new Exception('[UserProfileServiceImpl] each uid must be associated with a domain id.');
     }
     $plist = array();
     for ($k = 0; $k < count($uids); $k++) {
         $uid = $uids[$k];
         $did = $domainKeys[$k];
         $p = Api_Dao_Profile::getProfile($uid, $did, $propertyNames);
         if ($p == NULL) {
             throw new Exception("[UserProfileServiceImpl] could not find profile for uid={$uid}, domainId={$did}.");
         }
         $plist[] = $p;
     }
     return $plist;
 }
 public function testDao()
 {
     $u = new RingsideUser();
     $u->id = -1;
     $u->username = '******';
     $u->password = md5('goats');
     $this->assertTrue($u->trySave());
     $uid = $u->getIncremented();
     include 'LocalSettings.php';
     $domainId = $networkKey;
     $props = $this->getTestUserData();
     $this->assertTrue(Api_Dao_Profile::createProfile($uid, $domainId, $props));
     $nprops = array_keys($props);
     $p = Api_Dao_Profile::getProfile($uid, $domainId, $nprops);
     //print_r($p);
     //check all the values to make sure the input properties
     //are the same as the retrieved output properties
     $this->assertEquals($uid, $p['user_id']);
     foreach ($props as $pname => $pval) {
         if (!is_array($pval)) {
             $this->assertEquals($pval, $p[$pname], "Failed comparing '{$pname}': expected='{$pval}', actual='{$p[$pname]}'");
         } else {
             foreach ($pval as $indx => $obj) {
                 $this->assertTrue(array_key_exists('id', $p[$pname][$indx]));
                 foreach ($obj as $aname => $aval) {
                     if ($aname != 'id' && $aname != 'domain_id') {
                         $this->assertEquals($aval, $p[$pname][$indx][$aname], "Failed comparing '{$pname}.{$aname}': expected='{$aval}', actual='{$p[$pname][$aname]}'");
                     }
                 }
             }
         }
     }
     //update with some new values
     $schoolId = $p['schools'][0]['id'];
     $newProps = array();
     $newProps['activities'] = 'mas cabras, mas rapido.';
     $s1 = array();
     $s1['id'] = $schoolId;
     $s1['grad_year'] = '1966';
     $s1['concentrations'] = 'log tossing';
     $newProps['schools'] = array($s1);
     $this->assertTrue(Api_Dao_Profile::updateProfile($uid, $domainId, $newProps));
     $p = Api_Dao_Profile::getProfile($uid, $domainId, $nprops);
     //print_r($p);
     $this->assertEquals($newProps['activities'], $p['activities']);
     $this->assertEquals($newProps['schools'][0]['id'], $schoolId);
     $this->assertEquals($newProps['schools'][0]['grad_year'], $s1['grad_year']);
     $this->assertEquals($newProps['schools'][0]['concentrations'], $s1['concentrations']);
     //now delete that particular school
     $newProps = array();
     $s1 = array();
     $s1['id'] = $schoolId;
     $s1['delete'] = true;
     $newProps['schools'] = array($s1);
     $this->assertTrue(Api_Dao_Profile::updateProfile($uid, $domainId, $newProps));
     $p = Api_Dao_Profile::getProfile($uid, $domainId, $nprops);
     $this->assertEquals(1, count($newProps['schools'][0]['id']));
     $this->assertTrue(Api_Dao_Profile::deleteProfile($uid, $domainId));
     $this->assertTrue($u->delete());
 }