Commit efa6849a authored by Frank Bergmann's avatar Frank Bergmann

- Added a im_menu maintenance screen

parent c3c7f6fb
...@@ -247,6 +247,7 @@ declare ...@@ -247,6 +247,7 @@ declare
v_admin_matrix_menu integer; v_admin_matrix_menu integer;
v_admin_parameters_menu integer; v_admin_parameters_menu integer;
v_admin_profiles_menu integer; v_admin_profiles_menu integer;
v_admin_menus_menu integer;
v_admin_home_menu integer; v_admin_home_menu integer;
-- Groups -- Groups
...@@ -544,6 +545,16 @@ begin ...@@ -544,6 +545,16 @@ begin
label => 'admin_profiles', label => 'admin_profiles',
name => 'Profiles', name => 'Profiles',
url => '/intranet/admin/profiles/', url => '/intranet/admin/profiles/',
sort_order => 15,
parent_menu_id => v_admin_menu
);
acs_permission.grant_permission(v_admin_profiles_menu, v_admins, 'read');
v_admin_menus_menu := im_menu.new (
package_name => 'intranet',
label => 'admin_menus',
name => 'Menus',
url => '/intranet/admin/menus/',
sort_order => 20, sort_order => 20,
parent_menu_id => v_admin_menu parent_menu_id => v_admin_menu
); );
......
...@@ -13,6 +13,7 @@ set user_id [ad_maybe_redirect_for_registration] ...@@ -13,6 +13,7 @@ set user_id [ad_maybe_redirect_for_registration]
set page_title "Backup" set page_title "Backup"
set context_bar [ad_context_bar $page_title] set context_bar [ad_context_bar $page_title]
set page_body "<H1>$page_title</H1>" set page_body "<H1>$page_title</H1>"
set today [db_string today "select to_char(sysdate, 'YYYY-MM-DD') from dual"]
set user_admin_p [im_is_user_site_wide_or_intranet_admin $user_id] set user_admin_p [im_is_user_site_wide_or_intranet_admin $user_id]
if {!$user_admin_p} { if {!$user_admin_p} {
...@@ -20,6 +21,7 @@ if {!$user_admin_p} { ...@@ -20,6 +21,7 @@ if {!$user_admin_p} {
return return
} }
set sql " set sql "
select select
v.* v.*
...@@ -30,14 +32,48 @@ where ...@@ -30,14 +32,48 @@ where
and view_id < 200 and view_id < 200
" "
# Prepare the path for the export
#
if {![file isdirectory $path]} {
if { [catch {
ns_log Notice "/bin/mkdir $path"
exec /bin/mkdir "$path"
} err_msg] } {
ad_return_complaint 1 "Error creating subfolder $path:<br><pre>$err_msg\m</pre>"
return
}
}
append path "$today/"
if {![file isdirectory $path]} {
if { [catch {
ns_log Notice "/bin/mkdir $path"
exec /bin/mkdir "$path"
} err_msg] } {
ad_return_complaint 1 "Error creating subfolder $path:<br><pre>$err_msg\m</pre>"
return
}
}
append page_body "<ul>\n" append page_body "<ul>\n"
db_foreach foreach_report $sql { db_foreach foreach_report $sql {
append page_body "<li>Exporting $view_name ..." append page_body "<li>Exporting $view_name ..."
set report [im_backup_report $view_id] set report [im_backup_report $view_id]
set stream [open /tmp/$view_name.csv w]
puts $stream $report if { [catch {
close $stream ns_log Notice "/intranet/admin/backup/backup: writing report to $path"
set stream_name "$path$view_name.csv"
set stream [open $stream_name w]
puts $stream $report
close $stream
} err_msg] } {
ad_return_complaint 1 "Error writing report to file $stream_name:<br><pre>$err_msg\m</pre>"
return
}
} }
append page_body " append page_body "
</ul> </ul>
Successfully finished Successfully finished
......
...@@ -12,6 +12,13 @@ ...@@ -12,6 +12,13 @@
<li> <li>
<A href="../users/">Manage Individual Users</A><br> <A href="../users/">Manage Individual Users</A><br>
Here you can manage users one-by-one. Here you can manage users one-by-one.
<li>
<A href="profiles/">Manage Profiles</A><br>
Configure site-wide defaults on what a group of users ("profile")
can do and what they shouldn't do.
<li>
<A href="menus/">Manage Menus</A><br>
Edit menus and change their permissions.
<li> <li>
<A href="parameters/">Manage Global System Parameters</A><br> <A href="parameters/">Manage Global System Parameters</A><br>
Change the system parametrization such as directories, URLs, etc... Change the system parametrization such as directories, URLs, etc...
......
<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