Ergebnis 1 bis 6 von 6

Thema: System.php updatesicher erweitern?

  1. #1
    Contao-Nutzer
    Registriert seit
    04.11.2009.
    Beiträge
    111

    Standard System.php updatesicher erweitern?

    Hallo zusammen,

    ich habe folgendes Szenario:

    Bei der Anmeldung zu Newslettern und überall sonst, wo eine E-Mail-Validierung stattfindet, soll verhindert werden, dass E-Mails einer bestimmten Top-Level-Domain erlaubt werden. Um es schnell und pragmatisch zu lösen, habe ich die Methode isValidEmail() in System.php um die entsprechende Prüfung erweitert. Dies ist allerdings nicht updatesicher.

    Wie kann ich die System.php für diesen Zweck updatesicher erweitern?

    Herzliche Grüße

    Christian

  2. #2
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.945

    Standard

    Du könntest für die die Formularfelder einen eigenen Validierungs-Typ zur Verfügung stellen (zu $GLOBALS['TL_DCA']['tl_form_field']['fields']['rgxp']['eval']['rgxp'] hinzufügen) und bei den Stellen im Backend den jeweiligen Eintrag im DCA umdefinieren und einen
    anderen Wert bei ['eval']['rgxp'] einsetzen, der dann via addCustomRegExp-Hook Deine Methode aufruft um die E-Mail-Adresse zu validieren.
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  3. #3
    Contao-Nutzer
    Registriert seit
    04.11.2009.
    Beiträge
    111

    Standard

    Hallo fiedsch,

    danke für Deine Antwort. Aber greift diese Formular-Validierung denn überhaupt, wenn ich ein normales NewsletterSubscribeModul habe? Im ModuleSubscribe.php wird die valide E-Mail-Adresse nicht über das Formularfeld, sondern in der Methode addRecipient() geprüft. Dort greift er dann auf die isValidEmail() der System.php zu.

    PHP-Code:
    protected function addRecipient()
        {
            
    $arrChannels $this->Input->post('channels');
            
    $arrChannels array_intersect($arrChannels$this->nl_channels); // see #3240

            // Check the selection
            
    if (!is_array($arrChannels) || empty($arrChannels))
            {
                
    $_SESSION['SUBSCRIBE_ERROR'] = $GLOBALS['TL_LANG']['ERR']['noChannels'];
                
    $this->reload();
            }

            
    $varInput $this->idnaEncodeEmail($this->Input->post('email'true));

            
    // Validate e-mail address
            
    if (!$this->isValidEmailAddress($varInput))
            {
                
    $_SESSION['SUBSCRIBE_ERROR'] = $GLOBALS['TL_LANG']['ERR']['email'];
                
    $this->reload();
            } 
    Daher meine Idee, die System.php zu erweitern, um das global abfangen zu können. Meine eigenen generierten Formulare greifen dann über den $GLOBALS['TL_HOOKS']['validateFormField'][] ebenfalls auf diese Methode der System.php zu.

    Viele Grüße

    Christian

  4. #4
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.794

    Standard

    Du könntest die modifizierte System.php in Dein Modulverzeichnis kopieren und Deinen namespace in der System.php eintragen. Hat bei mir wunderbar mit der BackendUser.php geklappt, die ich um eine weitere Methode ergänzt hatte. Ich wollte nicht nur lesend auf die Rechte-Arrays zugreifen, sondern auch schreibend. So kann ich die Rechteverwaltung von Contao mit meiner eigenen Rechteverwaltung ergänzen.
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  5. #5
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.945

    Standard

    Zitat Zitat von dillscher Beitrag anzeigen
    danke für Deine Antwort. Aber greift diese Formular-Validierung denn überhaupt, wenn ich ein normales NewsletterSubscribeModul habe? Im ModuleSubscribe.php wird die valide E-Mail-Adresse nicht über das Formularfeld, sondern in der Methode addRecipient() geprüft. Dort greift er dann auf die isValidEmail() der System.php zu.
    OK, soweit hatte ich mir das gar nicht angeschaut. Dann sollte es aber auch reichen, das ModuleSubscribe zu erweitern und dort etwas wie das folgende zu machen:

    PHP-Code:
    class ModuleRestrictedSubscribe 
    {
      public function 
    compile()
      {
        if (\
    Input::post('FORM_SUBMIT') == 'tl_subscribe')    
        {
          
    $is_valid_address /* prüfen und z.B. bestimmte Domains als ungültig befinden */;
          if (!
    $is_valid_address) {
            
    $_SESSION['SUBSCRIBE_ERROR'] = 'Deine Fehlermeldung';
            
    $this->reload();
          }
        }
        
    parent::compile();
      }

    und bei den "echten" Formularen machst Du die Prüfung der E-Mail-Adresse Hook.
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  6. #6
    Contao-Nutzer
    Registriert seit
    04.11.2009.
    Beiträge
    111

    Standard

    Hallo fiedsch,

    werde es wohl so machen, wie von Dir beschrieben. Hatte eben gehofft, das sich eine globale Erweiterung der System.php auch updatesicher bewerkstelligen lässt, um dies eben an einer zentralen Stelle zu tun.

    Viele Grüße

    Christian

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •