Skip to content
This repository has been archived by the owner on Nov 3, 2023. It is now read-only.

SaveCallback für disable Feld bei tl_member verhält sich nicht konsistent #8043

Closed
Fuzzyma opened this issue Sep 30, 2015 · 5 comments
Closed
Assignees
Labels
Milestone

Comments

@Fuzzyma
Copy link

Fuzzyma commented Sep 30, 2015

Wenn der SaveCallback ganz normal über das Speichern-Feld des Datensatzes aufgerufen wird, kann man den bearbeiteten Datensatz über den dca-parameter rausbekommen ($dc->id).
Wird der Callback jedoch über den toggle-button aufgerufen, mit dem man member aktivieren/deaktivieren kann, gibt $dc->id NULL zurück, weil im DC_Table-Objekt die Eigenschaft intId nicht/falsch gesetzt wird.
Die wird nämlich im Konstruktor über $this->intId = \Input::get('id'); gesetzt. Der toggle-button übergib aber in diesem Fall nur eine tid und keine id, was zu diesem fehlerhaften Verhalten führt.

Meiner Meinung nach, sollten sich beide Fälle gleich verhalten.

Auch der erste Parameter ist konfus (bei normalen Speichern '' bzw '1' und über toggle true und false). true und false sind hier beim toggle sogar noch vertauscht. true beim aktivieren bzw '' beim aktivieren. Wie soll man da rausbekommen, was denn nun richtig ist?

Ich vermute den "bug" (wenns denn einer ist) in dieser Zeile, wo der SaveCallback aufgerufen wird. Dort sollte eventuell nicht

$blnVisible = $this->$callback[0]->$callback[1]($blnVisible, ($dc ?: $this));

sondern

$blnVisible = $this->$callback[0]->$callback[1](!$blnVisible, ($dc ?: $this));

stehen.
Außerdem sollte vorher die id im $dc gesetzt werden

@leofeyer leofeyer added the defect label Oct 5, 2015
@leofeyer leofeyer added this to the 3.5.4 milestone Oct 5, 2015
@leofeyer
Copy link
Member

leofeyer commented Oct 8, 2015

Den einzigen Fehler, den ich hier eventuell erkenne, ist das $dc->id leer ist. Wie genau kann ich den Fall reproduzieren?

@leofeyer leofeyer removed the defect label Oct 8, 2015
@leofeyer leofeyer removed this from the 3.5.4 milestone Oct 8, 2015
@Fuzzyma
Copy link
Author

Fuzzyma commented Oct 8, 2015

ich habe mir die einfach ausgeben lassen (var_dump() und die()). Entweder beim normalen Speichern (da war sie vorhanden) oder aber beim enable/disable-icon (da habe ich mir den Antwort-Body über die JS Konsole angeguckt weils ja Ajax ist).

Ich finde es durchaus merkwürdig, dass der Wert im save_callback zwischen true, false, '' und '1' schwanken kann. Naja dadurch weiß man wenigstens woher der call kommt - vll auch nicht so schlecht

@leofeyer
Copy link
Member

leofeyer commented Oct 8, 2015

ich habe mir die einfach ausgeben lassen (var_dump() und die()).

Ja, aber wie genau? Ich möchte mir das hier gerne nachstellen.

@Fuzzyma
Copy link
Author

Fuzzyma commented Oct 8, 2015

Eigenes Modul mit Hook. dca für tl_member.php:

$GLOBALS['TL_DCA']['tl_member']['fields']['disable']['save_callback'][]  = array('MailOnActivation', 'activate');

class MailOnActivation extends tl_member{

    public function activate($varAktiv, $dc)
    {   
        var_dump($dc->id); die();
        if($varAktiv === true || $varAktiv === '' && \MemberModel::findByPk($dc->id)->disable == '1'){
            $this->sendMemberWasActivatedMail($dc->id);
        }

        return $varAktiv; 
    }


    public function sendMemberWasActivatedMail($memberId){

        // send Mail

    }

}

Ich habe den core gehackt um die ID hinzuzufügen - jetzt gehts

@leofeyer leofeyer added this to the 3.5.5 milestone Nov 12, 2015
@leofeyer leofeyer self-assigned this Nov 12, 2015
@leofeyer
Copy link
Member

Behoben in 1c3a5e5.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

No branches or pull requests

2 participants