[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
REDAXO Forum • Community AddOn / XForm: E-Mail bei Freischaltung
Seite 1 von 1

Community AddOn / XForm: E-Mail bei Freischaltung

Verfasst: 4. Jun 2013, 15:25
von derLampe
Ein neu registrierter Community-User erhält zunächst den Status "zugang wurde angefragt" und soll vom Admin im Backend freigeschaltet werden. Lässt sich die dann erfolgende Änderung des Status bzw. allgemein einex XForm-Feldes irgendwie updatesicher abfragen und eine Zusatzprogrammierung durchführen z.B. eine Info-Mail verschicken? Falls nicht, wie wäre euer Ansatz für eine Hardcodierung in XForm?

Re: Community AddOn / XForm: E-Mail bei Freischaltung

Verfasst: 4. Jun 2013, 16:07
von Xong
Hi!
derLampe hat geschrieben:Lässt sich die dann erfolgende Änderung des Status bzw. allgemein einex XForm-Feldes irgendwie updatesicher abfragen [...]
Was meinst du mit "updatesicher"?
derLampe hat geschrieben:[...] und eine Zusatzprogrammierung durchführen z.B. eine Info-Mail verschicken? Falls nicht, wie wäre euer Ansatz für eine Hardcodierung in XForm?
Ich würde einfach die Listenansicht (rex_list) der User-Tabelle über Extensionpoints so erweitern, dass du eine weitere Spalte einbauen kannst. Über die kannst du dann mit nur einem Klick den User freischalten und eine E-Mail verschicken.

Re: Community AddOn / XForm: E-Mail bei Freischaltung

Verfasst: 4. Jun 2013, 16:24
von derLampe
Mit "updatesicher" meine ich eben mit sowas wie Extensionpoints zu arbeiten und nicht direkt in dem XForm-Manager-Addon rumzubauen, was beim nächsten XForm-Update verloren wäre.

Danke für den Tipp. Dann werde ich mir mal die Extensionpoints zu Gemüte führen...gibts zufällig ein Addon bei dem man sich was in der Richtung abschauen kann?

Re: Community AddOn / XForm: E-Mail bei Freischaltung

Verfasst: 4. Jun 2013, 17:09
von Xong
Hi!
derLampe hat geschrieben:gibts zufällig ein Addon bei dem man sich was in der Richtung abschauen kann?
Das ist nicht besonders schwer. Hier mal ein Beispielcode:

Code: Alles auswählen

function rr_extended_list($_params)
{
  global $REX, $I18N;
  
  if(rex_get('func') == 'activate' AND ($id = rex_get('id', 'int')))
  {
    $active = rex_get('active', 'int');
    $sql = rex_sql::factory();
    $sql->setTable($_params['subject']->params['table_name']);
    $sql->setWhere('id='.$id);
    $sql->setValue('active', $active);
    $sql->update();
    
    header('Location: '.str_replace('&', '&', $_params['subject']->getUrl()));
    exit;
  }
  
  $_params['subject']->removeColumn('active');
  $_params['subject']->addColumn('active', '', 50, array('<th class="active">###VALUE###</th>','<td class="active status-###active###">###VALUE###</td>'));
  $_params['subject']->setColumnFormat('active' ,'custom', create_function(
    '$params',
    '$list = $params["list"];
     if($list->getValue("active") == 1)
     {
      $active = 0;
      $color = "#0a0";
      $text = "online";
     }
     else
     {
      $active = 1;
      $color = "#a00";
      $text = "offline";
     }

     return \'<a style="color:\'.$color.\'" href="\'.$list->getUrl(array("func" => "activate", "active" => $active, "id" => "###id###")).\'">\'.$text.\'</a>\';'
  ));
  
  return $_params['subject'];
}
Der Code bindet eine Spalte in einer XForm-Tabelle im Backend ein, mit der man einen Datensatz auf offline oder online setzen kann. Vorrausetzung ist eine Spalte active, die die Werte 0 oder 1 fasst.

Mit folgendem Code hängt man sich in den EP ein:

Code: Alles auswählen

rex_register_extension('EM_DATA_LIST', 'rr_extended_list');
Beachte, dass dieser Code bei jeder Tabelle Backend die Spalte einbindet. Wenn du das bei einer bestimmten Tabelle haben möchtest, musst du vorher $_params['subject']->params['table_name'] abfragen.

Der Code ist leicht veraltet, weil dieser noch für das Addon Editme, also den Vorgänger von XForm, geschrieben wurde. Der aktuelle EP heißt XFORM_DATA_LIST.

Ein anderes Beispiel, bei dem sich in XForm-EPs eingehängt wird, findest du beim Plugin reindex von RexSearch: https://github.com/xong/rexsearch/blob/ ... ig.inc.php

Re: Community AddOn / XForm: E-Mail bei Freischaltung

Verfasst: 5. Jun 2013, 13:12
von derLampe
Klasse, danke. Hat bestens funktioniert!

Re: Community AddOn / XForm: E-Mail bei Freischaltung

Verfasst: 30. Mär 2016, 19:56
von steri
Hallo,
bin grad dran so was ähnliches zu machen - nur soll das email per email programm gesendet werden und ich muss vorher an die ID des Eintrags kommen um noch bei einer anderen tabelle die email abrufen zu können.

das mit dem per email programm ist ja kein problem - aber der platzhalter ###id### wird ja erst nach der Funktion getauscht - d.h. in der sql abfrage kommt immer ###id### statt der zahl

Code: Alles auswählen

function format_id($params)
{
  $id = '###id###';
  echo $id;

$sql = "SELECT rex_com_user.user_email, rex_veranstaltungen.veranstalter_email, rex_veranstaltungen.veranstalter_email FROM rex_veranstaltungen JOIN rex_com_user ON rex_veranstaltungen.user_id = rex_com_user.id WHERE rex_veranstaltungen.id=".$id."";
$db->setQuery($sql);


if ($db->getRows() == 0){
    $email = $db->getValue('user_email');
    }
  
  return '<a href="mailto:'.$email.'?subject=Bestaetigung%20Eintrag">Bestaetigung<span style="color:#EFF9F9;">|</span>mailen</a><span style="color:#EFF9F9;">|</span>';
}

rex_register_extension('XFORM_DATA_LIST','my_rex_list_tweaks');
function my_rex_list_tweaks($params)
{
  $list = $params['subject'];
  $list->setColumnFormat('backend','custom','format_id');
}
Gibt es da eine Möglichkeit?

danke!

Re: Community AddOn / XForm: E-Mail bei Freischaltung

Verfasst: 1. Apr 2016, 15:34
von steri
so gehts - der code von xong hat mich auf die spur gebracht

Code: Alles auswählen

function format_id($params)
{     
    $list = $params["list"];
     echo 'id: '.$list->getValue("id").'<br>';
}