@@ -157,6 +157,7 @@ public function find_installed_apps() {
157157 if (is_installed ('postfix ' )) $ conf ['postfix ' ]['installed ' ] = true ;
158158 if (is_installed ('postgrey ' )) $ conf ['postgrey ' ]['installed ' ] = true ;
159159 if (is_installed ('mailman ' ) || is_installed ('mmsitepass ' )) $ conf ['mailman ' ]['installed ' ] = true ;
160+ if (is_installed ('mlmmj ' ) || is_installed ('mlmmj-make-ml ' )) $ conf ['mlmmj ' ]['installed ' ] = true ;
160161 if (is_installed ('apache ' ) || is_installed ('apache2 ' ) || is_installed ('httpd ' ) || is_installed ('httpd2 ' )) $ conf ['apache ' ]['installed ' ] = true ;
161162 if (is_installed ('getmail ' )) $ conf ['getmail ' ]['installed ' ] = true ;
162163 if (is_installed ('courierlogger ' )) $ conf ['courier ' ]['installed ' ] = true ;
@@ -313,6 +314,7 @@ public function add_database_server_record() {
313314 $ tpl_ini_array ['web ' ]['php_ini_path_cgi ' ] = $ conf ['apache ' ]['php_ini_path_cgi ' ];
314315 $ tpl_ini_array ['mail ' ]['pop3_imap_daemon ' ] = ($ conf ['dovecot ' ]['installed ' ] == true )?'dovecot ' :'courier ' ;
315316 $ tpl_ini_array ['mail ' ]['mail_filter_syntax ' ] = ($ conf ['dovecot ' ]['installed ' ] == true )?'sieve ' :'maildrop ' ;
317+ $ tpl_ini_array ['mail ' ]['mailinglist ' ] = ($ conf ['mlmmj ' ]['installed ' ] == true )?'mlmmj ' :'mailman ' ;
316318 $ tpl_ini_array ['dns ' ]['bind_user ' ] = $ conf ['bind ' ]['bind_user ' ];
317319 $ tpl_ini_array ['dns ' ]['bind_group ' ] = $ conf ['bind ' ]['bind_group ' ];
318320 $ tpl_ini_array ['dns ' ]['bind_zonefiles_dir ' ] = $ conf ['bind ' ]['bind_zonefiles_dir ' ];
@@ -809,6 +811,111 @@ public function configure_mailman($status = 'insert') {
809811 exec ('/usr/sbin/postmap /var/lib/mailman/data/transport-mailman ' );
810812 }
811813
814+ public function configure_mlmmj () {
815+ global $ conf ;
816+
817+ $ configDir = $ conf ['mlmmj ' ]['config_dir ' ];
818+ @mkdir ($ configDir , 0755 , true );
819+
820+ $ configFile = 'mlmmj.conf ' ;
821+
822+ //* Backup exiting file
823+ if (is_file ("$ configDir/ $ configFile " )) {
824+ copy ("$ configDir/ $ configFile " , "$ configDir/ $ configFile~ " );
825+ }
826+
827+ // load files
828+ if (is_file ($ conf ['ispconfig_install_dir ' ]."/server/conf-custom/install/ $ configFile.master " )) {
829+ copy ($ conf ['ispconfig_install_dir ' ]."/server/conf-custom/install/ $ configFile.master " , "$ configDir/ $ configFile " );
830+ } else {
831+ copy ("tpl/ $ configFile.master " , "$ configDir/ $ configFile " );
832+ }
833+
834+ $ mlConfig = @parse_ini_file ("$ configDir/ $ configFile " );
835+ // Force PHP7 to use # to mark comments
836+ if (PHP_MAJOR_VERSION >= 7 )
837+ $ mlConfig = array_filter ($ mlConfig , function ($ v ){return (substr ($ v ,0 ,1 )!=='# ' );}, ARRAY_FILTER_USE_KEY );
838+
839+ $ command = 'useradd --system mlmmj --home ' .$ mlConfig ['spool_dir ' ].' --shell /usr/false ' ;
840+ if (!is_user ('mlmmj ' )) caselog ("$ command &> /dev/null " , __FILE__ , __LINE__ , "EXECUTED: $ command " , "Failed to execute the command $ command " );
841+
842+ @mkdir ($ mlConfig ['spool_dir ' ], 0755 , true );
843+ chown ($ mlConfig ['spool_dir ' ], 'mlmmj ' );
844+ chgrp ($ mlConfig ['spool_dir ' ], 'mlmmj ' );
845+
846+ // Make a backup copy of master.cf and main.cf files
847+ copy ($ conf ['postfix ' ]['config_dir ' ].'/main.cf ' , $ conf ['postfix ' ]['config_dir ' ].'/main.cf~mlmmj ' );
848+
849+ //* Update postfix main.cf
850+ $ content = rf ($ conf ['postfix ' ]['config_dir ' ].'/main.cf ' );
851+
852+ if (!preg_match ("/^alias_maps = .*hash:\/etc\/mlmmj\/aliases.*/m " , $ content )) {
853+ $ content = preg_replace ("/^alias_maps = (.*)/m " , "$0, hash: $ configDir/aliases " , $ content );
854+ }
855+
856+ if (!preg_match ("/^alias_database = .*hash:\/etc\/mlmmj\/aliases.*/m " , $ content )) {
857+ $ content = preg_replace ("/^alias_database = (.*)/m " , "$0, hash: $ configDir/aliases " , $ content );
858+ }
859+
860+ if (!preg_match ("/^virtual_alias_maps = .*hash:\/etc\/mlmmj\/virtual.*/m " , $ content )) {
861+ $ content = preg_replace ("/^virtual_alias_maps = (.*)/m " , "$0, hash: $ configDir/virtual " , $ content );
862+ }
863+
864+ if (!preg_match ("/^transport_maps = .*hash:\/etc\/mlmmj\/transport.*/m " , $ content )) {
865+ $ content = preg_replace ("/transport_maps = (.*)/m " , "$0, hash: $ configDir/transport " , $ content );
866+ }
867+
868+ if (!preg_match ("/^mlmmj_destination_recipient_limit.*/m " , $ content )) {
869+ $ content .= "\n# Only deliver one message to Mlmmj at a time \nmlmmj_destination_recipient_limit = 1 \n" ;
870+ }
871+
872+ wf ($ conf ['postfix ' ]['config_dir ' ].'/main.cf ' , $ content );
873+
874+ //* Update postfix master.cf
875+ $ content = rf ($ conf ['postfix ' ]['config_dir ' ].'/master.cf ' );
876+ if (!preg_match ('/^mlmmj\s+unix\s+-\s+n\s+n\s+-\s+-\s+pipe\s*$/m ' , $ content )) {
877+ copy ($ conf ['postfix ' ]['config_dir ' ].'/master.cf ' , $ conf ['postfix ' ]['config_dir ' ].'/master.cf~mlmmj ' );
878+ $ content .= "\n# mlmmj mailing lists \n" ;
879+ $ content .= "mlmmj unix - n n - - pipe \n" ;
880+ $ content .= " flags=ORhu user=mlmmj argv=/usr/local/bin/mlmmj-receive -F -L /var/spool/mlmmj/ \$nexthop \n\n" ;
881+ wf ($ conf ['postfix ' ]['config_dir ' ].'/master.cf ' , $ content );
882+ }
883+
884+ //* Create aliasaes
885+ touch ("$ configDir/aliases " );
886+ exec ("nohup /usr/sbin/postalias $ configDir/aliases >/dev/null 2>&1 " );
887+ touch ("$ configDir/virtual " );
888+ exec ("nohup /usr/sbin/postmap $ configDir/virtual >/dev/null 2>&1 " );
889+ touch ("$ configDir/transport " );
890+ exec ("nohup /usr/sbin/postmap $ configDir/transport >/dev/null 2>&1 " );
891+
892+ // ALTER TABLE `mail_mailinglist` ADD `closedlist` enum('n','y') NOT NULL DEFAULT 'y'
893+ // ALTER TABLE `mail_mailinglist` ADD `closedlistsub` enum('n','y') NOT NULL DEFAULT 'y'
894+ // ALTER TABLE `mail_mailinglist` ADD `moderated` enum('n','y') NOT NULL DEFAULT 'n'
895+ // ALTER TABLE `mail_mailinglist` ADD `tocc` enum('n','y') NOT NULL DEFAULT 'n'
896+ // ALTER TABLE `mail_mailinglist` ADD `subonlypost` enum('n','y') NOT NULL DEFAULT 'n'
897+ // ALTER TABLE `mail_mailinglist` ADD `modonlypost` enum('n','y') NOT NULL DEFAULT 'n'
898+ // ALTER TABLE `mail_mailinglist` ADD `modnonsubposts` enum('n','y') NOT NULL DEFAULT 'n'
899+ // ALTER TABLE `mail_mailinglist` ADD `addtohdr` enum('n','y') NOT NULL DEFAULT 'n'
900+ // ALTER TABLE `mail_mailinglist` ADD `notifysub` enum('n','y') NOT NULL DEFAULT 'n'
901+ // ALTER TABLE `mail_mailinglist` ADD `notifymod` enum('n','y') NOT NULL DEFAULT 'n'
902+ // ALTER TABLE `mail_mailinglist` ADD `noarchive` enum('n','y') NOT NULL DEFAULT 'n'
903+ // ALTER TABLE `mail_mailinglist` ADD `nosubconfirm` enum('n','y') NOT NULL DEFAULT 'n'
904+ // ALTER TABLE `mail_mailinglist` ADD `noget` enum('n','y') NOT NULL DEFAULT 'n'
905+ // ALTER TABLE `mail_mailinglist` ADD `notoccdenymails` enum('n','y') NOT NULL DEFAULT 'n'
906+ // ALTER TABLE `mail_mailinglist` ADD `noaccessdenymails` enum('n','y') NOT NULL DEFAULT 'n'
907+ // ALTER TABLE `mail_mailinglist` ADD `nosubonlydenymails` enum('n','y') NOT NULL DEFAULT 'n'
908+ // ALTER TABLE `mail_mailinglist` ADD `nomodonlydenymails` enum('n','y') NOT NULL DEFAULT 'n'
909+ // ALTER TABLE `mail_mailinglist` ADD `nosubmodmails` enum('n','y') NOT NULL DEFAULT 'n'
910+ // ALTER TABLE `mail_mailinglist` ADD `nodigesttext` enum('n','y') NOT NULL DEFAULT 'n'
911+ // ALTER TABLE `mail_mailinglist` ADD `nodigestsub` enum('n','y') NOT NULL DEFAULT 'n'
912+ // ALTER TABLE `mail_mailinglist` ADD `nonomailsub` enum('n','y') NOT NULL DEFAULT 'n'
913+ // ALTER TABLE `mail_mailinglist` ADD `nomaxmailsizedenymails` enum('n','y') NOT NULL DEFAULT 'n'
914+ // ALTER TABLE `mail_mailinglist` ADD `nolistsubsemail` enum('n','y') NOT NULL DEFAULT 'n'
915+ // ALTER TABLE `mail_mailinglist` ADD `ifmodsendonlymodmoderate` enum('n','y') NOT NULL DEFAULT 'n'
916+ // ALTER TABLE `mail_mailinglist` ADD `notmetoo` enum('n','y') NOT NULL DEFAULT 'n'
917+ }
918+
812919 public function get_postfix_service ($ service , $ type ) {
813920 global $ conf ;
814921
0 commit comments