1*cdf0e10cSrcweir#*************************************************************************
2*cdf0e10cSrcweir#
3*cdf0e10cSrcweir# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir#
5*cdf0e10cSrcweir# Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir#
7*cdf0e10cSrcweir# OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir#
9*cdf0e10cSrcweir# This file is part of OpenOffice.org.
10*cdf0e10cSrcweir#
11*cdf0e10cSrcweir# OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir# it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir# only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir#
15*cdf0e10cSrcweir# OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir# but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir# GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir# (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir#
21*cdf0e10cSrcweir# You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir# version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir# <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir# for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir#
26*cdf0e10cSrcweir#*************************************************************************
27*cdf0e10cSrcweir
28*cdf0e10cSrcweirpackage par2script::undefine;
29*cdf0e10cSrcweir
30*cdf0e10cSrcweiruse par2script::globals;
31*cdf0e10cSrcweir
32*cdf0e10cSrcweir##########################################################
33*cdf0e10cSrcweir# Removing in the script all the gids, that are listed
34*cdf0e10cSrcweir# in undefine scp files
35*cdf0e10cSrcweir##########################################################
36*cdf0e10cSrcweir
37*cdf0e10cSrcweirsub undefine_gids
38*cdf0e10cSrcweir{
39*cdf0e10cSrcweir	my ($parfilecontent) = @_;
40*cdf0e10cSrcweir
41*cdf0e10cSrcweir	my $item;
42*cdf0e10cSrcweir	foreach $item ( @par2script::globals::allitems )
43*cdf0e10cSrcweir	{
44*cdf0e10cSrcweir		my $unitem = "Un$item";
45*cdf0e10cSrcweir
46*cdf0e10cSrcweir		for ( my $i = 0; $i <= $#{$parfilecontent}; $i++ )
47*cdf0e10cSrcweir		{
48*cdf0e10cSrcweir			if ( ${$parfilecontent}[$i] =~ /^\s*$unitem\s*(\w+?)\s*$/ )
49*cdf0e10cSrcweir			{
50*cdf0e10cSrcweir				my $gid = $1;
51*cdf0e10cSrcweir				delete($par2script::globals::definitions{$item}->{$gid});
52*cdf0e10cSrcweir			}
53*cdf0e10cSrcweir		}
54*cdf0e10cSrcweir	}
55*cdf0e10cSrcweir}
56*cdf0e10cSrcweir
57*cdf0e10cSrcweir##########################################################
58*cdf0e10cSrcweir# Collecting all subdirectories of a specified directory
59*cdf0e10cSrcweir##########################################################
60*cdf0e10cSrcweir
61*cdf0e10cSrcweirsub collect_children_dirs
62*cdf0e10cSrcweir{
63*cdf0e10cSrcweir	my ($gid, $collector) = @_;
64*cdf0e10cSrcweir
65*cdf0e10cSrcweir	my $diritem = "Directory";
66*cdf0e10cSrcweir	my $parentkey = "ParentID";
67*cdf0e10cSrcweir
68*cdf0e10cSrcweir	if ( exists($par2script::globals::definitions{$diritem}) )
69*cdf0e10cSrcweir	{
70*cdf0e10cSrcweir		my $onedefinition;
71*cdf0e10cSrcweir
72*cdf0e10cSrcweir		foreach $onedefinition (keys %{$par2script::globals::definitions{$diritem}})
73*cdf0e10cSrcweir		{
74*cdf0e10cSrcweir			if ( $par2script::globals::definitions{$diritem}->{$onedefinition}->{$parentkey} eq $gid )
75*cdf0e10cSrcweir			{
76*cdf0e10cSrcweir				push(@{$collector}, $onedefinition);
77*cdf0e10cSrcweir				collect_children_dirs($onedefinition, $collector);
78*cdf0e10cSrcweir			}
79*cdf0e10cSrcweir		}
80*cdf0e10cSrcweir	}
81*cdf0e10cSrcweir}
82*cdf0e10cSrcweir
83*cdf0e10cSrcweir##########################################################
84*cdf0e10cSrcweir# Removing in the script complete profiles.
85*cdf0e10cSrcweir# This includes the Profile and its ProfileItems.
86*cdf0e10cSrcweir##########################################################
87*cdf0e10cSrcweir
88*cdf0e10cSrcweirsub remove_complete_item
89*cdf0e10cSrcweir{
90*cdf0e10cSrcweir	my ($item, $parfilecontent) = @_;
91*cdf0e10cSrcweir
92*cdf0e10cSrcweir	my $removeitem = "Remove$item";
93*cdf0e10cSrcweir	my $dependentkey = "";
94*cdf0e10cSrcweir	my $collect_children = 0;
95*cdf0e10cSrcweir	my @gidcollector = ();
96*cdf0e10cSrcweir	my @dependentitems = ();
97*cdf0e10cSrcweir
98*cdf0e10cSrcweir	if ( $item eq "Profile" )
99*cdf0e10cSrcweir	{
100*cdf0e10cSrcweir		@dependentitems = ("ProfileItem");
101*cdf0e10cSrcweir		$dependentkey = "ProfileID";
102*cdf0e10cSrcweir	}
103*cdf0e10cSrcweir	elsif ( $item eq "Directory" )
104*cdf0e10cSrcweir	{
105*cdf0e10cSrcweir		@dependentitems = ("File", "Shortcut", "Unixlink");
106*cdf0e10cSrcweir		$dependentkey = "Dir";
107*cdf0e10cSrcweir		$collect_children = 1;
108*cdf0e10cSrcweir	}
109*cdf0e10cSrcweir
110*cdf0e10cSrcweir	for ( my $i = 0; $i <= $#{$parfilecontent}; $i++ )
111*cdf0e10cSrcweir	{
112*cdf0e10cSrcweir		if ( ${$parfilecontent}[$i] =~ /^\s*$removeitem\s*(\w+?)\s*$/ )
113*cdf0e10cSrcweir		{
114*cdf0e10cSrcweir			my $onegid = $1;
115*cdf0e10cSrcweir			push(@gidcollector, $onegid);
116*cdf0e10cSrcweir			if ( $collect_children ) { collect_children_dirs($onegid, \@gidcollector); }
117*cdf0e10cSrcweir
118*cdf0e10cSrcweir			my $gid;
119*cdf0e10cSrcweir			foreach $gid (@gidcollector)
120*cdf0e10cSrcweir			{
121*cdf0e10cSrcweir				delete($par2script::globals::definitions{$item}->{$gid});
122*cdf0e10cSrcweir
123*cdf0e10cSrcweir				# also deleting all dependent items, for example "ProfileItems" whose "ProfileID" is this "Profile"
124*cdf0e10cSrcweir				my $depitem;
125*cdf0e10cSrcweir				foreach $depitem ( @dependentitems )
126*cdf0e10cSrcweir				{
127*cdf0e10cSrcweir					if ( exists($par2script::globals::definitions{$depitem}) )
128*cdf0e10cSrcweir					{
129*cdf0e10cSrcweir						my $onedefinition;
130*cdf0e10cSrcweir						foreach $onedefinition (keys %{$par2script::globals::definitions{$depitem}})
131*cdf0e10cSrcweir						{
132*cdf0e10cSrcweir							if ( $par2script::globals::definitions{$depitem}->{$onedefinition}->{$dependentkey} eq $gid )
133*cdf0e10cSrcweir							{
134*cdf0e10cSrcweir								delete($par2script::globals::definitions{$depitem}->{$onedefinition});
135*cdf0e10cSrcweir							}
136*cdf0e10cSrcweir						}
137*cdf0e10cSrcweir					}
138*cdf0e10cSrcweir				}
139*cdf0e10cSrcweir			}
140*cdf0e10cSrcweir		}
141*cdf0e10cSrcweir	}
142*cdf0e10cSrcweir}
143*cdf0e10cSrcweir
144*cdf0e10cSrcweir1;
145