Email beim einloggen in Adminbereich

Hallo zusammen!
Ich möchte eine eMail an die in den Grundeinstellung hinterlegten “E-Mail-Adresse für Infos” erhalten, wenn sich ein User im Adminbereich einloggt. Wie und wo kann ich dies einstellen bzw. welchen Code müßte ich in welcher Datei integrieren? Wer kann mir helfen?

Setze in oxsuer::login() oder erweitere selbiges über ein Modul.

$oShop = oxNew( "oxshop" );
$oShop->load( "oxbaseshop" ); // $oShop->load( 1 ); //(ab 6.xx CE)
$oEmail = oxNew( 'oxemail' );	
$date = date("d.m.Y");
$time = date("H:i");
$myip = oxRegistry::get("oxUtilsServer")->getRemoteAddress();//   $myip = Registry::get("oxUtilsServer")->getRemoteAddress();; //(ab 6.xx CE)
$oEmail->sendEmail($oShop->oxshops__oxinfoemail->value, $this->oxuser__oxusername->value." hat sich um ".$time." Uhr ".$date." eingeloggt", $this->getConfig()->getConfigParam('sShopURL')." Login: ".$time." Uhr ".$date." IP:".$myip);

Würde ich gern mal testen - in welcher Datei muss ich denn die Zeilen wo einfügen (CE 6.2)?

vendor/oxid-esales/oxideshop-ce/source/Application/Model/User.php (6.xx)

/application/models/oxuser.php (4.xx)

Pack das ganze von Oben noch in

if(isAdmin()){…}

und füge es in der Methode login vor return true; ein.

Zum Test ist das ok. Man sollte daraus ein Modul machen, um updatefähig zu bleiben. Oder man darf es einfach nicht vergessen.

in welcher Zeile der User.php (vendor/oxid-esales/oxideshop-ce/source/Application/Model/User.php) muss ich das denn eingeben?

Zeile 1476, also vor “return true”. Beschreibung zu oxid 6 beachten.

ist eingefügt (anbei Zeilen 1464-1484) - klappt aber nicht - am besten mal eine funktionierende User.php zurück schicken

    // cookie must be set ?
    if ($setSessionCookie && $config->getConfigParam('blShowRememberMe')) {
        Registry::getUtilsServer()->setUserCookie(
            $this->oxuser__oxusername->value,
            $this->oxuser__oxpassword->value,
            $config->getShopId(),
            31536000,
            static::USER_COOKIE_SALT
        );
    }

    if(isAdmin()){…}
	$oShop = oxNew( "oxshop" );
	$oShop->load( "oxbaseshop" ); // $oShop->load( 1 ); //(ab 6.xx CE)
	$oEmail = oxNew( 'oxemail' );	
	$date = date("d.m.Y");
	$time = date("H:i");
	$myip = oxRegistry::get("oxUtilsServer")->getRemoteAddress();//   $myip = Registry::get("oxUtilsServer")->getRemoteAddress();; //(ab 6.xx CE)
	$oEmail->sendEmail($oShop->oxshops__oxinfoemail->value, $this->oxuser__oxusername->value." hat sich um ".$time." Uhr ".$date." eingeloggt", $this->getConfig()->getConfigParam('sShopURL')." Login: ".$time." Uhr ".$date." IP:".$myip);
    return true;
}

Danke!

Ich hatte geschrieben “einpacken”, also da wo die 3 Pünktchen sind den oberen Quelltext hin.
Obiges ist für 6.xx angepasst.

Achtung beim Kopieren. Geht sehr oft schief, weil die Zeichen geändert werden.

Ich komme leider direkt in den Maintenance-Mode nach der Änderung… Was ist falsch?

Wir reden über Oxid 6.xx? Wahrscheinlich, weil Du immer noch die Punkte oben drin hast.

