Hi Leute,
ich arbeite an einem Projekt, in dem es um einen geschützten Mitgliederebereich geht. Kunden sollen eine E-Mail-Benachrichtigung bekommen, wenn in ihren Ordner im Backend eine neue Datei hochgeladen wurde. Dafür hat mir ein Programmierer eine Funktion erstellt und in die FileUpload.php eingefügt. Nun möchte ich das ganze aber gern Updatesicher haben und die Funktionen in einen Hook umwandeln. Dafür habe ich den Hook postUpload verwendet. Leider scheint die Funktion nicht 1 zu 1 übernommen werden zu können. Denn der Hook funktioniert nicht. Ich muss dazu sagen, dass ist mein erster Versuch mit Extension-Entwicklung und ich habe mich in der Contao Dokumentation informiert und diverse Forenbeiträge gelesen. Aber es funktioniert nicht. Und so sieht das ganze aus:
Die Funktion (eingefügt in der FileUpload.php in Zeile 189 funktioniert sie)
Code:
//developer 04.04.17//
$this->import('BackendUser', 'User');
$currUserid = $this->User->id;
$currfilemounts = $this->filemounts;
$isAdmin = $this->User->admin;
if($isAdmin==1){ // admin
foreach($arrUploaded as $newFiles){
$folders = explode("/",$newFiles);
$customerfolder = $folders[1];
}
$arrUsers='';
//$userHomeDir = $this->Database->execute("SELECT homeDir FROM tl_member WHERE id = ".$currUserid);
//$homeDirName = $this->Database->execute("SELECT name FROM tl_files WHERE uuid = ".$userHomeDir);
$homeDirName='';
//if(strtolower($customerfolder==$homeDirName)){
if(strtolower($customerfolder=="customer general")){
$objFEMembers = $this->Database->execute("SELECT * FROM tl_member WHERE login=1");
while ($objFEMembers->next()){
$arrUsers.=$objFEMembers->email.',';
}
}else{
foreach($arrUploaded as $newFiles){
$folders = explode("/",$newFiles);
$groupfolder = $folders[count($folders)-2];
}
$objGroups = $this->Database->execute("SELECT id FROM tl_member_group WHERE name ='".$groupfolder."'");
$objUsers = $this->Database->execute("SELECT * FROM tl_member WHERE login=1");
while ($objUsers->next())
{
$arrGroups = unserialize($objUsers->groups);
foreach($arrGroups as $group){
if(in_array($objGroups->id,$arrGroups)){
$arrUsers.=$objUsers->email.',';
}
}
}
}
}else{ // is other users
$currUser = $this->Database->execute("SELECT * FROM tl_user WHERE id = ".$currUserid);
$currUserGroup = unserialize($currUser->groups);
$objUsers = $this->Database->execute("SELECT * FROM tl_user WHERE admin !=1");
$arrUsers = '';
$arrGroups = '';
while ($objUsers->next())
{
$arrGroups = unserialize($objUsers->groups);
$arrFilemounts = unserialize($objUsers->filemounts);
foreach($arrGroups as $group){
if(in_array($group,$currUserGroup)){
$arrUsers.=$objUsers->email.',';
}
}
}
}
$count=1;
$fileStr='';
foreach($arrUploaded as $newFiles){
$fileStr.=$count.' '.$newFiles.'<br/>';
$count++;
}
$objEmail = new \Email();
$objEmail->from = $GLOBALS['TL_ADMIN_EMAIL'];
$objEmail->fromName = $GLOBALS['TL_ADMIN_NAME'];
$objEmail->subject = sprintf('Notification', \Idna::decode(\Environment::get('host')));
$objEmail->html = sprintf('Sehr verehrter Kunde,<p>Folgende Datei wurde in Ihrem Liegenschaftsportal hochgeladen und kann jetzt abgerufen werden.</p> ' . $fileStr . '<br/><br/>Mit freundlichen Grüßen<br/>'.$GLOBALS['TL_ADMIN_NAME'], 'Notification', $strUrl, $strUrl . '?token=' . $objNotify->tokenRemove);
$objEmail->sendTo(rtrim($arrUsers,','));
//developer 04.04.17//
}
Jetzt das Modul:
Ordnerstruktur:
EmailNotificationSystem
-assets
-classes
--EmailNotificationUser.php
-config
--autoload.php
--config.php
EmailNotificationUser.php
Code:
<?php
public function EmailNotificationSystem($arrFiles)
{
//developer 04.04.17//
$this->import('BackendUser', 'User');
$currUserid = $this->User->id;
$currfilemounts = $this->filemounts;
$isAdmin = $this->User->admin;
if($isAdmin==1){ // admin
foreach($arrUploaded as $newFiles){
$folders = explode("/",$newFiles);
$customerfolder = $folders[1];
}
$arrUsers='';
//$userHomeDir = $this->Database->execute("SELECT homeDir FROM tl_member WHERE id = ".$currUserid);
//$homeDirName = $this->Database->execute("SELECT name FROM tl_files WHERE uuid = ".$userHomeDir);
$homeDirName='';
//if(strtolower($customerfolder==$homeDirName)){
if(strtolower($customerfolder=="customer general")){
$objFEMembers = $this->Database->execute("SELECT * FROM tl_member WHERE login=1");
while ($objFEMembers->next()){
$arrUsers.=$objFEMembers->email.',';
}
}else{
foreach($arrUploaded as $newFiles){
$folders = explode("/",$newFiles);
$groupfolder = $folders[count($folders)-2];
}
$objGroups = $this->Database->execute("SELECT id FROM tl_member_group WHERE name ='".$groupfolder."'");
$objUsers = $this->Database->execute("SELECT * FROM tl_member WHERE login=1");
while ($objUsers->next())
{
$arrGroups = unserialize($objUsers->groups);
foreach($arrGroups as $group){
if(in_array($objGroups->id,$arrGroups)){
$arrUsers.=$objUsers->email.',';
}
}
}
}
}else{ // is other users
$currUser = $this->Database->execute("SELECT * FROM tl_user WHERE id = ".$currUserid);
$currUserGroup = unserialize($currUser->groups);
$objUsers = $this->Database->execute("SELECT * FROM tl_user WHERE admin !=1");
$arrUsers = '';
$arrGroups = '';
while ($objUsers->next())
{
$arrGroups = unserialize($objUsers->groups);
$arrFilemounts = unserialize($objUsers->filemounts);
foreach($arrGroups as $group){
if(in_array($group,$currUserGroup)){
$arrUsers.=$objUsers->email.',';
}
}
}
}
$count=1;
$fileStr='';
foreach($arrUploaded as $newFiles){
$fileStr.=$count.' '.$newFiles.'<br/>';
$count++;
}
$objEmail = new \Email();
$objEmail->from = $GLOBALS['TL_ADMIN_EMAIL'];
$objEmail->fromName = $GLOBALS['TL_ADMIN_NAME'];
$objEmail->subject = sprintf('Notification', \Idna::decode(\Environment::get('host')));
$objEmail->html = sprintf('Sehr verehrter Kunde,<p>Folgende Datei wurde in Ihrem Liegenschaftsportal hochgeladen und kann jetzt abgerufen werden.</p> ' . $fileStr . '<br/><br/>Mit freundlichen Grüßen<br/>'.$GLOBALS['TL_ADMIN_NAME'], 'Notification', $strUrl, $strUrl . '?token=' . $objNotify->tokenRemove);
$objEmail->sendTo(rtrim($arrUsers,','));
//developer 04.04.17//
}
autoload.php
Code:
<?php
ClassLoader::addClasses(array
(
'Contao\EmailNotificationUser' => 'system/modules/EmailNotificationSystem/classes/EmailNotificationUser.php',
));
config.php
Code:
<?php
$GLOBALS['TL_HOOKS']['postUpload'][] = array('EmailNotificationUser', 'EmailNotificationSystem');
Die Logik hinter der Funktion ist folgende: Es muss eine Mitgliedergruppe mit dem gleichen Namen existieren wie ein Ordner in der Dateiverwaltung. Das einzelne Mitglied muss den Mitgliedergruppen entsprechend zugeordnet sein, damit es die E-Mail-Benachrichtigung erhält. Funktioniert wie gesagt auch, wenn man die Funktion in der FileUpload.php einfügt.
Kann mir irgendjemand einen Tipp geben, was an meinen Dateien nicht stimmt?
Vielen Dank!
Lesezeichen