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