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; }