[vhffs-dev] [svn] commit: r147 - in /trunk: ./ vhffs-api/src/Vhffs/ vhffs-api/src/Vhffs/Listengine/ vhffs-api/src/Vhffs/Panel/ vhffs-api/src/Vhffs/Services/ vhffs-backend/conf/ vhffs-backend/src/pgsql/ vhffs-listengine/src/ vhffs-listengine/src/archives/ vhffs-listengine/src/archives/templates/ vhffs-panel/acl/ vhffs-panel/admin/ vhffs-panel/admin/largefile/ vhffs-panel/largefile/ vhffs-panel/mysql/ vhffs-panel/svn/ vhffs-panel/templates/admin/largefile/ vhffs-panel/templates/admin/main/ vhffs-panel/templates/admin/misc/ vhffs-panel/templates/group/ vhffs-panel/templates/largefile/ vhffs-panel/templates/menu/ vhffs-panel/templates/svn/

[ Thread Index | Date Index | More vhffs.org/vhffs-dev Archives ]


Author: soda
Date: Mon Jan 30 22:46:03 2006
New Revision: 147

Log:
First commit with largefile module
Use now logging, locking options in vhffs.conf
Added panel (admin, modo, etc ...) section for largefiles
Many bugfixes
Improve listengine web archives


Added:
    trunk/vhffs-api/src/Vhffs/Panel/LargeFile.pm
    trunk/vhffs-api/src/Vhffs/Services/LargeFile.pm
    trunk/vhffs-backend/src/pgsql/create_largefile.sql
    trunk/vhffs-panel/admin/largefile/
    trunk/vhffs-panel/admin/largefile/list.pl   (with props)
    trunk/vhffs-panel/admin/largefile/search.pl   (with props)
    trunk/vhffs-panel/largefile/
    trunk/vhffs-panel/largefile/create.pl   (with props)
    trunk/vhffs-panel/largefile/delete.pl   (with props)
    trunk/vhffs-panel/largefile/prefs.pl   (with props)
    trunk/vhffs-panel/largefile/submit.pl   (with props)
    trunk/vhffs-panel/templates/admin/largefile/
    trunk/vhffs-panel/templates/admin/largefile/menu.tmpl
    trunk/vhffs-panel/templates/admin/largefile/part.tmpl
    trunk/vhffs-panel/templates/admin/largefile/search.tmpl
    trunk/vhffs-panel/templates/largefile/
    trunk/vhffs-panel/templates/largefile/create.tmpl
    trunk/vhffs-panel/templates/largefile/menu.tmpl
    trunk/vhffs-panel/templates/largefile/menu_sub.tmpl
    trunk/vhffs-panel/templates/largefile/menu_sub_wait.tmpl
    trunk/vhffs-panel/templates/largefile/prefs.tmpl
Modified:
    trunk/Changelog
    trunk/TODO
    trunk/vhffs-api/src/Vhffs/Conf.pm
    trunk/vhffs-api/src/Vhffs/Constants.pm
    trunk/vhffs-api/src/Vhffs/DB.pm
    trunk/vhffs-api/src/Vhffs/Functions.pm
    trunk/vhffs-api/src/Vhffs/Listengine/Listengine.pm
    trunk/vhffs-api/src/Vhffs/Listengine/Panel.pm
    trunk/vhffs-api/src/Vhffs/Main.pm
    trunk/vhffs-api/src/Vhffs/Object.pm
    trunk/vhffs-api/src/Vhffs/Panel/Admin.pm
    trunk/vhffs-api/src/Vhffs/Panel/Main.pm
    trunk/vhffs-api/src/Vhffs/Panel/Menu.pm
    trunk/vhffs-api/src/Vhffs/Robots.pm
    trunk/vhffs-api/src/Vhffs/Stats.pm
    trunk/vhffs-backend/conf/vhffs.conf
    trunk/vhffs-listengine/src/archives/archives.pl
    trunk/vhffs-listengine/src/archives/show_msg.pl
    trunk/vhffs-listengine/src/archives/templates/list_sub.tmpl
    trunk/vhffs-listengine/src/listengine.pl
    trunk/vhffs-panel/acl/view.pl
    trunk/vhffs-panel/admin/moderation.pl
    trunk/vhffs-panel/admin/stats.pl
    trunk/vhffs-panel/mysql/create.pl
    trunk/vhffs-panel/svn/prefs.pl
    trunk/vhffs-panel/templates/admin/main/main.tmpl
    trunk/vhffs-panel/templates/admin/misc/list.tmpl
    trunk/vhffs-panel/templates/admin/misc/moderation.tmpl
    trunk/vhffs-panel/templates/admin/misc/stats.tmpl
    trunk/vhffs-panel/templates/group/info.tmpl
    trunk/vhffs-panel/templates/menu/group.tmpl
    trunk/vhffs-panel/templates/svn/prefs.tmpl

Modified: trunk/Changelog
==============================================================================
--- trunk/Changelog (original)
+++ trunk/Changelog Mon Jan 30 22:46:03 2006
@@ -1,3 +1,38 @@
+VHFFS RC9
+	Julien:
+		- Add nospam and novirus directive
+		- Support for anti-spam and anti-virus ( /!\ data definition changes )
+		- Improve build script
+		- Add some tools in vhffs-tools
+		- Modify MailUser to support nospam and novirus directive
+		- Fix bots bugs
+		- Bots uses now lockfiles
+		- Bots now logs error on /var/log/vhffs.log
+		- Begin to release Jabber driver for VHFFS
+		- Add vhffs-modobot (an IRC bot that refuse/accept request on platform
+		  on IRC with chat messages)
+		- Bugfixes on API
+		- Bugfixes on Panel
+		- Bugfixes on bot
+		- Fix MAJOR bug on ACL
+		- Fix bug in parse_httplog robot
+		- Add language support in archives for listengine
+		- Fix bug in postgres/dns admin menu
+		- Add preferences for largefile
+		- Can now view largefile preferences
+		- Can now delete a largefile in the panel
+		- ACL for largefile now works
+		- Admin for largefile works now
+		- Largefile search now works
+		- Moderators can list largefile objects
+		- Add perldoc documentation
+		- Robots uses lockfile only if use_logging are set to "yes" in config
+		  file and lockfile is defined.
+		- Robots use log only if use_logging is set to "yes" in config file
+		  and logfile is defined
+
+
+
 VHFFS RC3
 	Julien:
 	    - add blanked passwords for MySQL (adding security)

Modified: trunk/TODO
==============================================================================
--- trunk/TODO (original)
+++ trunk/TODO Mon Jan 30 22:46:03 2006
@@ -1,2 +1,5 @@
-- add admin part for mailinglist
-- enlever toutes les références en dur à tuxfamily (et au domaine de l'hébergé)
+- improve listengine
+- improve archives format for listengine
+- improve panel, see ajax or css design
+- remove symlink of vhffs-listengine to vhffs-panel
+

Modified: trunk/vhffs-api/src/Vhffs/Conf.pm
==============================================================================
--- trunk/vhffs-api/src/Vhffs/Conf.pm (original)
+++ trunk/vhffs-api/src/Vhffs/Conf.pm Mon Jan 30 22:46:03 2006
@@ -41,10 +41,6 @@
 {
     my $conf;
     
-
-#    $conf = new Config::General( 
-    #			 -ConfigFile => $filename , 
-    #	 );
     $conf = new Config::General( 
 				 -ConfigFile => $filename ,
 				 );
@@ -218,6 +214,12 @@
 }
 
 
+sub use_largefile
+{
+	return -1 if( ! defined $Config{"global"}{"modules"}{'use_largefile'} );
+	return 1 if( $Config{"global"}{"modules"}{'use_largefile'} eq "yes");
+	return 0;
+}
 
 sub use_mail
 {
@@ -753,5 +755,46 @@
 }
 
 
+sub robots_logging
+{
+	if( $Config{"robots"}{"use_logging"} )
+	{
+		if( $Config{"robots"}{"use_logging"} eq "yes" )
+		{
+			return 1;
+		}
+	}
+	return 0;
+}
+
+sub robot_logfile
+{
+	if( defined $Config{"robots"}{"logfile"} )
+	{
+		return( $Config{"robots"}{"logfile"} );
+	}
+	return undef;
+}
+
+sub robots_locking
+{
+	if( $Config{"robots"}{"use_lock"} )
+	{
+		if( $Config{"robots"}{"use_lock"} eq "yes" )
+		{
+			return 1;
+		}
+	}
+	return 0;
+}
+
+sub robot_lockfile
+{
+	if( defined $Config{"robots"}{"lockfile"} )
+	{
+		return( $Config{"robots"}{"lockfile"} );
+	}
+	return undef;
+}
 
 1;

Modified: trunk/vhffs-api/src/Vhffs/Constants.pm
==============================================================================
--- trunk/vhffs-api/src/Vhffs/Constants.pm (original)
+++ trunk/vhffs-api/src/Vhffs/Constants.pm Mon Jan 30 22:46:03 2006
@@ -49,5 +49,70 @@
     ML_RIGHT_SUB_WAITING_FOR_DEL   => 12,
 };
 