falsch:
if(isAdmin()){
$oShop = oxNew( “oxshop” );

korrekt:
if(isAdmin()){
$oShop = oxNew( “oxshop” );

Der Fehler müsste im Log stehen. Irgendwas mit “Unexpected …”

So - die Punkte sind weg und der Shop läuft wieder - allerdings kommt beim Einloggen als Admin nur der Maintenance-Mode

im Logfile steht:
OXID Logger.ERROR: You have requested a non-existent service “oxidesales\eshopcommunity\internal\domain\authentication\bridge\passwordservicebridgeinterface”. ["[object] (OxidEsales\EshopCommunity\Internal\Application\PSR11Compliance\NotFoundException(code: 0): You have requested a non-existent service “oxidesales\eshopcommunity\internal\domain\authentication\bridge\passwordservicebridgeinterface”. at /homepages/33/xxxxxxxxxx/htdocs/webshop2/vendor/oxid-esales/oxideshop-ce/source/Internal/Application/PSR11Compliance/ContainerWrapper.php:55)\n[stacktrace]\n#0 /homepages/33/xxxxxxxxxx/htdocs/webshop2/vendor/oxid-esales/oxideshop-ce/source/Application/Model/User.php(1419): OxidEsales\EshopCommunity\Internal\Application\PSR11Compliance\ContainerWrapper->get(‘OxidEsales\\Esho…’)\n#1 /homepages/33/xxxxxxxxxx/htdocs/webshop2/vendor/oxid-esales/oxideshop-ce/source/Application/Controller/Admin/LoginController.php(108): OxidEsales\EshopCommunity\Application\Model\User->login(‘admin’, ‘$abcd#’)\n#2 /homepages/33/xxxxxxxxxx/htdocs/webshop2/vendor/oxid-esales/oxideshop-ce/source/Core/Controller/BaseController.php(524): OxidEsales\EshopCommunity\Application\Controller\Admin\LoginController->checklogin()\n#3 /homepages/33/xxxxxxxxxx/htdocs/webshop2/vendor/oxid-esales/oxideshop-ce/source/Core/ShopControl.php(332): OxidEsales\EshopCommunity\Core\Controller\BaseController->executeFunction(‘checklogin’)\n#4 /homepages/33/xxxxxxxxxx/htdocs/webshop2/vendor/oxid-esales/oxideshop-ce/source/Core/ShopControl.php(274): OxidEsales\EshopCommunity\Core\ShopControl->executeAction(Object(OxidEsales\Eshop\Application\Controller\Admin\LoginController), ‘checklogin’)\n#5 /homepages/33/xxxxxxxxxx/htdocs/webshop2/source/modules/dgcollection/modules/dgcollection_oxshopcontrol.php(46): OxidEsales\EshopCommunity\Core\ShopControl->_process(‘OxidEsales\\Esho…’, ‘checklogin’, NULL, NULL)\n#6 /homepages/33/xxxxxxxxxx/htdocs/webshop2/vendor/oxid-esales/oxideshop-ce/source/Core/ShopControl.php(137): dgCollection_oxShopControl->_process(‘OxidEsales\\Esho…’, ‘checklogin’, NULL, NULL)\n#7 /homepages/33/xxxxxxxxxx/htdocs/webshop2/vendor/oxid-esales/oxideshop-ce/source/Core/Oxid.php(26): OxidEsales\EshopCommunity\Core\ShopControl->start()\n#8 /homepages/33/xxxxxxxxxx/htdocs/webshop2/source/index.php(15): OxidEsales\EshopCommunity\Core\Oxid::run()\n#9 /homepages/33/xxxxxxxxxx/htdocs/webshop2/source/admin/index.php(11): require_once(’/homepages/33/d…’)\n#10 {main}\n"] []

Dann hast irgendwo nen Fehler im Text. Wie geschrieben, ist das Kopieren hier hin und wieder problematisch bzw. ein Glücksspiel. Hier kannst es runterladen. Der Text ist etwas anders und komplett auf 6 abgestimmt, läuft also nicht auf 4.xx !!!

   if ($isLoginAttemptToAdminBackend) {
		$oShop = oxNew(\OxidEsales\Eshop\Application\Model\Shop::class);
		$oShop->load( 1 );
		$oEmail = oxNew(\OxidEsales\Eshop\Core\Email::class);
		$date = date("d.m.Y");
		$time = date("H:i");
		$myip = \OxidEsales\Eshop\Core\Registry::getUtilsServer()->getRemoteAddress();
		$oEmail->sendEmail($oShop->oxshops__oxinfoemail->value, $this->oxuser__oxusername->value." hat sich um ".$time." Uhr ".$date." eingeloggt", $this->getConfig()->getConfigParam('sShopURL')." Login: ".$time." Uhr ".$date." IP:".$myip);
	}

danke - aber beim Einloggen als Admin kommt nur der Maintenance-Mode

im Logfile steht:

[2021-02-14 20:20:40] OXID Logger.ERROR: You have requested a non-existent service “oxidesales\eshopcommunity\internal\domain\authentication\bridge\passwordservicebridgeinterface”. ["[object] (OxidEsales\EshopCommunity\Internal\Application\PSR11Compliance\NotFoundException(code: 0): You have requested a non-existent service “oxidesales\eshopcommunity\internal\domain\authentication\bridge\passwordservicebridgeinterface”. at /homepages/33/xxxxxxxxxx/htdocs/webshop2/vendor/oxid-esales/oxideshop-ce/source/Internal/Application/PSR11Compliance/ContainerWrapper.php:55)\n[stacktrace]\n#0 /homepages/33/xxxxxxxxxx/htdocs/webshop2/vendor/oxid-esales/oxideshop-ce/source/Application/Model/User.php(1421): OxidEsales\EshopCommunity\Internal\Application\PSR11Compliance\ContainerWrapper->get(‘OxidEsales\\Esho…’)\n#1 /homepages/33/xxxxxxxxxx/htdocs/webshop2/vendor/oxid-esales/oxideshop-ce/source/Application/Controller/Admin/LoginController.php(108): OxidEsales\EshopCommunity\Application\Model\User->login(‘admin’, ‘$abcd#’)\n#2 /homepages/33/xxxxxxxxxx/htdocs/webshop2/vendor/oxid-esales/oxideshop-ce/source/Core/Controller/BaseController.php(524): OxidEsales\EshopCommunity\Application\Controller\Admin\LoginController->checklogin()\n#3 /homepages/33/xxxxxxxxxx/htdocs/webshop2/vendor/oxid-esales/oxideshop-ce/source/Core/ShopControl.php(332): OxidEsales\EshopCommunity\Core\Controller\BaseController->executeFunction(‘checklogin’)\n#4 /homepages/33/xxxxxxxxxx/htdocs/webshop2/vendor/oxid-esales/oxideshop-ce/source/Core/ShopControl.php(274): OxidEsales\EshopCommunity\Core\ShopControl->executeAction(Object(OxidEsales\Eshop\Application\Controller\Admin\LoginController), ‘checklogin’)\n#5 /homepages/33/xxxxxxxxxx/htdocs/webshop2/source/modules/dgcollection/modules/dgcollection_oxshopcontrol.php(46): OxidEsales\EshopCommunity\Core\ShopControl->_process(‘OxidEsales\\Esho…’, ‘checklogin’, NULL, NULL)\n#6 /homepages/33/xxxxxxxxxx/htdocs/webshop2/vendor/oxid-esales/oxideshop-ce/source/Core/ShopControl.php(137): dgCollection_oxShopControl->_process(‘OxidEsales\\Esho…’, ‘checklogin’, NULL, NULL)\n#7 /homepages/33/xxxxxxxxxx/htdocs/webshop2/vendor/oxid-esales/oxideshop-ce/source/Core/Oxid.php(26): OxidEsales\EshopCommunity\Core\ShopControl->start()\n#8 /homepages/33/xxxxxxxxxx/htdocs/webshop2/source/index.php(15): OxidEsales\EshopCommunity\Core\Oxid::run()\n#9 /homepages/33/xxxxxxxxxx/htdocs/webshop2/source/admin/index.php(11): require_once(’/homepages/33/d…’)\n#10 {main}\n"] []

Kann ich nicht nachvollziehen. Das kann eigentlich auch nichts mit dem Einbau zutun haben.