Benutzer/User CSV-Massen-Import/Export in Joomla
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).
Vielleicht auch interessant?
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 (als Klartext!!)
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)
nachname
vorname
mitgliedsnummer