/**
 * get personal newsletter for person p_id
 *
 * @param
 *          $p_id
 */
function getPersonalNews($p_id)
{
    $user;
    // ???
    $sql = 'SELECT p.name, p.vorname, gp.id gp_id, p.cmsuserid 
          FROM {cdb_person} p, {cdb_gemeindeperson} gp 
          WHERE gp.person_id=p.id and p.id=:id';
    $person = db_query($sql, array(":id" => $p_id))->fetch();
    if (!$person || !$person->cmsuserid) {
        return "";
    }
    if (!($user = user_load($person->cmsuserid))) {
        return "";
    }
    // new persons in group
    $sql_gruppen = 'SELECT gpg.gruppe_id g_id, g.bezeichnung FROM {cdb_gemeindeperson_gruppe} gpg, {cdb_gruppe} g
                  WHERE g.id=gpg.gruppe_id and gpg.status_no>0 AND ((g.abschlussdatum is null) 
                    OR (datediff(g.abschlussdatum,CURRENT_DATE)>-100 ))
                    AND gpg.gemeindeperson_id=' . $person->gp_id . '
                  ORDER BY g.bezeichnung';
    $sql_teilnehmer = 'SELECT vorname, name, gpg.letzteaenderung, gpg.aenderunguser, g.bezeichnung gruppe, gt.bezeichnung gruppentyp, p.id p_id 
        FROM {cdb_person} p, {cdb_gemeindeperson} gp, {cdb_gemeindeperson_gruppe} gpg, {cdb_gruppe} g, {cdb_gruppentyp} gt
                     WHERE p.id=gp.person_id AND gpg.gemeindeperson_id=gp.id AND gpg.gruppe_id=g.id 
                       AND g.gruppentyp_id=gt.id AND gpg.gruppe_id=:gruppen_id
                       AND (datediff(gpg.letzteaenderung,CURRENT_DATE)>=-31)';
    $curtxt = array();
    $resGroups = db_query($sql_gruppen);
    foreach ($resGroups as $group) {
        $resPart = db_query($sql_teilnehmer, array(":gruppen_id" => $group->g_id));
        foreach ($resPart as $p) {
            // TODO: translate, optimize sql requests
            $curtxt[] = _churchdb_a($p->p_id, "{$p->vorname} {$p->name}") . " ({$p->gruppentyp} {$p->gruppe} seit {$p->letzteaenderung}, eingepflegt von {$p->aenderunguser})";
        }
    }
    $txt = "";
    if (count($curtxt)) {
        $txt .= "<h3>Neue Personen in Deinen Gruppen</h3>" . implode("<br/>", $curtxt);
    }
    // please (re?)view following persons
    $sql_teilnehmer = 'SELECT p.id, gp.id gp_id, vorname, name FROM {cdb_person} p, {cdb_gemeindeperson} gp, {cdb_gemeindeperson_gruppe} gpg, {cdb_gruppe} g, {cdb_gruppentyp} gt
       WHERE p.id=gp.person_id and gpg.gemeindeperson_id=gp.id AND gpg.gruppe_id=g.id AND g.gruppentyp_id=gt.id AND gpg.status_no=0
              AND gpg.gruppe_id=:teilnehmer';
    // $sql_beziehung_ich="SELECT * FROM {cdb_beziehung} WHERE vater_id=$p_id AND kind_id=%n AND datum+30>CURRENT_DATE";
    $sql_beziehung_ich = "SELECT COUNT(*) c FROM {cdb_log} WHERE userid='" . $user->cmsuserid . "' AND domain_id=:person_id AND domain_type='person' AND (datediff(datum,CURRENT_DATE)>-100)";
    $sql_beziehung_alle = "SELECT COUNT(*) c FROM {cdb_log} WHERE domain_id=:person_id AND domain_type='person' AND (datediff(datum,CURRENT_DATE)>-100)";
    $sql_gruppentreffen = "SELECT COUNT(gt.id) c FROM {cdb_gruppentreffen_gemeindeperson} gtgp, {cdb_gruppentreffen} gt \n                          WHERE gtgp.gruppentreffen_id=gt.id AND datumbis+30>CURRENT_DATE AND gt.gruppe_id=:g_id AND gtgp.gemeindeperson_id=:gp_id";
    $res = db_query($sql_gruppen);
    $curtxt = array();
    foreach ($res as $arr) {
        $res2 = db_query($sql_teilnehmer, array(":teilnehmer" => $arr->g_id));
        $txt2 = array();
        foreach ($res2 as $p) {
            $count_ich = db_query($sql_beziehung_ich, array(":person_id" => $p->id))->fetch();
            $count_bez_alle = db_query($sql_beziehung_alle, array(":person_id" => $p->id))->fetch();
            $count_gruppentreffen = db_query($sql_gruppentreffen, array(":g_id" => $arr->g_id, ":gp_id" => $p->id))->fetch();
            if ($count_ich->c == 0 && $count_bez_alle->c < 3 && $count_gruppentreffen->c == 0) {
                $txt2[] = _churchdb_a($p->id, $p->vorname . " " . $p->name) . " ({$count_bez_alle->c}/{$count_gruppentreffen->c})";
            }
        }
        if (count($txt2)) {
            $curtxt[] = "<i>In Gruppe {$arr->bezeichnung}</i><br/>" . implode("<br/>", $txt2);
        }
    }
    if (!$curtxt) {
        $txt .= "<br/><h3>Folgende Personen bitte einmal anschauen</h3>" . implode("<br/>", $curtxt);
    }
    // Geburtstage
    // TODO: why select in select???
    $sql_geb = "SELECT * FROM (\n                SELECT person_id, datediff(DATE_ADD(geburtsdatum,INTERVAL (year(curdate())-year(geburtsdatum)) year),curdate()) as diff, name, \n                       vorname, geburtsdatum, (year(curdate())-year(geburtsdatum) - (RIGHT(CURDATE(),5)<RIGHT(geburtsdatum,5))) as 'alter'\n                FROM {cdb_person} p, {cdb_gemeindeperson} gp, {cdb_gemeindeperson_gruppe} gpg\n                WHERE p.id=gp.person_id AND geburtsdatum is not null AND gpg.gemeindeperson_id=gp.id\n                AND gpg.gruppe_id=:gp_id) \n      as t WHERE t.diff>=0 AND t.diff<=31 ORDER BY t.diff";
    // ORDER BY t.diff, MONTH(geburtsdatum ), DAYOFMONTH(geburtsdatum ), name, vorname";
    $res = db_query($sql_gruppen);
    $curtxt = array();
    foreach ($res as $arr) {
        $res2 = db_query($sql_geb, array(":gp_id" => $arr->g_id));
        $txt2 = "";
        foreach ($res as $p) {
            $txt2 = $txt2 . _churchdb_a($p->person_id, "{$p->vorname} {$p->name}") . " {$p->geburtsdatum} (in {$p->diff} Tagen) <br/>";
        }
        if ($txt2) {
            $curtxt[] = "<i>In Gruppe {$arr->bezeichnung}</i><br/>{$txt2}<br/>";
        }
    }
    if ($curtxt) {
        $txt .= "<br/><h3>Geburtstage Deiner Personen in den n&auml;chsten 31 Tagen</h3>" . implode("<br/>", $curtxt);
    }
    $sql_teilnehmer = "SELECT vorname, name, c.text, c.datum, c.userid, p.id p_id FROM {cdb_person} p, {cdb_gemeindeperson} gp, {cdb_gemeindeperson_gruppe} gpg, {cdb_gruppe} g, {cdb_gruppentyp} gt, {cdb_comment} c\n       WHERE p.id=gp.person_id AND gpg.gemeindeperson_id=gp.id AND gpg.gruppe_id=g.id AND g.gruppentyp_id=gt.id\n              AND gpg.gruppe_id=:g_id AND c.comment_viewer_id=0 AND c.relation_id=p.id AND c.relation_name='person' AND (datediff(c.datum,CURRENT_DATE)>=-31) \n               ORDER BY c.datum desc";
    $res = db_query($sql_gruppen);
    $curtxt = array();
    foreach ($res as $arr) {
        $res2 = db_query($sql_teilnehmer, array(":g_id" => $arr->g_id));
        foreach ($res2 as $p) {
            $curtxt[] = _churchdb_a($p->p_id, "{$p->vorname} {$p->name}") . " - \"{$p->text}\" ({$p->datum} von {$p->userid})<br/>";
        }
    }
    if (count($curtxt)) {
        $txt .= "<br/><h3>Neue Kommentare zu Deinen Personen</h3>" . implode("<br/>", $curtxt);
    }
    if ($txt) {
        $txt = "<div style=\"margin:3px;padding:5px\"><h2>Persönliche Infos für {$person->vorname} {$person->name}</h2>{$txt}</div>";
    }
    return $txt;
}
/**
 * get personal newsletter for person p_id
 *
 * @param int $p_id
 */
