change_permissions.naml

<macro name="change_permissions" requires="servlet">
	<n.node_page.>
		<n.if.not.visitor.can_change_permissions_of.page_node>
			<then>
				<n.login.><t>Only authorized users can proceed in this area.</t></n.login.>
			</then>
		</n.if.not.visitor.can_change_permissions_of.page_node>

		<n.if.is_submitted_form>
			<then>
				<n.save_all_permissions/>
				<n.if.page_node.is_root>
					<then.save_all_site_permissions />
				</n.if.page_node.is_root>
				<n.redirect_to.page_node.path/>
			</then>
		</n.if.is_submitted_form>

		<n.html>
			<head>
				<META NAME="robots" CONTENT="noindex,nofollow"/>
				<n.title.><t>Change Permissions</t></n.title.>
				<n.permission_javascript/>
				<n.permission_stylesheet/>
			</head>
			<body>
				<n.edit_header first_text="[t]Change Permissions[/t]" second_text="[n.page_node.get_app_node.subject/]" />

				<n.form.>
					<n.permissions_table/>

					<div style="margin-top:1.4em">
						<input type="submit" value="[t]Save Changes[/t]" />
						<t>or</t> <a href="[n.page_node.path/]"><t>Cancel</t></a>
					</div>
				</n.form.>
			</body>
		</n.html>
	</n.node_page.>
</macro>

<macro name="save_all_permissions">
	<n.edit_page_node.>
		<n.remove_permissions/>
		<n.all_permissions.loop.>
			<n.if.current_permission_row_field.equal value1="[n.value/]" value2="override">
				<then>
					<n.add_permission permission="[n.current_permission/]"/>
					<n.user_groups.>
						<n.add.anyone_group/>
						<n.add.members_group/>
						<n.add.administrators_group/>
						<n.add.authors_group/>
						<n.loop.permission_field. group="[n.current_group/]" permission="[n.current_permission/]">
							<n.if.is_checked>
								<then><n.add_permission group="[n.current_group/]" permission="[n.current_permission/]"/></then>
							</n.if.is_checked>
						</n.loop.permission_field.>
					</n.user_groups.>
				</then>
			</n.if.current_permission_row_field.equal>
		</n.all_permissions.loop.>
	</n.edit_page_node.>
</macro>

<macro name="save_all_site_permissions">
	<n.save_site_permissions.>
		<n.remove_site_permissions/>
		<n.all_site_permissions.loop.>
			<n.if.current_permission_row_field.equal value1="[n.value/]" value2="override">
				<then>
					<n.add_site_permission permission="[n.current_permission/]"/>
					<n.user_groups.>
						<n.add.anyone_group/>
						<n.add.members_group/>
						<n.add.administrators_group/>
						<n.loop.permission_field. group="[n.current_group/]" permission="[n.current_permission/]">
							<n.if.is_checked>
								<then><n.add_site_permission group="[n.current_group/]" permission="[n.current_permission/]"/></then>
							</n.if.is_checked>
						</n.loop.permission_field.>
					</n.user_groups.>
				</then>
			</n.if.current_permission_row_field.equal>
		</n.all_site_permissions.loop.>
	</n.save_site_permissions.>
</macro>

<macro name="permission_stylesheet">
	<style type="text/css">
		input[type=radio] {
			vertical-align:-15%;
		}
		table.permissions {
			border-collapse: collapse;
			margin-top:1em;
		}
		table.permissions th {
			padding: .3em .6em;
			border-bottom-style:solid;
			border-bottom-width:2px;
		}
		table.permissions td {
			padding: .3em .4em;
			text-align:center;
		}
		table.permissions td.col1 {
			text-align: left;
		}
	</style>
</macro>

