30 ) { header("Location: error.php"); exit(); } // Test list existence if( !is_dir("$lists_path/$domain/$list_name") ) { header("Location: error.php"); exit(); } // Test list type if ($new_list_type !== "0" && $new_list_type !== "1" && $new_list_type !== "2") { header("Location: error.php"); exit(); } if ( strlen($prefix) > 128 ) { // Prefix must not be longer than 128 characters $_SESSION["error_code"] = 7; header("Location: error.php"); exit(); } if ( strlen($footer) > 1024 ) { // Footer must not be longer than 1024 characters $_SESSION["error_code"] = 8; header("Location: error.php"); exit(); } if ($new_subscribers != NULL) { // Subscribe new subscribers and unsubscribe who is not present in the new list of subscribers $new_subscribers = explode("\n", $new_subscribers); $new_subscribers = trim_array($new_subscribers); $old_subscribers = shell_exec("/usr/bin/mlmmj-list -L $lists_path/$domain/$list_name"); $old_subscribers = explode("\n", $old_subscribers); $old_subscribers = trim_array($old_subscribers); foreach ($new_subscribers as $new_subscriber) { if ( !in_array($new_subscriber, $old_subscribers) ) { if ( !filter_var($new_subscriber, FILTER_VALIDATE_EMAIL) ) { // Incorrect email $_SESSION["error_code"] = 9; header("Location: error.php"); exit(); } shell_exec("/usr/bin/mlmmj-sub -L $lists_path/$domain/$list_name -a $new_subscriber -fq"); } } foreach ($old_subscribers as $old_subscriber) { if ( !in_array($old_subscriber, $new_subscribers) ) { shell_exec("/usr/bin/mlmmj-unsub -L $lists_path/$domain/$list_name -a $old_subscriber -sq"); } } } $old_list_type = file_get_contents("$lists_path/$domain/$list_name/list_type.txt"); // If list type changed if ($new_list_type !== $old_list_type) { // Delete all files except three in control dir shell_exec("cd $lists_path/$domain/$list_name/control/; \ ls | grep -E -v '(footer-html|footer-text|listaddress|owner|delheaders|addtohdr|customheaders)' | xargs rm"); // Create necessary files switch ($new_list_type) { case 0: // Moderated list shell_exec("cd $lists_path/$domain/$list_name/control/; \ touch closedlistsub moderated subonlypost notifymod noarchive noget nosubonlydenymails \ nodigestsub nolistsubsemail ifmodsendonlymodmoderate"); break; case 1: // News list shell_exec("cd $lists_path/$domain/$list_name/control/; \ touch moderated modonlypost noarchive nosubonlydenymails nodigestsub nomodonlydenymails \ nolistsubsemail subonlypost ifmodsendonlymodmoderate"); break; case 2: // Conference list shell_exec("cd $lists_path/$domain/$list_name/control/; \ touch closedlistsub subonlypost noarchive noget nosubonlydenymails nodigestsub \ nolistsubsemail"); break; } file_put_contents("$lists_path/$domain/$list_name/list_type.txt", "$new_list_type"); } if ($footer !== NULL) { // Delete all \r symbols $footer = str_replace("\r", "", $footer); file_put_contents("$lists_path/$domain/$list_name/control/footer-text", "$footer\n"); // Insert
$footer = str_replace("\n", "
\n", $footer); file_put_contents("$lists_path/$domain/$list_name/control/footer-html", "$footer\n"); } if ($moderators !== NULL) { $moderators_array = explode("\n", $moderators); $moderators_array = trim_array($moderators_array); // Check moderators emails foreach ($moderators_array as $moderator) { if ( !filter_var($moderator, FILTER_VALIDATE_EMAIL) ) { // Incorrect email $_SESSION["error_code"] = 10; header("Location: error.php"); exit(); } } // If this not a conference list type, then write moderators if ($new_list_type !== "2") { file_put_contents("$lists_path/$domain/$list_name/control/moderators", "$moderators"); } // If this is a news list type, create access file (only mods can post) if ($new_list_type == "1") { // Delete all \r symbols $moderators = str_replace("\r", "", $moderators); // Escape dots $moderators = str_replace(".", "\.", $moderators); // Add first allow $moderators = "allow ^From:.*" . $moderators; // Add all other allows $moderators = str_replace("\n", "\nallow ^From:.*", $moderators); // Add discard as last string $moderators = $moderators . "\ndiscard"; // Add .* to each allow $moderators = str_replace("\n", ".*\n", $moderators); // Write result file_put_contents("$lists_path/$domain/$list_name/control/access", "$moderators"); } } if ($prefix !== NULL) { file_put_contents("$lists_path/$domain/$list_name/control/prefix", "$prefix"); } if ($notmetoo === "checked") { shell_exec("touch $lists_path/$domain/$list_name/control/notmetoo"); } else { if ( file_exists("$lists_path/$domain/$list_name/control/notmetoo") ) { shell_exec("rm $lists_path/$domain/$list_name/control/notmetoo"); } } header("Location: edit_list.php?list_name=$list_name"); exit(); ?>