function getPersonalNews($p_id)
{
    $person = db_query('
      SELECT p.name, p.vorname, gp.id gp_id, p.cmsuserid
      FROM {cdb_person} p, {cdb_gemeindeperson} gp
      WHERE gp.person_id=p.id and p.id=:id', array(":id" => $p_id))->fetch();
    if (!$person || !$person->cmsuserid) {
        return "";
    }
    if (!($user = user_load($person->cmsuserid))) {
        return "";
    }
    // new persons in group
    $sql_gruppen = 'SELECT gpg.gruppe_id g_id, g.bezeichnung FROM {cdb_gemeindeperson_gruppe} gpg, {cdb_gruppe} g
                  WHERE g.id=gpg.gruppe_id and gpg.status_no>0 AND ((g.abschlussdatum is null)
                    OR (datediff(g.abschlussdatum,CURRENT_DATE)>-100 ))
                    AND gpg.gemeindeperson_id=' . $person->gp_id . '
                  ORDER BY g.bezeichnung';
    $sql_teilnehmer = 'SELECT vorname, name, gpg.letzteaenderung, gpg.aenderunguser, g.bezeichnung gruppe, gt.bezeichnung gruppentyp, p.id p_id
        FROM {cdb_person} p, {cdb_gemeindeperson} gp, {cdb_gemeindeperson_gruppe} gpg, {cdb_gruppe} g, {cdb_gruppentyp} gt
                     WHERE p.id=gp.person_id AND gpg.gemeindeperson_id=gp.id AND gpg.gruppe_id=g.id
                       AND g.gruppentyp_id=gt.id AND gpg.gruppe_id=:gruppen_id
                       AND (datediff(gpg.letzteaenderung,CURRENT_DATE)>=-31)';
    $curtxt = array();
    $resGroups = db_query($sql_gruppen);
    foreach ($resGroups as $group) {
        $resPart = db_query($sql_teilnehmer, array(":gruppen_id" => $group->g_id));
        foreach ($resPart as $p) {
            // TODO: translate, optimize sql requests
            $curtxt[] = _churchdb_a($p->p_id, "{$p->vorname} {$p->name}") . " ({$p->gruppentyp} {$p->gruppe} seit {$p->letzteaenderung}, eingepflegt von {$p->aenderunguser})";
        }
    }
    $txt = "";
    if (count($curtxt)) {
        $txt .= "<h3>" . t('new.persons.in.your.groups') . "</h3>" . implode("<br/>", $curtxt);
    }
    // please (re?)view following persons
    $sql_teilnehmer = '
    SELECT p.id, gp.id gp_id, vorname, name
    FROM {cdb_person} p, {cdb_gemeindeperson} gp, {cdb_gemeindeperson_gruppe} gpg, {cdb_gruppe} g, {cdb_gruppentyp} gt
    WHERE p.id=gp.person_id and gpg.gemeindeperson_id=gp.id AND gpg.gruppe_id=g.id AND g.gruppentyp_id=gt.id AND gpg.status_no=0
      AND gpg.gruppe_id=:teilnehmer';
    // $sql_beziehung_ich="SELECT * FROM {cdb_beziehung} WHERE vater_id=$p_id AND kind_id=%n AND datum+30>CURRENT_DATE";
    $sql_beziehung_ich = "\n    SELECT COUNT(*) c\n    FROM {cdb_log}\n    WHERE userid='" . $user->cmsuserid . "' AND domain_id=:person_id AND domain_type='person' AND (datediff(datum,CURRENT_DATE)>-100)";
    $sql_beziehung_alle = "\n    SELECT COUNT(*) c\n    FROM {cdb_log}\n    WHERE domain_id=:person_id AND domain_type='person' AND (datediff(datum,CURRENT_DATE)>-100)";
    $sql_gruppentreffen = "\n    SELECT COUNT(gt.id) c\n    FROM {cdb_gruppentreffen_gemeindeperson} gtgp, {cdb_gruppentreffen} gt\n    WHERE gtgp.gruppentreffen_id=gt.id AND datumbis+30>CURRENT_DATE AND gt.gruppe_id=:g_id AND gtgp.gemeindeperson_id=:gp_id";
    $res = db_query($sql_gruppen);
    $curtxt = array();
    foreach ($res as $arr) {
        $res2 = db_query($sql_teilnehmer, array(":teilnehmer" => $arr->g_id));
        $txt2 = array();
        foreach ($res2 as $p) {
            $count_ich = db_query($sql_beziehung_ich, array(":person_id" => $p->id))->fetch();
            $count_bez_alle = db_query($sql_beziehung_alle, array(":person_id" => $p->id))->fetch();
            $count_gruppentreffen = db_query($sql_gruppentreffen, array(":g_id" => $arr->g_id, ":gp_id" => $p->id))->fetch();
            if ($count_ich->c == 0 && $count_bez_alle->c < 3 && $count_gruppentreffen->c == 0) {
                $txt2[] = _churchdb_a($p->id, $p->vorname . " " . $p->name) . " ({$count_bez_alle->c}/{$count_gruppentreffen->c})";
            }
        }
        if (count($txt2)) {
            $curtxt[] = "<i>" . t('in.group.x', $arr->bezeichnung) . "</i><br/>" . implode("<br/>", $txt2);
        }
    }
    if (!$curtxt) {
        $txt .= "<br/><h3>" . t('please.look.at.this.persons') . "</h3>" . implode("<br/>", $curtxt);
    }
    // Geburtstage
    // TODO: why select in select???
    $sql_geb = "SELECT * FROM (\n                SELECT person_id, DATEDIFF(DATE_ADD(geburtsdatum,INTERVAL (YEAR(CURDATE())-YEAR(geburtsdatum)) year),CURDATE()) AS diff, name,\n                       vorname, geburtsdatum, (YEAR(CURDATE())-YEAR(geburtsdatum) - (RIGHT(CURDATE(),5)<RIGHT(geburtsdatum,5))) AS 'alter'\n                FROM {cdb_person} p, {cdb_gemeindeperson} gp, {cdb_gemeindeperson_gruppe} gpg\n                WHERE p.id=gp.person_id AND geburtsdatum is not null AND gpg.gemeindeperson_id=gp.id\n                AND gpg.gruppe_id=:gp_id\n              ) AS t WHERE t.diff>=0 AND t.diff<=31\n              ORDER BY t.diff";
    // ORDER BY t.diff, MONTH(geburtsdatum ), DAYOFMONTH(geburtsdatum ), name, vorname";
    $res = db_query($sql_gruppen);
    $curtxt = array();
    foreach ($res as $arr) {
        $res2 = db_query($sql_geb, array(":gp_id" => $arr->g_id));
        $txt2 = "";
        foreach ($res as $p) {
            $txt2 = $txt2 . _churchdb_a($p->person_id, "{$p->vorname} {$p->name}") . " {$p->geburtsdatum} (in {$p->diff} Tagen) <br/>";
        }
        if ($txt2) {
            $curtxt[] = "<i>" . t('in.group.x', $arr->bezeichnung) . "</i><br/>{$txt2}<br/>";
        }
    }
    if ($curtxt) {
        $txt .= "<br/><h3>" . t('birthdays.of.your.persons.in.next.31.days') . "</h3>" . implode("<br/>", $curtxt);
    }
    $sql_teilnehmer = "\n    SELECT vorname, name, c.text, c.datum, c.userid, p.id p_id FROM {cdb_person} p, {cdb_gemeindeperson} gp,\n      {cdb_gemeindeperson_gruppe} gpg, {cdb_gruppe} g, {cdb_gruppentyp} gt, {cdb_comment} c\n    WHERE p.id=gp.person_id AND gpg.gemeindeperson_id=gp.id AND gpg.gruppe_id=g.id AND g.gruppentyp_id=gt.id\n      AND gpg.gruppe_id=:g_id AND c.comment_viewer_id=0 AND c.relation_id=p.id AND c.relation_name='person'\n      AND (datediff(c.datum,CURRENT_DATE)>=-31)\n    ORDER BY c.datum DESC";
    $res = db_query($sql_gruppen);
    $curtxt = array();
    foreach ($res as $arr) {
        $res2 = db_query($sql_teilnehmer, array(":g_id" => $arr->g_id));
        foreach ($res2 as $p) {
            $curtxt[] = _churchdb_a($p->p_id, "{$p->vorname} {$p->name}") . " - \"{$p->text}\" ({$p->datum} von {$p->userid})<br/>";
        }
    }
    if (count($curtxt)) {
        $txt .= "<br/>\n        <h3>" . t('new.comments.to.your.persons') . "</h3>" . implode("<br/>", $curtxt);
    }
    if ($txt) {
        $txt = "\n      <div style=\"margin:3px;padding:5px\">\n        <h2>" . t('personal.information.for.x', $person->vorname . ' ' . $person->name) . "</h2>\n        {$txt}\n      </div>" . NL;
    }
    return $txt;
}