<macro name="permission_javascript">
	<n.zebra_table_javascript table_selector="table.permissions"/>
	<script type="text/javascript">
		var fields = [];
		var defaults = [];
		$(document).ready(function() {
			function enableRow(s) {
				var $select = $(s);
				var $tr = $select.parent().parent();
				var $checkboxes = $('input[type="checkbox"]',$tr);
				if ($select.val() == 'inherit') {
					$select.css('font-weight','normal').removeClass('highlight');
					$checkboxes.attr('disabled','y').each(function(){
						var index = fields.indexOf(this.name);
						if (defaults[index])
							$(this).attr('checked','y');
						else
							$(this).removeAttr('checked');
					});
				} else {
					$select.css('font-weight','bold').addClass('highlight');
					$checkboxes.removeAttr('disabled');
				}
			};
			$('table.permissions select')
				.change(function() { enableRow(this); })
				.each(function() { enableRow(this); });
		});
	</script>
</macro>

<macro name="permissions_table">
	<div style="overflow:auto">
		<table class="permissions">
			<tr class="shaded-bg-color">
				<th class="medium-border-color"></th>
				<th class="medium-border-color"></th>
				<n.permission_group_heading.anyone_group/>
				<n.permission_group_heading.administrators_group/>
				<n.permission_group_heading.members_group/>
				<n.permission_group_heading.authors_group/>
				<n.permission_group_list.loop.>
					<n.permission_group_heading.current_group/>
				</n.permission_group_list.loop.>
			</tr>
			<n.permission_rows />
		</table>
	</div>
</macro>

<macro name="permission_rows">
	<n.permission_row
		permission = "[n.view_permission/]"
		description="[t]Who can view this application and its contents[/t]"
		administrators_cell = "true"
		authors_cell = "true"
	/>
	<n.permission_row
		permission = "[n.edit_app_permission/]"
		description="[t]Who can edit applications (e.g., change name, description, etc.)[/t]"
		authors_cell = "true"
	/>
	<n.permission_row
		permission = "[n.create_topic_permission/]"
		description="[t]Who can create new topics under this application[/t]"
	/>
	<n.permission_row
		permission = "[n.reply_permission/]"
		description="[t]Who can reply to messages posted under this application[/t]"
	/>
	<n.permission_row
		permission = "[n.move_permission/]"
		description="[t]Who can move messages under other destinations (e.g., under other topics or sub-forums)[/t]"
	/>
	<n.permission_row
		permission = "[n.create_sub_apps_permission/]"
		description="[t]Who can create sub applications (e.g., sub-forums, subcategories, etc.)[/t]"
	/>
	<n.permission_row
		permission = "[n.change_post_date_permission/]"
		description="[t]Who can change the date and time of messages[/t]"
	/>
	<n.permission_row
		permission = "[n.manage_subscribers_permission/]"
		description="[t]Who can manage subscribers of this application[/t]"
	/>
	<n.permission_row
		permission = "[n.manage_pinned_topics_permission/]"
		description="[t]Who can pin/unpin topics in this application[/t]"
	/>
	<n.permission_row
		permission = "[n.manage_locked_topics_permission/]"
		description="[t]Who can lock/unlock topics in this application[/t]"
	/>
	<n.if.page_node.is_root>
		<then>
			<n.site_permission_row
				permission = "[n.manage_banned_users_permission/]"
				description="[t]Who can ban/unban users[/t]"
			/>
		</then>
	</n.if.page_node.is_root>
	<n.permission_row
		permission = "[n.show_group_members_permission/]"
		description="[t]Which groups allow members to be listed[/t]"
		authors_cell = ""
	/>
	<n.permission_row
		permission = "[n.unrestricted_posting_permission/]"
		description="[t]Who can post any content without restriction (including javascript code, &lt;object&gt; and &lt;style&gt; tags, etc.). [b]Security Warning[/b]: Allow this option only for users that you really trust.[/t]"
		authors_cell = ""
	/>
	<n.permission_row
		permission = "[n.edit_all_permission/]"
		description="[t]Who can edit any content, both applications and posts.  Note: Please only use this feature in extreme circumstances.  Most users will not like having their posts edited by someone else.[/t]"
		authors_cell = ""
		anyone_cell = ""
		registered_cell = ""
		members_cell = ""
		other_groups_cell = ""
	/>