+1;
 
-1;
+__END__
+
+=head1 SYNOPSIS
+
+Vhffs::Constants - Constants for VHFFS
+
+=head1 DESCRIPTION
+
+Vhffs::Constants if a class that defined all constants values in VHFFS.
+So, you can use Vhffs::Constants::ConstantName to get the value of CosntantName.
+
+=head1 CONSTANTS
+	
+=head2 WAITING_FOR_VALIDATION
+
+=head2 VALIDATION_REFUSED
+
+=head2 WAITING_FOR_CREATION
+
+=head2 CREATING_ERROR
+
+=head2 CREATED
+
+=head2 ACTIVATED
+
+=head2 SUSPENDED
+
+=head2 SUSPENDED_BEFORE_DELETED
+
+=head2 WAITING_FOR_MODIFICATION
+
+=head2 MODIFICATION_ERROR
+
+=head2 MODIFICATION_APPLIED
+
+=head2 TO_DELETE
+
+=head2 DEFAULT_THEME
+
+=head2 ML_RIGHT_SUB_WAITING_FOR_REPLY
+
+=head2 ML_RIGHT_SUB
+
+=head2 ML_RIGHT_ADMIN
+
+=head2 ML_RIGHT_SUB_WAITING_FOR_DEL
+
+=head2 WEBDIR
+
+=head2 CVSDIR
+
+=head2 USER_NORMAL
+
+=head2 USER_ADMIN
+
+=head2 USER_MODERATOR
+	
+
+=head1 AUTHOR
+	
+	Julien Delange <julien at gunnm dot org>
+
+=head1 COPYRIGHT
+
+	Julien Delange <julien at gunnm dot org>

Modified: trunk/vhffs-api/src/Vhffs/DB.pm
==============================================================================
--- trunk/vhffs-api/src/Vhffs/DB.pm (original)
+++ trunk/vhffs-api/src/Vhffs/DB.pm Mon Jan 30 22:46:03 2006
@@ -46,3 +46,47 @@
 }
 
 1;
+
+
+__END__
+
+=head1 NAME
+
+Vhffs::DB - handle Database connection
+
+=head1 SYNOPSIS
+	
+	use Vhffs::DB;
+	$db = new Vhffs::DB;
+
+	now:
+	
+		* $db->{'DB_READ'} is a DBI object for read database
+
+		* $db->{'DB_WRITE'} is a DBI object for write database
+
+	Typical use :
+	use Vhffs::Main;
+	$vhffs = init Vhffs::Main;
+	
+	$db = $vhffs->get_db_object();
+
+=head1 DESCRIPTION
+
+This class should not be used in standalone mode, you should use it
+through the Vhffs::Main class.
+
+The Vhffs::DB class has two connections to the database : one for
+read-only, one for write.
+
+=head1 METHODS
+
+	new() : create datatabase connections
+
+=head1 AUTHOR
+	
+	Julien Delange <dieu at gunnm dot org>
+
+=head1 COPYRIGHT
+
+	Copyright 2005 Julien Delange

Modified: trunk/vhffs-api/src/Vhffs/Functions.pm
==============================================================================
--- trunk/vhffs-api/src/Vhffs/Functions.pm (original)
+++ trunk/vhffs-api/src/Vhffs/Functions.pm Mon Jan 30 22:46:03 2006
@@ -91,6 +91,13 @@
     $string =~ s/\Q//g;
 
     return ( $string  );
+}
+
+sub addslashes
+{
+	my $string = shift;
+
+	return( quotemeta( $string ) );
 }
 
 

Modified: trunk/vhffs-api/src/Vhffs/Listengine/Listengine.pm
==============================================================================
--- trunk/vhffs-api/src/Vhffs/Listengine/Listengine.pm (original)
+++ trunk/vhffs-api/src/Vhffs/Listengine/Listengine.pm Mon Jan 30 22:46:03 2006
@@ -119,7 +119,9 @@
     my $result;
     my $hash;
     my $mail;
-    
+   	my $header; 
+	my $mid;
+
     return undef if( ! defined ( $year ) );
     return undef if( ! ( $year =~ /^[0-9]+$/ ) );
     return undef if( ! defined ( $month ) );
@@ -136,20 +138,32 @@
 
     foreach $file ( @msg )
     {
-	next if( ( $file eq '.') || ( $file eq '..' ) );
+		next if( ( $file eq '.') || ( $file eq '..' ) );
 	
-	if( -f $dir.'/'.$file )
-	{
-	    
-	    $hash = Digest::MD5::md5_hex( $file );
-	    $mail = fetch_mail_from_file( $dir.'/'.$file );
-	    $result->{$hash} = $mail if( defined $mail );
-	}
-	
-
-    }
-
-    return( $result );
+		if( -f $dir.'/'.$file )
+		{
+		    $hash = Digest::MD5::md5_hex( $file );
+		    $mail = fetch_mail_from_file( $dir.'/'.$file );
+			$header = $mail->get('In-Reply-to');
+			( $header ) = ( ( $header) =~  /<(.+)>/ ) if( defined $header);
+			( $mid ) = ( $mail->get('Message-Id') =~  /<(.+)>/ );
+			if( defined( $header ) )
+			{
+				$mail->{'first'} = 0;
+				$mail->{''} = 1;
+				$mail->{'reference'} = $header;
+			}
+			else
+			{
+				$mail->{'first'} = 1;
+			}
+			$mail->{'treated'} = 0;
+			$mail->{'mid'} = $mid;
+		    $result->{$hash} = $mail if( defined $mail );
+		}
+    }
+
+    return( \$result );
 }
 
 sub fetch_mail_from_file

Modified: trunk/vhffs-api/src/Vhffs/Listengine/Panel.pm
==============================================================================
--- trunk/vhffs-api/src/Vhffs/Listengine/Panel.pm (original)
+++ trunk/vhffs-api/src/Vhffs/Listengine/Panel.pm Mon Jan 30 22:46:03 2006
@@ -79,5 +79,37 @@
     return $theme;
 }
 
+sub cook_lang
+{
+        use CGI;
+        my $vhffs;
+        my $cgi;
+        my $cookie;
+        my $lang;
+
+        $vhffs = shift;
+        $cgi = new CGI;
+
+        if( $cgi->param( "lang" ) )
+        {
+                $lang = $cgi->param( "lang" );
+                $cookie = CGI->cookie(	-name	=>	"lang" ,
+				 						-expires => "+1y",
+										-value	=>	$lang );
+        }
+        elsif( CGI->cookie( "lang" ) )
+        {
+                $lang = CGI->cookie( "lang" );
+        }
+        else
+        {
+                $lang = "en_US";
+        }
+        setlocale(LC_ALL, $lang );
+        bindtextdomain("vhffs", $vhffs->get_config->get_intldir);
+        textdomain("vhffs");
+        return $cookie;
+}
+
 
 1;

Modified: trunk/vhffs-api/src/Vhffs/Main.pm
==============================================================================
--- trunk/vhffs-api/src/Vhffs/Main.pm (original)
+++ trunk/vhffs-api/src/Vhffs/Main.pm Mon Jan 30 22:46:03 2006
@@ -92,7 +92,23 @@
 
 =head1 DESCRIPTION
 
+The Vhffs::Main object is VERY important on VHFFS platform. When you
+invoke init Vhffs::Main, it creates a Vhffs::Main object, so : 
+
+	- It creates connections to backend
+
+	- Read configuration and create a Vhffs::Conf object
+
+The utility of this object if to have a Db connection and the config
+in one object.
+
 =head1 METHODS
