require "/usr/lib/cherry/docflow/dbaccess";
########################################################
sub get_operators_by_entity {
        my ($doctype,$entity)=@_;
        my ($operators_,$groups_,$operator_,$group_);

	if ($entity>0) {
        	my $sth=$dbh->prepare("SELECT name,group_ FROM docflow_users WHERE type_=$doctype AND entity=$entity ORDER BY id");
        	$sth->execute;

        	while(my($name,$type_)=$sth->fetchrow_array) {
                	if($type_==0) { $operators_.="$name "; }
                        	else { $groups_.="$name ";
                	}
        	}


        	foreach $group_ (keys %groups::name) {
                	if($groups_ =~ /(^$group_$)|(^$group_\ )|(\ $group_$)|(\ $group_\ )/) {
                        	foreach $operator_ (keys %operators::name) {
                                	if(@operators::group{$operator_}=~ /(^$group$)|(^$group\ )|(\ $group$)|(\ $group\ )/) {
                                        	$operators_.="$operator_ ";

                                	}
                        	}
                	}
        	}
	}

        return $operators_;

}
########################################################
sub get_operators_by_entity_run {
        my ($doc,$entity)=@_;
        my ($operators_,$groups_,$operator_,$group_);

        if ($entity>0) {
                my $sth=$dbh->prepare("SELECT name,group_ FROM  docflow_users_run  WHERE doc=$doc AND entity=$entity ORDER BY id");
                $sth->execute;

                while(my($name,$type_)=$sth->fetchrow_array) {
                        if($type_==0) { $operators_.="$name "; }
                                else { $groups_.="$name ";
                        }
                }


                foreach $group_ (keys %groups::name) {
                        if($groups_ =~ /(^$group_$)|(^$group_\ )|(\ $group_$)|(\ $group_\ )/) {
                                foreach $operator_ (keys %operators::name) {
                                        if(@operators::group{$operator_}=~ /(^$group$)|(^$group\ )|(\ $group$)|(\ $group\ )/) {
                                                $operators_.="$operator_ ";

                                        }
                                }
                        }
                }
        }

        return $operators_;

}

#############################################################
my %fast_operators;
my %fast_groups;

sub prepare_fast_get_operators_by_entity_run {

	my $sth=$dbh->prepare("SELECT doc,entity,name,group_ FROM  docflow_users_run 	");
	$sth->execute;

	while(my($doc,$entity,$name,$type_)=$sth->fetchrow_array) {
		if($type_==0) { 
			$fast_operators{$doc}{$entity}{$name}=1; 
		} else { 
			$fast_groups{$doc}{$entity}{$name}=1; 
                }
	}


}
#############################################################
sub fast_get_operators_by_entity_run {
	my ($doc,$entity)=@_;

        my ($operators_,$groups_);


	foreach my $key (keys %{$fast_operators{$doc}{$entity} } ) {
		$operators_.="$key ";
	}

	foreach my $key (keys %{$fast_groups{$doc}{$entity} } ) {
		my $group_ = $key;
        	foreach $operator_ (keys %operators::name) {
                	if(@operators::group{$operator_}=~ /(^$group_$)|(^$group_\ )|(\ $group_$)|(\ $group_\ )/) {
                        	$operators_.="$operator_ ";

                        }
                }
	}

        return $operators_;

}

1;