</macro>

<macro name="permission_row" parameters="permission,description,anyone_cell,registered_cell,administrators_cell,members_cell,authors_cell,other_groups_cell">
	<tr>
		<td class="col1">
			<strong><n.permission/></strong>
			<div class="weak-color"><n.description/></div>
		</td>
		<td>
			<n.permission_row_field. permission="[n.permission/]">
				<n.select.>
					<n.select_option value="inherit" selectedValue="[n.permission_row_selected_option.permission/]" text="[n.permission_inherit_label/]"/>
					<n.select_option value="override" selectedValue="[n.permission_row_selected_option.permission/]" text="[t]Modified[/t]"/>
				</n.select.>
			</n.permission_row_field.>
		</td>
		<n.permission_td cell="[n.anyone_cell/]" group="[n.anyone_group/]" permission="[n.permission/]" />
		<n.permission_td cell="[n.administrators_cell/]" group="[n.administrators_group/]" permission="[n.permission/]" />
		<n.permission_td cell="[n.members_cell/]" group="[n.members_group/]" permission="[n.permission/]" />
		<n.permission_td cell="[n.authors_cell/]" group="[n.authors_group/]" permission="[n.permission/]" />
		<n.permission_group_list.loop.>
			<n.permission_td cell="[n.other_groups_cell/]" group="[n.current_group/]" permission="[n.permission/]" />
		</n.permission_group_list.loop.>
	</tr>
</macro>

<macro name="site_permission_row" parameters="permission,description,anyone_cell,administrators_cell">
	<tr>
		<td class="col1">
			<strong><n.permission/></strong>
			<div class="weak-color"><n.description/></div>
		</td>
		<td>
			<n.permission_row_field. permission="[n.permission/]">
				<n.select.>
					<n.select_option value="inherit" selectedValue="[n.site_permission_row_selected_option.permission/]" text="[n.permission_inherit_label/]"/>
					<n.select_option value="override" selectedValue="[n.site_permission_row_selected_option.permission/]" text="[t]Modified[/t]"/>
				</n.select.>
			</n.permission_row_field.>
		</td>
		<n.site_permission_td cell="[n.anyone_cell/]" group="[n.anyone_group/]" permission="[n.permission/]" />
		<n.site_permission_td cell="[n.administrators_cell/]" group="[n.administrators_group/]" permission="[n.permission/]" />
		<n.site_permission_td group="[n.members_group/]" permission="[n.permission/]" />
		<td></td>
		<n.permission_group_list.loop.>
			<n.site_permission_td group="[n.current_group/]" permission="[n.permission/]" />
		</n.permission_group_list.loop.>
	</tr>
</macro>

<macro name="permission_row_selected_option" dot_parameter="permission">
	<n.if.page_node.node_has_permission permission="[n.permission/]">
		<then>override</then>
		<else>inherit</else>
	</n.if.page_node.node_has_permission>
</macro>

<macro name="site_permission_row_selected_option" dot_parameter="permission">
	<n.if.site_has_site_permission permission="[n.permission/]">
		<then>override</then>
		<else>inherit</else>
	</n.if.site_has_site_permission>
</macro>

<macro name="permission_inherit_label">
	<n.if.page_node.is_root>
		<then><t>Default</t></then>
		<else><t>Inherit</t></else>
	</n.if.page_node.is_root>
</macro>

<macro name="permission_td" parameters="cell,group,permission" requires="node_page">
	<n.if.not.is_null.cell>
		<then>
			<td><n.cell/></td>
		</then>
		<else>
			<td><n.permission_field. group="[n.group/]" permission="[n.permission/]" >
				<n.set_value.page_node.has_permission group="[n.group/]" permission="[n.permission/]" />
				<n.checkbox/>
				<n.backup_default_value field_name="[n.name/]">
					<default_value>
						<n.permission_inherited_value group="[n.group/]" permission="[n.permission/]" />
					</default_value>
				</n.backup_default_value>
			</n.permission_field.></td>
		</else>
	</n.if.not.is_null.cell>