+
+init() : initialize the object
+
+get_config() : Return a Vhffs::Conf object
+
+get_db_object : Return a Vhffs::DB object
 
 =head1 SEE ALSO
 Vhffs::User, Vhffs::Group
@@ -103,5 +119,5 @@
 
 =head1 COPYRIGHT
 
-	Copyright 2004 by Julien Delange
+	Copyright 2005 by Julien Delange
 

Modified: trunk/vhffs-api/src/Vhffs/Object.pm
==============================================================================
--- trunk/vhffs-api/src/Vhffs/Object.pm (original)
+++ trunk/vhffs-api/src/Vhffs/Object.pm Mon Jan 30 22:46:03 2006
@@ -300,7 +300,7 @@
 sub set_description
 {
 	my ($self , $value) = @_;
-	$self->{'description'} = quotemeta $value;
+	$self->{'description'} = quotemeta( $value );
 }
 
 
@@ -421,4 +421,134 @@
 
 1;
 			    
-
+__END__
+
+=head1 SYNOPSIS
+
+Vhffs::Object - The generic object type in VHFFS
+
+=head1 DESCRIPTION
+
+The Vhffs::Object type is the base of each Vhffs::Services::*, Vhffs::User
+or Vhffs::Group objects. So, you never have to create an instance of Vhffs::Object
+, this class is only use as a super-class for services (or user or group).
+
+So, the method of Vhffs::Object can be applied to all class which inherit of it.
+Commonly, you can have all the history of an object with a method, get the status
+of a service, ...
+
+This type stored informations about state, history, owner group/user.
+
+=head1 METHODS
+
+=head2 new( Vhffs::Main , 1 , '401')
+
+Create an instance of Vhffs::Object. Typically, this method is onvoked is the new method of inherited class. It creates an object, with a fixed object-id (arg 2) and the owner from uid (arg3).
+The first argument is a Vhffs::Main object.
+Return undef if failed.
+
+=head2 get_main( )
+
+This method returns the Vhffs::Main object contained in this object.
+This method can be useful if you have an object and you need a Vhffs::Main instance.
+
+=head2 delete( )
+
+Delete the object. This method is called from inherited class.
+Note that it destroy the object-part (history, ...), but not the inherited class.
+Returns negative value if fails, positive if success.
+
+=head2 commit( )
+
+Apply all changes that were made on this object. Returns negative value if failed, positive if success.
+
+=head2 fetch( )
+
+Get informations for this object from the database. Typically, you create an instance of Vhffs::Object with a valid object-id and when you call fetch, it takes all informations about this object in the database according to the object-id.
+
+=head2 fetch_object( )
+Same as fetch()
+
+=head2 get_owner_uid( )
+
+Returns the uid that own this Object.
+
+=head2 modify( $field , $value )
+
+Modify a propertiy of this object. For example, modify( "description" , "my_description") will change the description of this Object. If you want update those modified informations on the database, you need to call commit() to update informations in the database. Note that you never had to change object-id of an object.
+
+=head2 get_date( )
+
+Returns the date of the creation for this object.
+
+=head2 get_oid( )
+
+Returns the object_id of this Object.
+
+=head2 get_description( )
+
+Returns the description of this object.
+
+=head2 set_owner( )
+
+Change the uid of the owner of this object.
+
+=head2 get_status( )
+
+Get the status of this object. The status are given in the Vhffs::Constants class.
+
+=head2 set_status( )
+
+Change the status of an object. The status are available as constants in Vhffs::Constants class. When you change the status of an object, a message is added in its history.
+
+=head2 set_description( $string )
+
+Change the description of an object. As all accessors, you need to call commit() method after.
+
+=head2 add_history( $string )
+
+Add a message in the object's history.
+
+=head2 get_history( )
+
+Returns an hashref that represent the history of this object. This object has as key the date of each history message. For exemple :
+
+$history = $object->get_history();
+
+if( defined $history )
+
+{
+
+	foreach $key ( keys %{$history} )
+
+	{
+
+		print "At date " . $key . " message: " . $history->{$key}{'message'};
+
+	}
+
+}
+
+=head2 get_group( )
+
+Returns the Vhffs::Group instance that own this object. Returns undef is fails.
+
+=head2 get_user( )
+
+Returns the Vhffs::User instance that own this object. Returns undef is fails.
+
+=head2 getall( Vhffs::Main , $name )
+
+The getall is very important and defined in every service. In Vhffs::Object,
+it returns all object if $name is not defined (undef). Return all objects that matches with $name if $name is defined.
+
+=head1 SEE ALSO
+Vhffs::Constants Vhffs::User Vhffs::Group
+
+=head1 AUTHOR
+
+	Julien Delange <julien at gunnm dot org>
+
+=head1 COPYRIGHT
+
+	Julien Delange <julien at gunnm dot org>

Modified: trunk/vhffs-api/src/Vhffs/Panel/Admin.pm
==============================================================================
--- trunk/vhffs-api/src/Vhffs/Panel/Admin.pm (original)
+++ trunk/vhffs-api/src/Vhffs/Panel/Admin.pm Mon Jan 30 22:46:03 2006
@@ -11,7 +11,6 @@
 use HTML::Template;
 use locale;
 use Locale::gettext;
-use Data::Dumper;
 use CGI;
 use CGI::Session;
 use strict;
@@ -188,7 +187,20 @@
     }
     else
     {
-        $template->param( ADMIN_POSTGRESQL => "" );
+        $template->param( ADMIN_DNS => "" );
+    }
+
+    if( $vhffs->get_config->use_largefile == 1 )
+    {
+        $subtemplate = new HTML::Template( filename => "$templatesdir/admin/largefile/menu.tmpl" );
+        $subtemplate->param( TEXT_ADMIN_LARGEFILE => gettext( "Hosted files admin" ) );
+        $subtemplate->param( TEXT_LIST_LARGEFILE => gettext( "List all hosted files" ) );
+        $subtemplate->param( TEXT_SEARCH_LARGEFILE => gettext( "Search for a file" ) );
+        $template->param( ADMIN_LARGEFILE  => $subtemplate->output );
+    }
+    else
+    {
+        $template->param( ADMIN_LARGEFILE => "" );
     }
 
 	return $template->output;

Modified: trunk/vhffs-api/src/Vhffs/Panel/Main.pm
==============================================================================
--- trunk/vhffs-api/src/Vhffs/Panel/Main.pm (original)
+++ trunk/vhffs-api/src/Vhffs/Panel/Main.pm Mon Jan 30 22:46:03 2006
@@ -6,7 +6,6 @@
 use HTML::Template;
 use locale;
 use Locale::gettext;
-use Data::Dumper;
 use CGI;
 use CGI::Session;
 use strict;
@@ -402,6 +401,31 @@
 	}
 
 
+	if( $vhffs->get_config->use_largefile == 1 )
+	{
+		use Vhffs::Services::LargeFile;
+		$temp = "";
+		$template->param( LARGEFILE => gettext("Hosted files for this group") );
+		$objects = Vhffs::Services::LargeFile::getall( $vhffs , undef , undef , $group );
+		if( defined $objects )
+		{	
+			foreach $object ( @{$objects} )
+			{
+				$subtemplate = new HTML::Template( filename => $templatedir."/misc/group_service.tmpl" );
+				$subtemplate->param( SERVICE  => "largefile" );
+				$subtemplate->param( VALUE  => $object->get_filename );
+				$subtemplate->param( TEXT  => gettext("Go to admin") );
+				$subtemplate->param( HISTORY  => gettext("View history") );
+				$subtemplate->param( OID  => $object->get_oid );
+				$temp .= $subtemplate->output;
+			}
+		}
+		else
+		{
+			$temp = gettext("No hosted files for this group");
+		}
+		$template->param( LARGEFILE_VALUES => $temp );
+	}
 
 	if( $vhffs->get_config->use_dns == 1 )
 	{

Modified: trunk/vhffs-api/src/Vhffs/Panel/Menu.pm
==============================================================================
--- trunk/vhffs-api/src/Vhffs/Panel/Menu.pm (original)
+++ trunk/vhffs-api/src/Vhffs/Panel/Menu.pm Mon Jan 30 22:46:03 2006
@@ -21,6 +21,7 @@
 use Vhffs::Panel::DNS;
 use Vhffs::Panel::Mail;
 use Vhffs::Panel::Mailinglist;
+use Vhffs::Panel::LargeFile;
 
 sub new
 {
@@ -31,6 +32,7 @@
 	my $user = $data->{'user'};
 	my $cgi = $data->{'cgi'};
     my $templatedir = $vhffs->get_config->get_templatedir;
+	my $menu;
 
 	my $menutemplate = new HTML::Template( filename => $templatedir."/menu/main.tmpl" );
 	$menutemplate->param( THEME		     => Vhffs::Panel::User::get_theme( $user ) );
@@ -137,6 +139,12 @@
 			$projecttemplate->param( MAILINGLIST_MENU => $mailingmenu );
 		}
 
+		if( $vhffs->get_config->use_largefile == 1 )
+		{
+			$menu = menu Vhffs::Panel::LargeFile($data);
+			$projecttemplate->param( LARGEFILE_MENU => $menu );
+		}
+
 		$menutemplate->param( PROJECT_MENU => $projecttemplate->output );
 	}
 

