public function load()
    {
        global $DB;
        global $user;
        $profile = new profile();
        $profile->load($user->profile);
        $profile_menus = implode(",", $profile->menus);
        if ($DB->query('SELECT * 
						 FROM nv_menus
						WHERE id IN (' . $profile_menus . ')
						  AND enabled = 1')) {
            $data = $DB->result();
            $menu_pos = $DB->result('id');
            for ($pm = 0; $pm < count($profile->menus); $pm++) {
                $p = array_search($profile->menus[$pm], $menu_pos);
                if ($p === false) {
                    continue;
                }
                $this->menus[] = $data[$p];
                $this->menus[count($this->menus) - 1]->items = $this->load_items($data[$p]->id, json_decode($data[$p]->functions));
            }
        }
    }
예제 #2
0
function run()
{
    global $user;
    global $layout;
    global $DB;
    $out = '';
    $item = new profile();
    switch ($_REQUEST['act']) {
        case 'json':
        case 1:
            // json data retrieval & operations
            switch ($_REQUEST['oper']) {
                case 'del':
                    // remove rows
                    $ids = $_REQUEST['ids'];
                    foreach ($ids as $id) {
                        $item->load($id);
                        $item->delete();
                    }
                    echo json_encode(true);
                    break;
                default:
                    // list or search
                    $page = intval($_REQUEST['page']);
                    $max = intval($_REQUEST['rows']);
                    $offset = ($page - 1) * $max;
                    $orderby = $_REQUEST['sidx'] . ' ' . $_REQUEST['sord'];
                    $where = " 1=1 ";
                    if ($_REQUEST['_search'] == 'true' || isset($_REQUEST['quicksearch'])) {
                        if (isset($_REQUEST['quicksearch'])) {
                            $where .= $item->quicksearch($_REQUEST['quicksearch']);
                        } else {
                            if (isset($_REQUEST['filters'])) {
                                $where .= navitable::jqgridsearch($_REQUEST['filters']);
                            } else {
                                // single search
                                $where .= ' AND ' . navitable::jqgridcompare($_REQUEST['searchField'], $_REQUEST['searchOper'], $_REQUEST['searchString']);
                            }
                        }
                    }
                    $DB->queryLimit('id,name', 'nv_profiles', $where, $orderby, $offset, $max);
                    $dataset = $DB->result();
                    $total = $DB->foundRows();
                    //echo $DB->get_last_error();
                    $out = array();
                    for ($i = 0; $i < count($dataset); $i++) {
                        $out[$i] = array(0 => $dataset[$i]['id'], 1 => $dataset[$i]['name']);
                    }
                    navitable::jqgridJson($out, $page, $offset, $max, $total);
                    break;
            }
            session_write_close();
            exit;
            break;
        case 'edit':
        case 2:
            // edit/new form
            if (!empty($_REQUEST['id'])) {
                $item->load(intval($_REQUEST['id']));
            }
            if (isset($_REQUEST['form-sent'])) {
                $item->load_from_post();
                try {
                    $item->save();
                    permission::update_permissions(json_decode($_REQUEST['navigate_permissions_changes'], true), $item->id, 0);
                    $layout->navigate_notification(t(53, "Data saved successfully."), false, false, 'fa fa-check');
                } catch (Exception $e) {
                    $layout->navigate_notification($e->getMessage(), true, true);
                }
            }
            $out = profiles_form($item);
            break;
        case 'delete':
        case 4:
            // remove
            if (!empty($_REQUEST['id'])) {
                $item->load(intval($_REQUEST['id']));
                if ($item->delete() > 0) {
                    $layout->navigate_notification(t(55, 'Item removed successfully.'), false);
                    $out = profiles_list();
                } else {
                    $layout->navigate_notification(t(56, 'Unexpected error.'), false);
                    $out = profiles_form($item);
                }
            }
            break;
        case 'list':
        case 0:
            // list / search result
        // list / search result
        default:
            $out = profiles_list();
            break;
    }
    return $out;
}
function nvweb_permissions_rows($website_id, $object_type, $object_id)
{
    global $DB;
    $naviforms = new naviforms();
    $object = new stdClass();
    if ($object_type == 'user') {
        $object = new user();
        $object->load($object_id);
    } else {
        if ($object_type == 'profile') {
            $object = new profile();
            $object->load($object_id);
        }
    }
    $permissions_definitions = permission::get_definitions();
    $permissions_values = permission::get_values($object_type, $object, $permissions_definitions, $website_id);
    $permissions_definitions = array_merge($permissions_definitions['system'], $permissions_definitions['functions'], $permissions_definitions['settings'], $permissions_definitions['extensions']);
    $out = array();
    $iRow = 0;
    for ($i = 0; $i < count($permissions_definitions); $i++) {
        $control = '';
        $type = '';
        $scope = t(470, 'System');
        $field_name = "wid" . $website_id . "." . $permissions_definitions[$i]['name'];
        if ($permissions_definitions[$i]['scope'] == 'functions') {
            $scope = t(240, 'Functions');
        } else {
            if ($permissions_definitions[$i]['scope'] == 'settings') {
                $scope = t(459, 'Settings');
            } else {
                if ($permissions_definitions[$i]['scope'] == 'extensions') {
                    $scope = t(327, 'Extensions');
                }
            }
        }
        switch ($permissions_definitions[$i]['type']) {
            case 'boolean':
                $type = t(206, 'Boolean');
                $control = $naviforms->buttonset($field_name, array('true' => '<span class="ui-icon ui-icon-circle-check"></span>', 'false' => '<span class="ui-icon ui-icon-circle-close"></span>'), $permissions_values[$permissions_definitions[$i]['name']], "navigate_permission_change_boolean(this);");
                break;
            case 'integer':
                $type = t(468, 'Integer');
                $control = $naviforms->textfield($field_name, $permissions_values[$permissions_definitions[$i]['name']], '99%', 'navigate_permission_change_text(this);');
                break;
            case 'option':
            case 'moption':
                $options = $permissions_definitions[$i]['options'];
                switch ($options) {
                    case "websites":
                        $options = array();
                        $DB->query("SELECT id, name FROM nv_websites");
                        $websites = $DB->result();
                        foreach ($websites as $ws) {
                            $options[$ws->id] = $ws->name;
                        }
                        break;
                    case "extensions":
                        $options = array();
                        $extensions = extension::list_installed(null, true);
                        foreach ($extensions as $ext) {
                            $options[$ext['code']] = $ext['title'];
                        }
                        break;
                    case "structure":
                        $options = array();
                        $categories = $permissions_values[$permissions_definitions[$i]['name']];
                        if (!is_array($categories)) {
                            $categories = array();
                        }
                        $categories = array_filter($categories);
                        $control = '<button data-permission-name="' . $permissions_definitions[$i]['name'] . '" 
                                                    data-action="structure" data-value="' . json_encode($categories) . '" 
                                                    title="' . count($categories) . '"><i class="fa fa-sitemap fa-fw"></i> ' . t(611, "Choose") . '</button>';
                        break;
                    default:
                }
                $type = t(200, 'Options');
                if (empty($control)) {
                    $control = $naviforms->selectfield($field_name, array_keys($options), array_values($options), $permissions_values[$permissions_definitions[$i]['name']], 'navigate_permission_change_option(this);', $permissions_definitions[$i]['type'] == 'moption');
                }
                break;
            case 'color':
                $type = t(441, 'Color');
                $control = $naviforms->colorfield($field_name, $permissions_values[$permissions_definitions[$i]['name']], array(), 'navigate_permission_change_text');
                break;
            case 'string':
            default:
                $type = t(469, 'String');
                $control = $naviforms->textfield($field_name, $permissions_values[$permissions_definitions[$i]['name']], '99%', 'navigate_permission_change_text(this);');
                break;
        }
        // search filters
        if (!empty($_REQUEST['filters'])) {
            $include = navitable::jqgridCheck(array('name' => $permissions_definitions[$i]['name'], 'scope' => $scope, 'type' => $type, 'value' => $permissions_values[$permissions_definitions[$i]['name']]), $_REQUEST['filters']);
            if (!$include) {
                continue;
            }
        }
        $out[$iRow] = array(0 => $permissions_definitions[$i]['name'], 1 => '<div data-description="' . $permissions_definitions[$i]['description'] . '">' . '<span class="ui-icon ui-icon-float ui-icon-info"></span>&nbsp;' . '<span>' . $permissions_definitions[$i]['name'] . '</span></div>', 2 => $scope, 3 => $type, 4 => $control);
        $iRow++;
    }
    return $out;
}