</macro>

<macro name="site_permission_td" parameters="cell,group,permission">
	<n.if.not.is_null.cell>
		<then>
			<td><n.cell/></td>
		</then>
		<else>
			<td><n.permission_field. group="[n.group/]" permission="[n.permission/]" >
				<n.set_value.group_has_site_permission group="[n.group/]" permission="[n.permission/]" />
				<n.checkbox/>
				<n.backup_default_value field_name="[n.name/]">
					<default_value>
						<n.site_permission_inherited_value group="[n.group/]" permission="[n.permission/]" />
					</default_value>
				</n.backup_default_value>
			</n.permission_field.></td>
		</else>
	</n.if.not.is_null.cell>
</macro>

<macro name="permission_inherited_value" parameters="group,permission" requires="node_page">
	<n.if.page_node.is_root>
		<then>
			<n.has_default_permission group="[n.group/]" permission="[n.permission/]" />
		</then>
		<else>
			<n.page_node.parent_node.has_permission group="[n.group/]" permission="[n.permission/]" />
		</else>
	</n.if.page_node.is_root>
</macro>

<macro name="site_permission_inherited_value" parameters="group,permission">
	<n.has_site_default_permission group="[n.group/]" permission="[n.permission/]" />
</macro>

<macro name="backup_default_value" parameters="field_name,default_value">
	<script type="text/javascript">
		fields.push('<n.field_name/>');
		defaults.push(<n.null_to_false.default_value/>);
	</script>
</macro>

<macro name="permission_field" parameters="group,permission" dot_parameter="do">
	<n.field>
		<name>chk__<n.remove_spaces.permission/>__<n.remove_spaces.group/></name>
		<do><n.do/></do>
	</n.field>
</macro>

<macro name="current_permission_row_field" dot_parameter="do" requires="permission_list">
	<n.permission_row_field permission="[n.current_permission/]" do="[n.do/]" />
</macro>

<macro name="permission_row_field" parameters="permission" dot_parameter="do">
	<n.field>
		<name>select__<n.remove_spaces.permission/></name>
		<do><n.do/></do>
	</n.field>
</macro>

<macro name="permission_group_list" dot_parameter="do">
	<n.user_groups.>
		<n.remove.members_group/>
		<n.remove.administrators_group/>
		<n.sort/>
		<n.do/>
	</n.user_groups.>
</macro>

<macro name="permission_group_heading" dot_parameter="group">
	<th class="medium-border-color">
		<n.if>
			<condition>
				<n.either>
					<condition1><n.equal value1="[n.group/]" value2="[n.anyone_group/]"/></condition1>
					<condition2><n.equal value1="[n.group/]" value2="[n.authors_group/]"/></condition2>
				</n.either>
			</condition>
			<then><n.group/></then>
			<else>
				<n.set_var. name="url"><n.manage_users_and_groups_path group="[n.group/]"/></n.set_var.>
				<a href="[n.var name='url'/]"><n.group/></a>
			</else>
		</n.if>
	</th>
</macro>

<macro name="all_permissions" dot_parameter="do">
	<n.permissions values="[n.all_permissions_list/]">
		<do><n.do/></do>
	</n.permissions>
</macro>

<macro name="all_permissions_list">
	<n.view_permission/>,
	<n.edit_app_permission/>,
	<n.reply_permission/>,
	<n.create_topic_permission/>,
	<n.move_permission/>,
	<n.create_sub_apps_permission/>,
	<n.change_post_date_permission/>,
	<n.manage_pinned_topics_permission/>,
	<n.manage_locked_topics_permission/>,
	<n.manage_subscribers_permission/>,
	<n.show_group_members_permission/>,
	<n.unrestricted_posting_permission/>,
	<n.edit_all_permission/>,
</macro>

<macro name="all_site_permissions" dot_parameter="do">
	<n.permissions values="
		[n.manage_banned_users_permission/]
	">
		<do><n.do/></do>
	</n.permissions>
</macro>