Modified: trunk/vhffs-api/src/Vhffs/Robots.pm
==============================================================================
--- trunk/vhffs-api/src/Vhffs/Robots.pm (original)
+++ trunk/vhffs-api/src/Vhffs/Robots.pm Mon Jan 30 22:46:03 2006
@@ -12,25 +12,63 @@
 
 sub lock
 {
-	LockFile::Simple::lock( LOCKFILE ) or exit( 1 );
+	my $vhffs = shift;
+	my $lockfile = LOCKFILE;
+	if( defined $vhffs )
+	{
+		if( $vhffs->get_config->use_locking == 1 )
+		{
+			$lockfile = $vhffs->get_config->robot_lockfile;
+			if( ! defined( $lockfile ) )
+			{
+				$lockfile = LOCKFILE;
+			}
+			LockFile::Simple::lock( $lockfile ) or exit( 1 );
+		}
+	}
 	return 0;
 }
 
 sub unlock
 {
-	LockFile::Simple::unlock( LOCKFILE );
+	my $vhffs;
+	my $lockfile;
+
+	$vhffs = shift;
+	$lockfile = LOCKFILE;
+
+	if( defined $vhffs )
+	{
+		if( $vhffs->get_config->use_locking == 1 )
+		{
+			$lockfile = $vhffs->get_config->robot_lockfile;
+			if( ! defined( $lockfile ) )
+			{
+				$lockfile = LOCKFILE;
+			}
+			LockFile::Simple::unlock( $lockfile );
+		}
+	}
 	return 0;
 }
 
 sub vhffs_log
 {
 	my $sent = shift;
-	my $file = LOGFILE;
-	open( FILE , ">>$file" ) or return -1;
-	
-	print FILE $sent."\n";
-	close FILE ;
-
+	my $vhffs = shift;
+	my $logfile = LOGFILE;
+	if( defined $vhffs )
+	{
+		if( $vhffs->get_config->robots_logging == 1 )
+		{
+			$logfile = $vhffs->get_config->robots_logfile;
+			$logfile = LOGFILE if( ! ( defined $logfile ) );
+			open( FILE , ">>$logfile" ) or return -1;
+			print FILE $sent."\n";
+			close FILE ;
+		}
+	}
+	return 0;
 }
 
 sub link_to_group
@@ -66,3 +104,45 @@
 }
 
 1;
+
+__END__
+
+=head1 NAME
+
+Vhffs::Robots - common interface for VHFFS Robots
+
+=head1 SYNOPSIS
+
+	use Vhffs::Robots;
+
+	Vhffs::Robots::link_to_group( "/path/to" , Vhffs::Group , "linkname" , Vhffs::Main);
+
+	Vhffs::Robots::unlink_to_group( Vhffs::Group , "linkname" , Vhffs::Main);
+
+	Vhffs::Robots::lock();
+
+	Vhffs::Robots::unlock();
+
+	Vhffs::Robots::vhffs_log( "My log message" );
+
+=head1 DESCRIPTION
+
+This class contains static methods commonly used by VHFFS robots.
+
+=head1
+
+lock() : Creates a lockfile. Other process that call lock method are stalled until unlock is created.
+
+unlock() : Delete the lock file. Other process, whose are stalled due to the lock file can continue the execution
+
+link_to_group() : create a symlink from a directory to a group directory.
+
+unlink_to_group() : unlink a symlink in a group directory
+
+=head1 AUTHOR
+
+	Julien Delange <julien at gunnm dot org>
+
+=head1 COPYRIGHT
+
+	(c) Julien Delange

Modified: trunk/vhffs-api/src/Vhffs/Stats.pm
==============================================================================
--- trunk/vhffs-api/src/Vhffs/Stats.pm (original)
+++ trunk/vhffs-api/src/Vhffs/Stats.pm Mon Jan 30 22:46:03 2006
@@ -152,8 +152,6 @@
     $result = $self->{'db'}->{'DB_READ'}->selectall_arrayref( $query );
     $self->{'pgsql'}{'waited_creation'} = $result->[0][0] if ( defined $result->[0][0] );
 
-
-
     $query = "SELECT COUNT(*) FROM vhffs_svn w, vhffs_object o WHERE o.object_id=w.object_id AND o.state='".Vhffs::Constants::ACTIVATED."'";
     $result = $self->{'db'}->{'DB_READ'}->selectall_arrayref( $query );
     $self->{'svn'}{'activated'} = $result->[0][0] if ( defined $result->[0][0] );
@@ -185,6 +183,24 @@
     $query = "SELECT COUNT(*) FROM vhffs_ml_subscribers";
     $result = $self->{'db'}->{'DB_READ'}->selectall_arrayref( $query );
     $self->{'lists'}{'totalsubs'} = $result->[0][0] if ( defined $result->[0][0] );
+   
+
+    $query = "SELECT COUNT(*) FROM vhffs_largefile lf, vhffs_object o WHERE o.object_id=lf.object_id AND o.state='".Vhffs::Constants::ACTIVATED."'";
+    $result = $self->{'db'}->{'DB_READ'}->selectall_arrayref( $query );
+    $self->{'largefile'}{'activated'} = $result->[0][0] if ( defined $result->[0][0] );
+    
+    $query = "SELECT COUNT(*) FROM vhffs_largefile lf , vhffs_object o WHERE o.object_id=ls.object_id AND o.state='".Vhffs::Constants::WAITING_FOR_VALIDATION."'";
+    $result = $self->{'db'}->{'DB_READ'}->selectall_arrayref( $query );
+    $self->{'largefile'}{'waited_validation'} = $result->[0][0] if ( defined $result->[0][0] );
+    
+    $query = "SELECT COUNT(*) FROM vhffs_largefile lf , vhffs_object o WHERE o.object_id=lf.object_id AND o.state='".Vhffs::Constants::WAITING_FOR_CREATION."'";
+    $result = $self->{'db'}->{'DB_READ'}->selectall_arrayref( $query );
+    $self->{'largefile'}{'waited_creation'} = $result->[0][0] if ( defined $result->[0][0] );
+
+
+    $query = "SELECT COUNT(*) FROM vhffs_largefile lf , vhffs_object o WHERE o.object_id=lf.object_id";
+    $result = $self->{'db'}->{'DB_READ'}->selectall_arrayref( $query );
+    $self->{'largefile'}{'total'} = $result->[0][0] if ( defined $result->[0][0] );
 
     return 1;
 }
@@ -309,12 +325,31 @@
     return $self->{'svn'}{'waited_validation'};
 }
 
+
+sub get_largefile_in_moderation
+{
+    my $self = shift;
+    return $self->{'largefile'}{'waited_validation'};
+}
+
+sub get_largefile_total
+{
+    my $self = shift;
+    return $self->{'largefile'}{'total'};
+}
+
 sub get_svn_activated
 {
     my $self = shift;
     return $self->{'svn'}{'activated'};
 }
 
