Commit ca2d80a0 authored by Frank Bergmann's avatar Frank Bergmann

- added menu maintenance screens

parent 085aeed9
<master src="../../../../intranet-core/www/master">
<property name="context">@context;noquote@</property>
<property name="title">Menu Administration</property>
@table;noquote@
# /packages/intranet-core/www/admin/menus/index.tcl
#
# Copyright (C) 2004 Project/Open
# The code is based on ArsDigita ACS 3.4
#
# This program is free software. You can redistribute it
# and/or modify it under the terms of the GNU General
# Public License as published by the Free Software Foundation;
# either version 2 of the License, or (at your option)
# any later version. This program is distributed in the
# hope that it will be useful, but WITHOUT ANY WARRANTY;
# without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU General Public License for more details.
ad_page_contract {
Show the permissions for all menus in the system
@author frank.bergmann@project-open.com
} {
}
# ------------------------------------------------------
# Defaults & Security
# ------------------------------------------------------
set user_id [ad_maybe_redirect_for_registration]
set user_is_admin_p [im_is_user_site_wide_or_intranet_admin $user_id]
if {!$user_is_admin_p} {
ad_return_complaint 1 "You have insufficient privileges to use this page"
return
}
set page_title "Menu Permissions"
set context_bar [ad_context_bar $page_title]
set context ""
set menu_url "/intranet/admin/menus/new"
set toggle_url "/intranet/admin/menus/toggle"
set group_url "/admin/groups/one"
set bgcolor(0) " class=rowodd"
set bgcolor(1) " class=roweven"
# ------------------------------------------------------
# Get the list of all relevant "Profiles"
# and generate the dynamic part of the SQL
# ------------------------------------------------------
set group_list_sql {
select DISTINCT
g.group_name,
g.group_id
from
acs_objects o,
groups g
where
g.group_id = o.object_id
and o.object_type = 'im_profile'
order by lower(g.group_name)
}
set group_ids [list]
set group_names [list]
set table_header "
<tr>
<td width=20></td>
<td width=20></td>
<td width=20></td>
<td class=rowtitle>Package</td>
"
set main_sql_select ""
db_foreach group_list $group_list_sql {
lappend group_ids $group_id
lappend group_names $group_name
append main_sql_select "\tacs_permission.permission_p(m.menu_id, $group_id, 'read') as p${group_id}_read_p,\n"
append table_header "<td class=rowtitle><A href=$group_url?group_id=$group_id>$group_name</A></td>\n"
}
append table_header "</th>\n"
# ------------------------------------------------------
# Main SQL: Extract the permissions for all Menus
# ------------------------------------------------------
set start_menu_id [db_string start_menu_id "select menu_id from im_menus where label='main'" -default 0]
set main_sql "
select
${main_sql_select} m.*,
level,
(level-1) as indent_level,
(4-level) as colspan_level
from
im_menus m
start with
menu_id = :start_menu_id
connect by
parent_menu_id = PRIOR menu_id
"
# ad_return_complaint 1 "<li><pre>$main_sql</pre>"
set table "
<table>
$table_header\n"
set ctr 0
set old_package_name ""
db_foreach menus $main_sql {
incr ctr
append table "\n<tr$bgcolor([expr $ctr % 2])>\n"
if {0 != $indent_level} {
append table "\n<td colspan=$indent_level>&nbsp;</td>"
}
append table "
<td colspan=$colspan_level>
<A href=$menu_url?menu_id=$menu_id>$name - $label</A>
</td>
<td>$package_name</td>
"
foreach horiz_group_id $group_ids {
set read_p [expr "\$p${horiz_group_id}_read_p"]
set read "<A href=$toggle_url?horiz_group_id=$horiz_group_id&object_id=$menu_id&action=add_readable>r</A>\n"
if {$read_p == "t"} {
set read "<A href=$toggle_url?horiz_group_id=$horiz_group_id&object_id=$menu_id&action=remove_readable><b>R</b></A>\n"
}
append table "
<td align=center>
$read
</td>
"
}
append table "
</tr>
"
}
append table "</table>\n"
<master src="../../../../intranet-core/www/master">
<property name="title">@page_title@</property>
<property name="context">@context;noquote@</property>
<h2>@page_title@</h2>
<if @message@ not nil>
<div class="general-message">@message@</div>
</if>
<property name="focus">@focus;noquote@</property>
<formtemplate id="menu"></formtemplate>
# /packages/intranet-core/www/admin/menus/new.tcl
#
# Copyright (C) 2003-2004 Project/Open
#
# All rights reserved. Please check
# http://www.project-open.com/license/ for details.
ad_page_contract {
Create a new dynamic value or edit an existing one.
@param form_mode edit or display
@author frank.bergmann@project-open.com
} {
menu_id:integer,optional
{return_url "/intranet/admin/menus/index"}
edit_p:optional
message:optional
{ form_mode "display" }
}
# ------------------------------------------------------------------
# Default & Security
# ------------------------------------------------------------------
set user_id [ad_maybe_redirect_for_registration]
set user_is_admin_p [im_is_user_site_wide_or_intranet_admin $user_id]
if {!$user_is_admin_p} {
ad_return_complaint 1 "You have insufficient privileges to use this page"
return
}
set action_url "/intranet/admin/menus/new"
set focus "menu.var_name"
set page_title "New Menu"
set context [ad_context_bar $page_title]
# ------------------------------------------------------------------
# Build the form
# ------------------------------------------------------------------
set parent_options [im_menu_parent_options]
ad_form \
-name menu \
-cancel_url $return_url \
-action $action_url \
-mode $form_mode \
-export {next_url user_id return_url} \
-form {
menu_id:key
{name:text(text) {label Name} {html {size 40}}}
{package_name:text(text) {label Package} {html {size 30}}}
{label:text(text) {label Label} {html {size 30}}}
{url:text(text) {label URL} {html {size 100}}}
{sort_order:text(text) {label "Sort Order"} {html {size 10}}}
{parent_menu_id:text(select) {label "Parent Menu"} {options $parent_options} }
}
ad_form -extend -name menu -on_request {
# Populate elements from local variables
} -select_query {
select m.*
from im_menus m
where m.menu_id = :menu_id
} -new_data {
db_dml menu_insert "
declare
begin
v_menu_id := im_menu.new (
package_name => :package_name,
label => :label,
name => :name,
url => :url,
sort_order => :sort_order,
parent_menu_id => :parent_menu_id,
);
end;
"
} -edit_data {
db_dml menu_update "
update im_menus set
package_name = :package_name,
label = :label,
name = :name,
url = :url,
sort_order = :sort_order,
parent_menu_id = :parent_menu_id,
where
menu_id = :menu_id
"
} -on_submit {
ns_log Notice "new1: on_submit"
} -after_submit {
ad_returnredirect $return_url
ad_script_abort
}
# /packages/intranet-core/www/admin/menus/toggle.tcl
#
# Copyright (C) 2004 Project/Open
#
# This program is free software. You can redistribute it
# and/or modify it under the terms of the GNU General
# Public License as published by the Free Software Foundation;
# either version 2 of the License, or (at your option)
# any later version. This program is distributed in the
# hope that it will be useful, but WITHOUT ANY WARRANTY;
# without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU General Public License for more details.
ad_page_contract {
Add or remove "Menu" permissions<br>
(permissions for members of one group to manage the members
of another group).
@author Frank Bergmann (frank.bergmann@project-open.com)
} {
horiz_group_id:integer
object_id:integer
action
{ return_url "index"}
}
set current_user_id [ad_maybe_redirect_for_registration]
set current_user_is_admin_p [im_is_user_site_wide_or_intranet_admin $current_user_id]
if {!$current_user_is_admin_p} {
ad_return_complaint 1 "You have insufficient privileges to use this page"
return
}
switch $action {
add_viewable {
db_dml grant_permission "
begin
acs_permission.grant_permission($object_id,$horiz_group_id,'view');
end;
"
}
add_readable {
db_dml grant_permission "
begin
acs_permission.grant_permission($object_id,$horiz_group_id,'read');
end;
"
}
add_writable {
db_dml grant_permission "
begin
acs_permission.grant_permission($object_id,$horiz_group_id,'write');
end;
"
}
add_administratable {
db_dml grant_permission "
begin
acs_permission.grant_permission($object_id,$horiz_group_id,'admin');
end;
"
}
remove_viewable {
db_dml grant_permission "
begin
acs_permission.revoke_permission($object_id,$horiz_group_id,'view');
end;
"
}
remove_readable {
db_dml grant_permission "
begin
acs_permission.revoke_permission($object_id,$horiz_group_id,'read');
end;
"
}
remove_writable {
db_dml grant_permission "
begin
acs_permission.revoke_permission($object_id,$horiz_group_id,'write');
end;
"
}
remove_administratable {
db_dml grant_permission "
begin
acs_permission.revoke_permission($object_id,$horiz_group_id,'admin');
end;
"
}
default {
ad_return_complaint 1 "Unknown action: '$action'"
return
}
}
# Flush the global permissions cache so that the
# new changes become active.
im_permission_flush
ad_returnredirect $return_url
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment