public function processGroups()
 {
     // Create root group
     $t_user_group = $this->opb_updating ? ca_user_groups::find(array('code' => 'Root', 'parent_id' => null), array('returnAs' => 'firstModelInstance')) : false;
     $t_user_group = $t_user_group ? $t_user_group : new ca_user_groups();
     $t_user_group->setMode(ACCESS_WRITE);
     $t_user_group->set('name', 'Root');
     if ($t_user_group->getPrimaryKey()) {
         $t_user_group->update();
     } else {
         $t_user_group->set('code', 'Root');
         $t_user_group->set('parent_id', null);
         $t_user_group->insert();
     }
     if ($t_user_group->numErrors()) {
         $this->addError("Errors creating root user group 'Root': " . join("; ", $t_user_group->getErrors()));
         return false;
     }
     if ($this->ops_base_name) {
         // "merge" profile and its base
         $va_groups = array();
         if ($this->opo_base->groups) {
             foreach ($this->opo_base->groups->children() as $vo_group) {
                 $va_groups[self::getAttribute($vo_group, "code")] = $vo_group;
             }
         }
         if ($this->opo_profile->groups) {
             foreach ($this->opo_profile->groups->children() as $vo_group) {
                 $va_groups[self::getAttribute($vo_group, "code")] = $vo_group;
             }
         }
     } else {
         if ($this->opo_profile->groups) {
             foreach ($this->opo_profile->groups->children() as $vo_group) {
                 $va_groups[self::getAttribute($vo_group, "code")] = $vo_group;
             }
         }
     }
     if (is_array($va_groups)) {
         foreach ($va_groups as $vs_group_code => $vo_group) {
             $t_group = $this->opb_updating ? ca_user_groups::find(array('code' => $vs_group_code, 'parent_id' => null), array('returnAs' => 'firstModelInstance')) : false;
             $t_group = $t_group ? $t_group : new ca_user_groups();
             $t_group->setMode(ACCESS_WRITE);
             $t_group->set('name', trim((string) $vo_group->name));
             $t_group->set('description', trim((string) $vo_group->description));
             if ($t_group->getPrimaryKey()) {
                 $t_group->update();
             } else {
                 $t_group->set('code', $vs_group_code);
                 $t_group->set('parent_id', null);
                 $t_group->insert();
             }
             $va_roles = array();
             if ($vo_group->roles) {
                 foreach ($vo_group->roles->children() as $vo_role) {
                     $va_roles[] = trim((string) $vo_role);
                 }
             }
             $t_group->addRoles($va_roles);
             if ($t_group->numErrors()) {
                 $this->addError("Errors inserting user group {$vs_group_code}: " . join("; ", $t_group->getErrors()));
                 return false;
             }
         }
     }
     return true;
 }