+sub get_largefile_activated
+{
+    my $self = shift;
+    return $self->{'largefile'}{'activated'};
+}
+
 
 sub get_mysql_in_moderation
 {

Modified: trunk/vhffs-backend/conf/vhffs.conf
==============================================================================
--- trunk/vhffs-backend/conf/vhffs.conf (original)
+++ trunk/vhffs-backend/conf/vhffs.conf Mon Jan 30 22:46:03 2006
@@ -90,16 +90,6 @@
 
 
 ################################################
-# HOST CONFIGURATION
-################################################
-<host>
-	local_ip=
-	uid=
-	gid=
-</host>
-
-
-################################################
 # USERS AND GROUPS
 ################################################
 #the default configuration for users
@@ -121,9 +111,6 @@
 </users>
 
 
-################################################
-# SYSTEM
-################################################
 
 <system>
 	<shells>
@@ -216,3 +203,11 @@
 		templatesdir	=	""
 	</listengine>
 </services>
+
+<robots>
+	use_logging = yes
+	logfile = /var/log/vhffs.log
+	use_lock = yes
+	lockfile = /var/lock/vhffslock
+</robots>
+	

Modified: trunk/vhffs-listengine/src/archives/archives.pl
==============================================================================
--- trunk/vhffs-listengine/src/archives/archives.pl (original)
+++ trunk/vhffs-listengine/src/archives/archives.pl Mon Jan 30 22:46:03 2006
@@ -16,15 +16,50 @@
 use Vhffs::Listengine::Intl;
 use Vhffs::Listengine::Panel;
 
+
+sub recursive_msg
+{
+	my $templatedir = shift;
+	my $key = shift;
+	my $msgs = shift;
+	my $list = shift;
+	my $retour;
+	my $subtemplate;
+	my $message;
+	my $v;
+	foreach $v ( keys %{$$msgs} )
+	{
+	    $message = $$msgs->{$v};
+		if( ( $message->{'treated'} == 0 ) && ( $message->{'mid'} eq $key ) )
+		{
+		    $subtemplate = new HTML::Template( filename => $templatedir."/list_sub.tmpl");
+		    $subtemplate->param( LISTNAME => "toto" );
+		    $subtemplate->param( TEXT_VIEW => gettext("View") );
+		    $subtemplate->param( MSG_ID => $v );
+		
+		    $subtemplate->param( MSG_SUBJECT => $message->{'mid'} . $message->get('Subject'));
+		    $subtemplate->param( MSG_FROM => $message->get('From'));
+		    $subtemplate->param( ANSWERS => recursive_msg( $templatedir , $key , $msgs ));
+		    $retour .= $subtemplate->output;
+			$message->{'treated'} = 1;
+			$$msgs->{$v} = $message;
+		}
+	}
+	return( $retour );
+}
+
+
 my $template;
 my $mail;
 my $vhffs = init Vhffs::Main;
 my $archives;
 my $subtemplate;
 
-my $cookie = Vhffs::Panel::Main::cook_lang( $vhffs );
 
 my $cgi = new CGI;
+
+
+#On récupère les paramètres
 my $listname = $cgi->param("list");
 my $day = $cgi->param("day");
 my $month = $cgi->param("month");
@@ -33,6 +68,10 @@
 my $changetheme = $cgi->param("changetheme");
 my $changelang = $cgi->param("changelang");
 
+my $cooklang = Vhffs::Listengine::Panel::cook_lang( $vhffs );
+
+
+#On obtient le domaine, le local part et on construit l'objet de la liste
 my( $lpart , $domain ) = split/\@/,$listname,2;
 my $list = new Vhffs::Services::Mailing( $vhffs , $lpart , $domain );
 my $templatedir = $vhffs->get_config->get_listengine_templatesdir;
@@ -94,18 +133,24 @@
 
 	my $msgs = Vhffs::Listengine::Listengine::get_messages_in_a_day( $list , $year , $month , $day );
 	my $message;
-	
-	foreach ( keys %{$msgs} )
-	{
-	    $message = $msgs->{$_};
-	    $subtemplate = new HTML::Template( filename => $templatedir."/list_sub.tmpl");
-	    $subtemplate->param( LISTNAME => $list->get_listname );
-	    $subtemplate->param( TEXT_VIEW => gettext("View") );
-	    $subtemplate->param( MSG_ID => $_ );
-
-	    $subtemplate->param( MSG_SUBJECT => $message->get('Subject'));
-	    $subtemplate->param( MSG_FROM => $message->get('From'));
-	    $retour .= $subtemplate->output;
+	my $key;	
+	foreach $key ( keys %{$$msgs} )
+	{
+	    $message = ${$msgs}->{$key};
+		if( $message->{'treated'} == 0 )
+		{
+		    $subtemplate = new HTML::Template( filename => $templatedir."/list_sub.tmpl");
+		    $subtemplate->param( LISTNAME => $list->get_listname );
+		    $subtemplate->param( TEXT_VIEW => gettext("View") );
+		    $subtemplate->param( MSG_ID => $key );
+		
+		    $subtemplate->param( MSG_SUBJECT => $message->get('Subject'));
+		    $subtemplate->param( MSG_FROM => $message->get('From'));
+#		    $subtemplate->param( ANSWERS => recursive_msg( $templatedir , $message->{'mid'} , $msgs , $list ));
+		    $retour .= $subtemplate->output;
+			$message->{'treated'} = 1;
+			$$msgs->{$key} = $message;
+		}
 	}
 	$template->param( MAIN => $retour );
     }
@@ -166,11 +211,6 @@
 	$template->param( VALUE_LISTNAME => $list->get_listname );
 	$template->param( TITLE_ARCHIVES => gettext("Archives") );
 	$template->param( THEME_NAME => $theme );
-	#$template->param( TEXT_SUBMIT_THEME => gettext( "Change theme" ) );
-	#$template->param( TEXT_SUBMIT_LANG => gettext( "Change language" ) );
-	
-	#$template->param( PREFS_THEME => Vhffs::Listengine::Panel::create_themes_select( $vhffs ) );
-	#$template->param( PREFS_LANG => Vhffs::Listengine::Panel::create_lang_select( $vhffs ) );
 
 	create_prefs_div( $template );
 	
@@ -191,5 +231,15 @@
 }
 
 
-
-print "Content-Type: text/html; charset=utf-8\n\n".$template->output;
+if( $cooklang )
+{
+	print CGI::header( -cookie=>$cooklang,
+						-type => "text/html",
+						-charset	=> "utf-8"
+						);
+	print $template->output;
+}
+else
+{
+	print "Content-Type: text/html; charset=utf-8\n\n".$template->output;
+}

Modified: trunk/vhffs-listengine/src/archives/show_msg.pl
==============================================================================
--- trunk/vhffs-listengine/src/archives/show_msg.pl (original)
+++ trunk/vhffs-listengine/src/archives/show_msg.pl Mon Jan 30 22:46:03 2006
@@ -79,8 +79,11 @@
     
     foreach ( @{$mail->body} )
 	{
-	utf8::encode( $_ );
-	$body .=  $_  ."<br>";
+		if( ! utf8::is_utf8( $_ ) )
+		{
+			utf8::encode( $_ );
+		}
+		$body .=  $_  ."<br>";
     }
     $template = new HTML::Template( filename => $templatedir."/showmsg.tmpl");
     $template->param( TITLE => sprintf( gettext( "Message from list %s" ) , $list->get_listname ) );

Modified: trunk/vhffs-listengine/src/archives/templates/list_sub.tmpl
==============================================================================
--- trunk/vhffs-listengine/src/archives/templates/list_sub.tmpl (original)
+++ trunk/vhffs-listengine/src/archives/templates/list_sub.tmpl Mon Jan 30 22:46:03 2006
@@ -3,4 +3,7 @@
 	<a href="show_msg.pl?list=<TMPL_VAR NAME="LISTNAME">&mid=<TMPL_VAR NAME="MSG_ID">">
 		<TMPL_VAR NAME="TEXT_VIEW">
 	</a>
+	<ul>
+	<TMPL_VAR NAME="ANSWERS">
+	</ul>
 </li>

Modified: trunk/vhffs-listengine/src/listengine.pl
==============================================================================
--- trunk/vhffs-listengine/src/listengine.pl (original)
+++ trunk/vhffs-listengine/src/listengine.pl Mon Jan 30 22:46:03 2006
@@ -89,6 +89,9 @@
 	push @tos , $addrs;
    }
 
+use Data::Dumper;
+print Dumper $mail;
+return;
 	foreach $adr (@tos)
 	{
 		$smtp = Net::SMTP->new( $SMTP_SERVER,
@@ -99,6 +102,7 @@
 		$smtp->mail( $mail->get('From') );
 		$smtp->to( $adr );
 		$smtp->data( $mail->as_string );
+		$smtp->quit;
 	}
 }
 

