#!/usr/local/bin/perl

require './filemin-lib.pl';

&ReadParse();

get_paths();

my @errors;

my $perms = $in{'perms'};

# Selected directories and files only
if ($in{'applyto'} eq '1') {
	foreach $name (split(/\0/, $in{'name'})) {
		if (system_logged(
			"chmod " . quotemeta($perms) . " " .
			quotemeta("$cwd/$name")) != 0) {
			push @errors,
				"$name - $text{'error_chmod'}: $?";
			}
		}
	}

# Selected files and directories and files in
# selected directories
if ($in{'applyto'} eq '2') {
	foreach $name (split(/\0/, $in{'name'})) {
		if (system_logged(
			"chmod " . quotemeta($perms) . " " .
			quotemeta("$cwd/$name")) != 0) {
			push @errors,
				"$name - $text{'error_chmod'}: $?";
			}
		if (-d "$cwd/$name") {
			if (system_logged(
				"find " .
				quotemeta("$cwd/$name") .
				" -maxdepth 1 -type f" .
				" -exec chmod " .
				quotemeta($perms) .
				" {} \\;") != 0) {
				push @errors,
					"$name - " .
					"$text{'error_chmod'}: $?";
				}
			}
		}
	}

# All (recursive)
if ($in{'applyto'} eq '3') {
	foreach $name (split(/\0/, $in{'name'})) {
		if (system_logged(
			"chmod -R " . quotemeta($perms) .
			" " .
			quotemeta("$cwd/$name")) != 0) {
			push @errors,
				"$name - $text{'error_chmod'}: $?";
			}
		}
	}

# Selected files and files under selected directories
# and subdirectories
if ($in{'applyto'} eq '4') {
	foreach $name (split(/\0/, $in{'name'})) {
		if (-f "$cwd/$name") {
			if (system_logged(
				"chmod " .
				quotemeta($perms) . " " .
				quotemeta("$cwd/$name")) != 0) {
				push @errors,
					"$name - " .
					"$text{'error_chmod'}: $?";
				}
			}
		else {
			if (system_logged(
				"find " .
				quotemeta("$cwd/$name") .
				" -type f -exec chmod " .
				quotemeta($perms) .
				" {} \\;") != 0) {
				push @errors,
					"$name - " .
					"$text{'error_chmod'}: $?";
				}
			}
		}
	}

# Selected directories and subdirectories
if ($in{'applyto'} eq '5') {
	foreach $name (split(/\0/, $in{'name'})) {
		if (-d "$cwd/$name") {
			if (system_logged(
				"chmod " .
				quotemeta($perms) . " " .
				quotemeta("$cwd/$name")) != 0) {
				push @errors,
					"$name - " .
					"$text{'error_chmod'}: $?";
				}
			if (system_logged(
				"find " .
				quotemeta("$cwd/$name") .
				" -type d -exec chmod " .
				quotemeta($perms) .
				" {} \\;") != 0) {
				push @errors,
					"$name - " .
					"$text{'error_chmod'}: $?";
				}
			}
		}
	}

if (scalar(@errors) > 0) {
	print_errors(@errors);
	}
else {
	&redirect("index.cgi?path=" . &urlize($path));
	}
