Horde_Perms_Permission::updatePermissions PHP Method

updatePermissions() public method

Updates the permissions based on data passed in the array.
public updatePermissions ( array $perms )
$perms array An array containing the permissions which are to be updated.
    public function updatePermissions($perms)
    {
        $type = $this->get('type');
        if ($type == 'matrix') {
            /* Array of permission types to iterate through. */
            $perm_types = Horde_Perms::getPermsArray();
        }
        foreach ($perms as $perm_class => $perm_values) {
            switch ($perm_class) {
                case 'default':
                case 'guest':
                case 'creator':
                    if ($type == 'matrix') {
                        foreach ($perm_types as $val => $label) {
                            if (!empty($perm_values[$val])) {
                                $this->setPerm($perm_class, $val, false);
                            } else {
                                $this->unsetPerm($perm_class, $val, false);
                            }
                        }
                    } elseif (!empty($perm_values)) {
                        $this->setPerm($perm_class, $perm_values, false);
                    } else {
                        $this->unsetPerm($perm_class, null, false);
                    }
                    break;
                case 'u':
                case 'g':
                    $permId = array('class' => $perm_class == 'u' ? 'users' : 'groups');
                    /* Figure out what names that are stored in this permission
                     * class have not been submitted for an update, ie. have been
                     * removed entirely. */
                    $current_names = isset($this->data[$permId['class']]) ? array_keys($this->data[$permId['class']]) : array();
                    $updated_names = array_keys($perm_values);
                    $removed_names = array_diff($current_names, $updated_names);
                    /* Remove any names that have been completely unset. */
                    foreach ($removed_names as $name) {
                        unset($this->data[$permId['class']][$name]);
                    }
                    /* If nothing to actually update finish with this case. */
                    if (is_null($perm_values)) {
                        continue;
                    }
                    /* Loop through the names and update permissions for each. */
                    // @todo for Horde 6 - allow integer 0 values?
                    foreach ($perm_values as $name => $name_values) {
                        $permId['name'] = $name;
                        if ($type == 'matrix') {
                            foreach ($perm_types as $val => $label) {
                                if ($name_values[$val] === '0' || !empty($name_values[$val])) {
                                    $this->setPerm($permId, $val, false);
                                } else {
                                    $this->unsetPerm($permId, $val, false);
                                }
                            }
                        } elseif ($name_values === '0' || !empty($name_values)) {
                            $this->setPerm($permId, $name_values, false);
                        } else {
                            $this->unsetPerm($permId, null, false);
                        }
                    }
                    break;
            }
        }
    }