Modified: trunk/vhffs-panel/acl/view.pl
==============================================================================
--- trunk/vhffs-panel/acl/view.pl (original)
+++ trunk/vhffs-panel/acl/view.pl Mon Jan 30 22:46:03 2006
@@ -33,6 +33,7 @@
 my $name = $cgi->param("NAME");
 my $template;
 
+my $message;
 my $object;
 my $ok = 1;
 my $title;
@@ -80,12 +81,16 @@
 	my( $lpart , $domain ) = split( /\@/ , $name );
 	$object = new Vhffs::Services::Mailing( $vhffs , $lpart , $domain );
 }
+elsif( $type eq "largefile" )
+{
+	$object = new Vhffs::Services::LargeFile( $vhffs , $name , $user , $group );
+}
 else
 {
 	#If the type was not found, we juste print an error
 	$ok = 0;
 	$template = new HTML::Template( filename => $templatedir."/misc/simplemsg.tmpl" );
-	my $message = gettext( "This type of object is not treated in the panel.");
+	$message = gettext( "This type of object is not treated in the panel.");
 	$template->param( MESSAGE => $message );
 }
 
@@ -95,14 +100,14 @@
 	if( ( ! defined $object ) || ( $object->fetch < 0 ) )
 	{
 		$template = new HTML::Template( filename => $templatedir."/misc/simplemsg.tmpl" );
-		my $message = sprintf( gettext("Cannot get informations on this object %s %s"), $type, $name);
+		$message = sprintf( gettext("Cannot get informations on this object %s %s"), $type, $name);
 		$template->param( MESSAGE => $message );
 	
 	}
 	elsif( ( Vhffs::Acl::what_perm_for_user( $user , $object , $vhffs ) < Vhffs::Constants::ACL_VIEW ) && ( $user->is_admin != 1 ) )
 	{
 		$template = new HTML::Template( filename => $templatedir."/misc/simplemsg.tmpl" );
-		my $message = gettext("You're not allowed to view this object's ACL");
+		$message = gettext("You're not allowed to view this object's ACL");
 		$template->param( MESSAGE => $message );
 	}
 	else

Modified: trunk/vhffs-panel/admin/moderation.pl
==============================================================================
--- trunk/vhffs-panel/admin/moderation.pl (original)
+++ trunk/vhffs-panel/admin/moderation.pl Mon Jan 30 22:46:03 2006
@@ -439,6 +439,47 @@
 		}
 	}
 
+	if( $vhffs->get_config->use_largefile == 1 )
+	{
+		use Vhffs::Services::LargeFile;
+		$template->param( TEXT_LARGEFILE => gettext( "Files awaiting validation" ) );
+		my $files = Vhffs::Services::LargeFile::getall( $vhffs , Vhffs::Constants::WAITING_FOR_VALIDATION );
+		$output = "";
+
+		if( defined @{$files} )
+		{
+			foreach $temp ( @{$files} )
+			{
+				my $subtemplate = new HTML::Template( filename => "$templatesdir/admin/misc/moderation_part.tmpl" );
+
+                if( $vhffs->get_config->use_notation == 1 )
+                {
+                	$subtemplate->param( OWNER  => $temp->get_user->get_username);
+					$subtemplate->param( NOTE   => Vhffs::Note::get_note( $vhffs , $temp->get_user ) );
+                    $subtemplate->param( OID_ASKER  => $temp->get_user->get_oid);
+                }
+                else
+                {
+                    $subtemplate->param( OWNER  => $temp->get_user->get_username );
+                }
+
+				$subtemplate->param( NAME	=> $temp->get_filename ."( ".$temp->get_size."Mo,".$temp->get_type." )" );
+				$subtemplate->param( GROUP	=> $temp->get_group->get_groupname );
+				$subtemplate->param( OID	=> $temp->get_oid );
+				$subtemplate->param( DESCRIPTION	=> $temp->get_description );
+				$subtemplate->param( ACCEPT	=> gettext("Accept") );
+				$subtemplate->param( REFUSE	=> gettext("Refuse") );
+				$output.= $subtemplate->output;
+			}
+	
+			$template->param( MODERATION_LARGEFILE => $output );
+		}
+		else
+		{
+			$template->param( MODERATION_LARGEFILE => gettext("No files to validate") );
+		}
+	}
+
 	
 }
 

Modified: trunk/vhffs-panel/admin/stats.pl
==============================================================================
--- trunk/vhffs-panel/admin/stats.pl (original)
+++ trunk/vhffs-panel/admin/stats.pl Mon Jan 30 22:46:03 2006
@@ -125,6 +125,7 @@
 	$template->param( VALUE_TOTAL_PGSQL_ACTIVATED => $stats->get_pgsql_activated );
 	
 
+	#Lists part
 	$template->param( TEXT_LISTS => gettext("Listengine stats") );
 	$template->param( TEXT_TOTAL_LISTS => gettext("Total lists in moderation") );
 	$template->param( VALUE_TOTAL_LISTS => $stats->get_lists_total );
@@ -133,6 +134,13 @@
 	$template->param( TEXT_TOTAL_SUBS => gettext("Total subscribtion for lists") );
 	$template->param( VALUE_TOTAL_SUBS => $stats->get_lists_totalsubs );
 
+	##LargeFile part
+	$template->param( TEXT_LARGEFILE => gettext("Hosted files stats") );
+	$template->param( TEXT_TOTAL_FILES => gettext("Total hoted files") );
+	$template->param( TEXT_TOTAL_FILES_ACTIVATED => gettext("Total activated hoted files") );
+	$template->param( VALUE_TOTAL_FILES => $stats->get_largefile_total );
+	$template->param( VALUE_TOTAL_FILES_ACTIVATED => $stats->get_largefile_activated );
+
 }
 
 display Vhffs::Panel::Main($panel, $template->output);

Modified: trunk/vhffs-panel/mysql/create.pl
==============================================================================
--- trunk/vhffs-panel/mysql/create.pl (original)
+++ trunk/vhffs-panel/mysql/create.pl Mon Jan 30 22:46:03 2006
@@ -38,7 +38,7 @@
 $template->param( DB_NAME => gettext("MySQL database name ") );
 $template->param( DB_PASS => gettext("MySQL password for this database ") );
 $template->param( GROUP => $group->get_groupname );
-$template->param( SEND => gettext("Sent") );
+$template->param( SEND => gettext("Send") );
 $template->param( DESCRIPTION => gettext("Description") );
 
 display Vhffs::Panel::Main($panel, $template->output);

Modified: trunk/vhffs-panel/svn/prefs.pl
==============================================================================
--- trunk/vhffs-panel/svn/prefs.pl (original)
+++ trunk/vhffs-panel/svn/prefs.pl Mon Jan 30 22:46:03 2006
@@ -115,6 +115,16 @@
     	$template->param( NO_SELECTED => "selected" );
 	}
 
+	if( $user->is_admin == 1 )
+	{
+		$subtemplate = new HTML::Template( filename => $templatedir."/admin/misc/opart.tmpl" );
+		$subtemplate->param( OID => $svn->get_oid );
+		$subtemplate->param( OPART_TEXT => gettext("Go to object-part admin") );
+		$subtemplate->param( OPART_TITLE => gettext("Object part") );
+		$template->param( OPART => $subtemplate->output );
+	}
+
+
 }
 
 display Vhffs::Panel::Main($panel, $template->output );

Modified: trunk/vhffs-panel/templates/admin/main/main.tmpl
==============================================================================
--- trunk/vhffs-panel/templates/admin/main/main.tmpl (original)
+++ trunk/vhffs-panel/templates/admin/main/main.tmpl Mon Jan 30 22:46:03 2006
@@ -12,4 +12,5 @@
 	<tmpl_var name="ADMIN_DNS">
 	<tmpl_var name="ADMIN_MAIL">
 	<tmpl_var name="ADMIN_MAILLINGLIST">
+	<tmpl_var name="ADMIN_LARGEFILE">
 </ul>

Modified: trunk/vhffs-panel/templates/admin/misc/list.tmpl
==============================================================================
--- trunk/vhffs-panel/templates/admin/misc/list.tmpl (original)
+++ trunk/vhffs-panel/templates/admin/misc/list.tmpl Mon Jan 30 22:46:03 2006
@@ -1,5 +1,11 @@
 <h1><TMPL_VAR NAME="TITLE"></h1>
 		
 <table>
+		<tr>
+			<td><TMPL_VAR NAME="TEXT_NAME"></td>
+			<td><TMPL_VAR NAME="TEXT_GROUP"></td>
+			<td><TMPL_VAR NAME="TEXT_STATUS"></td>
+			<td></td>
+		</tr>
 		<TMPL_VAR NAME="LIST">
 </table>

Modified: trunk/vhffs-panel/templates/admin/misc/moderation.tmpl
==============================================================================
--- trunk/vhffs-panel/templates/admin/misc/moderation.tmpl (original)
+++ trunk/vhffs-panel/templates/admin/misc/moderation.tmpl Mon Jan 30 22:46:03 2006
@@ -63,4 +63,11 @@
 			<TMPL_VAR NAME="MODERATION_MAILING">
 		</table>
 
+		<h2>
+			<TMPL_VAR NAME="TEXT_LARGEFILE">
+		</h2>
+		<table>	
+			<TMPL_VAR NAME="MODERATION_LARGEFILE">
+		</table>
 
+

Modified: trunk/vhffs-panel/templates/admin/misc/stats.tmpl
==============================================================================
--- trunk/vhffs-panel/templates/admin/misc/stats.tmpl (original)
+++ trunk/vhffs-panel/templates/admin/misc/stats.tmpl Mon Jan 30 22:46:03 2006
@@ -3,265 +3,98 @@
 <h2>
 	<TMPL_VAR NAME="TEXT_USERS">: 
 </h2>
-
-<table>
-<tr>
-	<td class="mainColumn">
-		<TMPL_VAR NAME="TEXT_TOTAL_USERS">: 
-	</td>
-	<td>
-		<TMPL_VAR NAME="VALUE_TOTAL_USERS">
-	</td>
-</tr>
-<tr>
-	<td>
-		<TMPL_VAR NAME="TEXT_TOTAL_USER_ADMIN">: 
-	</td>
-	<td>
-		<TMPL_VAR NAME="VALUE_TOTAL_USER_ADMIN">
-	</td>
-</tr>
-<tr>
-	<td>
-		<TMPL_VAR NAME="TEXT_TOTAL_USER_MODERATION">: 
-	</td>
-	<td>
-		<TMPL_VAR NAME="VALUE_TOTAL_USER_MODERATION">
-	</td>
-</tr>
-</table>
-
+<ul>
+	<li><TMPL_VAR NAME="TEXT_TOTAL_USERS">: <TMPL_VAR NAME="VALUE_TOTAL_USERS"></li>
+	<li><TMPL_VAR NAME="TEXT_TOTAL_USER_ADMIN">: <TMPL_VAR NAME="VALUE_TOTAL_USER_ADMIN"></li>
+	<li><TMPL_VAR NAME="TEXT_TOTAL_USER_MODERATION">: <TMPL_VAR NAME="VALUE_TOTAL_USER_MODERATION"></li>
+</ul>
 
 
 <h2>
 	<TMPL_VAR NAME="TEXT_GROUPS">: 
 </h2>
-
-<table>
-<tr>
-    <td class="mainColumn">
-        <TMPL_VAR NAME="TEXT_TOTAL_GROUPS">:
-    </td>
-    <td>
-        <TMPL_VAR NAME="VALUE_TOTAL_GROUPS">
-    </td>
-</tr>
-<tr>
-    <td>
-        <TMPL_VAR NAME="TEXT_TOTAL_GROUPS_ACTIVATED">:
-    </td>
-    <td>
-        <TMPL_VAR NAME="VALUE_TOTAL_GROUPS_ACTIVATED">
-    </td>
-</tr>
-</table>
+<ul>
+	<li><TMPL_VAR NAME="TEXT_TOTAL_GROUPS">: <TMPL_VAR NAME="VALUE_TOTAL_GROUPS"></li>
+	<li><TMPL_VAR NAME="TEXT_TOTAL_GROUPS_ACTIVATED">: <TMPL_VAR NAME="VALUE_TOTAL_GROUPS_ACTIVATED"></li>
+</ul>
 
 
 <h2>
 	<TMPL_VAR NAME="TEXT_WEB">: 
 </h2>
+<ul>
+	<li><TMPL_VAR NAME="TEXT_TOTAL_WEB_IN_MODERATION">: <TMPL_VAR NAME="VALUE_TOTAL_WEB_IN_MODERATION"></li>
+	<li><TMPL_VAR NAME="TEXT_TOTAL_WEB_ACTIVATED">: <TMPL_VAR NAME="VALUE_TOTAL_WEB_ACTIVATED"></li>
+</ul>
 
-<table>
-<tr>
-	<td class="mainColumn">
-		<TMPL_VAR NAME="TEXT_TOTAL_WEB_IN_MODERATION">: 
-	</td>
-	<td>
-		<TMPL_VAR NAME="VALUE_TOTAL_WEB_IN_MODERATION">
-	</td>
-</tr>
-<tr>
-	<td>
-		<TMPL_VAR NAME="TEXT_TOTAL_WEB_ACTIVATED">: 
-	</td>
-	<td>
-		<TMPL_VAR NAME="VALUE_TOTAL_WEB_ACTIVATED">
-	</td>
-</tr>
-</table>
 
 <h2>
 	<TMPL_VAR NAME="TEXT_DNS">: 
 </h2>
+<ul>
+	<li><TMPL_VAR NAME="TEXT_TOTAL_DNS_IN_MODERATION">: <TMPL_VAR NAME="VALUE_TOTAL_DNS_IN_MODERATION"></li>
+	<li><TMPL_VAR NAME="TEXT_TOTAL_DNS_ACTIVATED">: <TMPL_VAR NAME="VALUE_TOTAL_DNS_ACTIVATED"></li>
+</ul>
 
-<table>
-<tr>
-	<td class="mainColumn">
-		<TMPL_VAR NAME="TEXT_TOTAL_DNS_IN_MODERATION">: 
-	</td>
-	<td>
-		<TMPL_VAR NAME="VALUE_TOTAL_DNS_IN_MODERATION">
-	</td>
-</tr>
-<tr>
-	<td>
-		<TMPL_VAR NAME="TEXT_TOTAL_DNS_ACTIVATED">: 
-	</td>
-	<td>
-		<TMPL_VAR NAME="VALUE_TOTAL_DNS_ACTIVATED">
-	</td>
-</tr>
-</table>
 
 <h2>
 	<TMPL_VAR NAME="TEXT_CVS">: 
 </h2>
+<ul>
+	<li><TMPL_VAR NAME="TEXT_TOTAL_CVS_IN_MODERATION">: <TMPL_VAR NAME="VALUE_TOTAL_CVS_IN_MODERATION"></li>
+	<li><TMPL_VAR NAME="TEXT_TOTAL_CVS_ACTIVATED">: <TMPL_VAR NAME="VALUE_TOTAL_CVS_ACTIVATED"></li>
+</ul>
 
-<table>
-<tr>
-	<td class="mainColumn">
-		<TMPL_VAR NAME="TEXT_TOTAL_CVS_IN_MODERATION">: 
-	</td>
-	<td>
-		<TMPL_VAR NAME="VALUE_TOTAL_CVS_IN_MODERATION">
-	</td>
-</tr>
-<tr>
-	<td>
-		<TMPL_VAR NAME="TEXT_TOTAL_CVS_ACTIVATED">: 
-	</td>
-	<td>
-		<TMPL_VAR NAME="VALUE_TOTAL_CVS_ACTIVATED">
-	</td>
-</tr>
-</table>
 
 <h2>
 	<TMPL_VAR NAME="TEXT_SVN">: 
 </h2>
-
-<table>
-<tr>
-	<td class="mainColumn">
-		<TMPL_VAR NAME="TEXT_TOTAL_SVN_IN_MODERATION">: 
-	</td>
-	<td>
-		<TMPL_VAR NAME="VALUE_TOTAL_SVN_IN_MODERATION">
-	</td>
-</tr>
-<tr>
-	<td>
-		<TMPL_VAR NAME="TEXT_TOTAL_SVN_ACTIVATED">: 
-	</td>
-	<td>
-		<TMPL_VAR NAME="VALUE_TOTAL_SVN_ACTIVATED">
-	</td>
-</tr>
-</table>
+<ul>
+	<li><TMPL_VAR NAME="TEXT_TOTAL_SVN_IN_MODERATION">: <TMPL_VAR NAME="VALUE_TOTAL_SVN_IN_MODERATION"></li>
+	<li><TMPL_VAR NAME="TEXT_TOTAL_SVN_ACTIVATED">: <TMPL_VAR NAME="VALUE_TOTAL_SVN_ACTIVATED"></li>
+</ul>
 
 <h2>
 	<TMPL_VAR NAME="TEXT_MAIL">: 
 </h2>
-<table>
-<tr>
-	<td class="mainColumn">
-		<TMPL_VAR NAME="TEXT_TOTAL_MAIL_IN_MODERATION">: 
-	</td>
-	<td>
-		<TMPL_VAR NAME="VALUE_TOTAL_MAIL_IN_MODERATION">
-	</td>
-</tr>
-<tr>
-	<td>
-		<TMPL_VAR NAME="TEXT_TOTAL_MAIL_ACTIVATED">: 
-	</td>
-	<td>
-		<TMPL_VAR NAME="VALUE_TOTAL_MAIL_ACTIVATED">
-	</td>
-</tr>
-<tr>
-	<td>
-		<TMPL_VAR NAME="TEXT_MAIL_BOXES">: 
-	</td>
-	<td>
-		<TMPL_VAR NAME="VALUE_MAIL_BOXES">
-	</td>
-</tr>
-<tr>
-	<td>
-		<TMPL_VAR NAME="TEXT_MAIL_FORWARDS">: 
-	</td>
-	<td>
-		<TMPL_VAR NAME="VALUE_MAIL_FORWARDS">
-	</td>
-</tr>
-</table>
+<ul>
+	<li><TMPL_VAR NAME="TEXT_TOTAL_MAIL_IN_MODERATION">: <TMPL_VAR NAME="VALUE_TOTAL_MAIL_IN_MODERATION"></li>
+	<li><TMPL_VAR NAME="TEXT_TOTAL_MAIL_ACTIVATED">: <TMPL_VAR NAME="VALUE_TOTAL_MAIL_ACTIVATED"></li>
+	<li><TMPL_VAR NAME="TEXT_MAIL_BOXES">: <TMPL_VAR NAME="VALUE_MAIL_BOXES"></li>
+	<li><TMPL_VAR NAME="TEXT_MAIL_FORWARDS">: <TMPL_VAR NAME="VALUE_MAIL_FORWARDS"></li>
+</ul>
 
 <h2>
 	<TMPL_VAR NAME="TEXT_MYSQL">: 
 </h2>
-
-<table>
-<tr>
-	<td class="mainColumn">
-		<TMPL_VAR NAME="TEXT_TOTAL_MYSQL_IN_MODERATION">: 
-	</td>
-	<td>
-		<TMPL_VAR NAME="VALUE_TOTAL_MYSQL_IN_MODERATION">
-	</td>
-</tr>
-<tr>
-	<td>
-		<TMPL_VAR NAME="TEXT_TOTAL_MYSQL_ACTIVATED">: 
-	</td>
-	<td>
-		<TMPL_VAR NAME="VALUE_TOTAL_MYSQL_ACTIVATED">
-	</td>
-</tr>
-</table>
+<ul>
+	<li><TMPL_VAR NAME="TEXT_TOTAL_MYSQL_IN_MODERATION">: <TMPL_VAR NAME="VALUE_TOTAL_MYSQL_IN_MODERATION"></li>
+	<li><TMPL_VAR NAME="TEXT_TOTAL_MYSQL_ACTIVATED">: <TMPL_VAR NAME="VALUE_TOTAL_MYSQL_ACTIVATED"></li>
+</ul>
 
 <h2>
 	<TMPL_VAR NAME="TEXT_PGSQL">: 
 </h2>
-
-<table>
-<tr>
-	<td class="mainColumn">
-		<TMPL_VAR NAME="TEXT_TOTAL_PGSQL_IN_MODERATION">: 
-	</td>
-	<td>
-		<TMPL_VAR NAME="VALUE_TOTAL_PGSQL_IN_MODERATION">
-	</td>
-</tr>
-<tr>
-	<td>
-		<TMPL_VAR NAME="TEXT_TOTAL_PGSQL_ACTIVATED">: 
-	</td>
-	<td>
-		<TMPL_VAR NAME="VALUE_TOTAL_PGSQL_ACTIVATED">
-	</td>
-</tr>
-</table>
+<ul>
+	<li><TMPL_VAR NAME="TEXT_TOTAL_PGSQL_IN_MODERATION">: <TMPL_VAR NAME="VALUE_TOTAL_PGSQL_IN_MODERATION"></li>
+	<li><TMPL_VAR NAME="TEXT_TOTAL_PGSQL_ACTIVATED">: <TMPL_VAR NAME="VALUE_TOTAL_PGSQL_ACTIVATED"></li>
+</ul>
 
 
 <h2>
 	<TMPL_VAR NAME="TEXT_LISTS">: 
 </h2>
+<ul>
+	<li><TMPL_VAR NAME="TEXT_TOTAL_LISTS">: <TMPL_VAR NAME="VALUE_TOTAL_LISTS"></li>
+	<li><TMPL_VAR NAME="TEXT_TOTAL_LISTS_ACTIVATED">: <TMPL_VAR NAME="VALUE_TOTAL_LISTS_ACTIVATED"></li>
+	<li><TMPL_VAR NAME="TEXT_TOTAL_SUBS">: <TMPL_VAR NAME="VALUE_TOTAL_SUBS"></li>
+</ul>
 
-<table>
-<tr>
-	<td class="mainColumn">
-		<TMPL_VAR NAME="TEXT_TOTAL_LISTS">: 
-	</td>
-	<td>
-		<TMPL_VAR NAME="VALUE_TOTAL_LISTS">
-	</td>
-</tr>
-<tr>
-	<td>
-		<TMPL_VAR NAME="TEXT_TOTAL_LISTS_ACTIVATED">: 
-	</td>
-	<td>
-		<TMPL_VAR NAME="VALUE_TOTAL_LISTS_ACTIVATED">
-	</td>
-</tr>
-<tr>
-	<td>
-		<TMPL_VAR NAME="TEXT_TOTAL_SUBS">: 
-	</td>
-	<td>
-		<TMPL_VAR NAME="VALUE_TOTAL_SUBS">
-	</td>
-</tr>
-</table>
 
+<h2>
+	<TMPL_VAR NAME="TEXT_LARGEFILE">: 
+</h2>
+<ul>
+	<li><TMPL_VAR NAME="TEXT_TOTAL_FILES">: <TMPL_VAR NAME="VALUE_TOTAL_FILES"></li>
+	<li><TMPL_VAR NAME="TEXT_TOTAL_FILES_ACTIVATED">: <TMPL_VAR NAME="VALUE_TOTAL_FILES_ACTIVATED"></li>
+</ul>

Modified: trunk/vhffs-panel/templates/group/info.tmpl
==============================================================================
--- trunk/vhffs-panel/templates/group/info.tmpl (original)
+++ trunk/vhffs-panel/templates/group/info.tmpl Mon Jan 30 22:46:03 2006
@@ -41,3 +41,8 @@
 	<ul>
 		<tmpl_var name="MLS_VALUES">
 	</ul>
+
+	<h2><tmpl_var name="LARGEFILE"></h2>
+	<ul>
+		<tmpl_var name="LARGEFILE_VALUES">
+	</ul>

Modified: trunk/vhffs-panel/templates/menu/group.tmpl
==============================================================================
--- trunk/vhffs-panel/templates/menu/group.tmpl (original)
+++ trunk/vhffs-panel/templates/menu/group.tmpl Mon Jan 30 22:46:03 2006
@@ -16,4 +16,5 @@
 				<tmpl_var name="DNS_MENU">
 				<tmpl_var name="MAIL_MENU">
 				<tmpl_var name="MAILINGLIST_MENU">
+				<tmpl_var name="LARGEFILE_MENU">
 			</ul>

Modified: trunk/vhffs-panel/templates/svn/prefs.tmpl
==============================================================================
--- trunk/vhffs-panel/templates/svn/prefs.tmpl (original)
+++ trunk/vhffs-panel/templates/svn/prefs.tmpl Mon Jan 30 22:46:03 2006
@@ -74,3 +74,5 @@
 	</p>
 				
 </form>
+<tmpl_var name="OPART">
+




Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/