EMAIL IN JOOMLA-KONFIG ggf. VORHER ABSCHALTEN beim Testen! Das Skript versendet bei Ausführung aus dem BE Email. Anders: Damit es automatische Emails sendet, muss es im Backend ausgeführt werden! Z.B. Code in einen Layout-Override von mod_custom (Administrator-Modul).

Variante 1 mit Klartext-Passwörtern und Passwortrücksetzung

Passwort-Optionen vorher runterschrauben, falls Klartextpasswörter nicht Kriterien entsprechen!

Beachte, dass Skript Passwortrücksetzung fordert.

Beachte "Totmann" 1===2.

##########################
JLoader::register('UsersModelUser', JPATH_ADMINISTRATOR . '/components/com_users/models/user.php');



$lines = file(__DIR__ . '/DB-zti_Tabelle-caea_user-fuer-Joomla-import.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
#echo ' 4654sd48sa7d98sD81s8d71dsa <pre>' . print_r($lines, true) . '</pre>';exit;

if (1===2)
{
	foreach ($lines as $line)
	{
		$line = trim($line);
		if (!$line) continue;
		
		$data = array();
		$userModel = new UsersModelUser;

		
		list(
			$data['name'],
			$data['username'],
			$data['password'],
			$data['email']
		) = explode("\t", $line);
		$data['password2'] = $data['password'];
		
		$data['email'] = trim($data['email'], '" ');
		
		$data['registerDate'] = '';
		$data['lastvisitDate'] = '';
		$data['lastResetTime'] = '';
		$data['resetCount'] = 0;
		$data['sendEmail'] = 0;
		$data['block'] = 0;
		$data['requireReset'] = 1;
		$data['id'] = 0;
		$data['groups'] = array(0 => 2);
		$data['params'] = array(
		 'admin_style' => '',
		 'admin_language' => '',
		 'language' => '',
		 'editor' => '',
		 'helpsite' => '',
		 'timezone' => ''
		);
		//$data['com_fields'] = array('tralala' => 'Wert von Tralala', 'geburtstag' => '1962-02-16 12:00:00');
		//$data['tags'] = '';
		
		
		$userModel->save($data);
		#break;
	}
}



#echo ' DONE ' . print_r($data['name'], true) . "\n";#exit;
##########################

Datei Variante 1

Tabgetrennte txt-Datei ohne Überschrift

  • name
  • username
  • password
  • email

 Eine weitere Variante 2 mit com_fields-Feldern und Pre-Check zu doppelten Irgendwas. Automatischen Passwörtern.

<?php
#return;

defined('_JEXEC') or die;
use Joomla\CMS\Mail\MailHelper;
# name	username	password	email	nachname	vorname	mitgliedsnummer

JLoader::register('UsersModelUser', JPATH_ADMINISTRATOR . '/components/com_users/models/user.php');

$file = 'hausgebraut-user-import-2021.txt';
$file = 'hausgebraut-user-import-2021_test.txt';

$lines = file(__DIR__ . '/' . $file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

$emailDoubleCheck = array();
$usernameDoubleCheck = array();

$requirePasswordReset = 0;

// SOME CHECKS FIRST
foreach ($lines as $key => $line)
{
	$line = trim($line);

	if (!$line)
	{
		echo 'IsNoLine: ' . $key;
		exit;
	}

	list(
		$data['name'],
		$data['username'],
		$data['password'],
		$data['email'],
		$nachname,
		$vorname,
		$mitgliedsnummer
	) = explode("\t", $line);

	$data['name'] = preg_replace('/\s\s+/', ' ', trim($data['name']));
	$data['username'] = preg_replace('/\s\s+/', ' ', trim($data['username']));
	
	// If you want that Joomla creates a new one.
	$data['password'] = '';

	$data['email'] = strtolower(trim($data['email'], '" '));
	$nachname = preg_replace('/\s\s+/', ' ', trim($nachname));
	$vorname = preg_replace('/\s\s+/', ' ', trim($vorname));
	$mitgliedsnummer = preg_replace('/\s\s+/', ' ', trim($mitgliedsnummer));

	if (
		empty($data['name'])
		|| empty($data['username'])
		|| empty($data['email'])
		|| empty($nachname)
		|| empty($vorname)
		|| empty($mitgliedsnummer)
	){
		echo 'MissingData: Line with Index: ' . $key . PHP_EOL;
		echo $line;
		exit;
	}

	if (!MailHelper::isEmailAddress($data['email']))
	{
		echo 'IsNoEmail: Line with Index: ' . $key . PHP_EOL;
		echo $line;
		exit;
	}

	if (isset($emailDoubleCheck[$data['email']]))
	{
		echo 'EmailExistsAlready: Line with Index: ' . $key . PHP_EOL;
		echo $line;
		exit;
	}
	$emailDoubleCheck[$data['email']] = 1;


	if (isset($emailDoubleCheck[$data['username']]))
	{
		echo 'UsernameExistsAlready: Line with Index: ' . $key . PHP_EOL;
		echo $line;
		exit;
	}
	$emailDoubleCheck[$data['username']] = 1;

	$lines[$key] = implode("\t",
		array(
			$data['name'],
			$data['username'],
			$data['password'],
			$data['email'],
			$nachname,
			$vorname,
			$mitgliedsnummer
		)
	);
}


# echo ' 4654sd48sa7d98sD81s8d71dsa <pre>' . print_r($lines, true) . '</pre>';exit;

$datasCollect = array();

# if (1===2)
{
	foreach ($lines as $line)
	{
		$line = trim($line);
		if (!$line) continue;

		$data = array();
		$userModel = new UsersModelUser;

		list(
			$data['name'],
			$data['username'],
			$data['password'],
			$data['email'],
			$nachname,
			$vorname,
			$mitgliedsnummer
		) = explode("\t", $line);

		$data['password2'] = $data['password'];

		$data['com_fields'] = array(
			'nachname' => $nachname,
			'vorname' => $vorname,
			'mitgliedsnummer' => $mitgliedsnummer
		);

		// $data['email'] = trim($data['email'], '" ');

		$data['registerDate'] = '';
		$data['lastvisitDate'] = '';
		$data['lastResetTime'] = '';
		$data['resetCount'] = 0;
		$data['sendEmail'] = 0;
		$data['block'] = 0;
		$data['requireReset'] = $requirePasswordReset;
		$data['id'] = 0;

		// User-Group "Registered" has id=2.
		$data['groups'] = array(0 => 2);

		$data['params'] = array(
		 'admin_style' => '',
		 'admin_language' => '',
		 'language' => '',
		 'editor' => '',
		 'helpsite' => '',
		 'timezone' => ''
		);

		//$data['tags'] = '';
		
		// echo ' 4654sd48sa7d98sD81s8d71dsa <pre>' . print_r($data, true) . '</pre>';#exit;
#sleep(3);
		$userModel->save($data);

		$datasCollect[] = $data;
	}
}


echo ' 4654sd48sa7d98sD81s8d71dsa <pre>' . print_r($datasCollect, true) . '</pre>';#exit;

##########################

Datei Variante 2

Tabgetrennte txt-Datei ohne Überschrift

name

username

password (leer)

email

nachname

vorname

mitgliedsnummer