Example #1
0
/**
 * meeting request
 *
 * @param unknown $cal_id
 * @param unknown $params
 */
function churchcal_handleMeetingRequest($cal_id, $params)
{
    global $base_url, $user;
    $i = new CTInterface();
    $i->setParam("cal_id");
    $i->setParam("person_id");
    $i->setParam("mailsend_date");
    $i->setParam("event_date");
    $dt = new DateTime();
    foreach ($params["meetingRequest"] as $id => $param) {
        $param["mailsend_date"] = $dt->format('Y-m-d H:i:s');
        $param["person_id"] = $id;
        $param["event_date"] = $params["startdate"];
        $param["cal_id"] = $cal_id;
        $db = db_query('SELECT mr.*, c.modified_pid, c.bezeichnung
                  FROM {cc_meetingrequest} mr, {cc_cal} c
                  WHERE c.id=mr.cal_id and mr.person_id=:person_id and mr.cal_id=:cal_id', array(":person_id" => $param["person_id"], ":cal_id" => $param["cal_id"]))->fetch();
        if (!$db) {
            db_insert("cc_meetingrequest")->fields($i->getDBInsertArrayFromParams($param))->execute(false);
            // if person was not yet invited to churchtools send invitation
            $p = db_query("SELECT name, vorname, IF(spitzname, spitzname, vorname) AS nickname,\n                          IF (password IS NULL AND loginstr IS NULL AND lastlogin IS NULL,1,0) as invite\n                      FROM {cdb_person}\n                      WHERE id=:id", array(":id" => $id))->fetch();
            $cal = db_query('SELECT c.* FROM {cc_cal} c
                        WHERE c.id=:cal_id', array(":cal_id" => $param["cal_id"]))->fetch();
            if ($p) {
                $data = array('p' => $p, 'caption' => $cal->bezeichnung, 'date' => churchcore_CCEventData2String($cal), 'loginUrl' => $base_url . "?q=home&id={$id}&loginstr=" . churchcore_createOnTimeLoginKey($id));
                if ($data['invite'] = $p->invite) {
                    include_once CHURCHDB . '/churchdb_ajax.php';
                    churchdb_invitePersonToSystem($id);
                }
                // get populated template and send email
                $lang = getUserLanguage($id);
                $content = getTemplateContent('email/meetingRequest', 'churchcal', $data, null, $lang);
                churchcore_sendEMailToPersonIDs($id, "[" . getConf('site_name') . "] " . t2($lang, 'new.meeting.request'), $content, null, true);
            }
        } else {
            /*
             * db_update("cc_meetingrequest")
             *  ->fields($i->getDBInsertArrayFromParams($param))
             *  ->condition("person_id",
             * $param["person_id"], "=")
             *  ->condition("cal_id", $param["cal_id"], "=")
             *  ->execute(false);
             * churchcore_sendEMailToPersonIDs($id, "[".getConf('site_name')."] Anpassung in einer Termin-Anfrage", "anpassung", null, true);
             */
        }
    }
}
function churchcal_handleMeetingRequest($cal_id, $params)
{
    global $base_url, $user;
    $i = new CTInterface();
    $i->setParam("cal_id");
    $i->setParam("person_id");
    $i->setParam("mailsend_date");
    $i->setParam("event_date");
    $dt = new DateTime();
    foreach ($params["meetingRequest"] as $id => $param) {
        $param["mailsend_date"] = $dt->format('Y-m-d H:i:s');
        $param["person_id"] = $id;
        $param["event_date"] = $params["startdate"];
        $param["cal_id"] = $cal_id;
        $db = db_query('select mr.*, c.modified_pid from {cc_meetingrequest} mr, {cc_cal} c where 
         c.id=mr.cal_id and mr.person_id=:person_id and mr.cal_id=:cal_id', array(":person_id" => $param["person_id"], ":cal_id" => $param["cal_id"]))->fetch();
        if ($db == false) {
            db_insert("cc_meetingrequest")->fields($i->getDBInsertArrayFromParams($param))->execute(false);
            $txt = "<h3>Hallo [Spitzname]!</h3><p>";
            $txt .= "<P>Du wurdest auf " . variable_get('site_name', 'ChurchTools');
            $txt .= ' von <i>' . $user->vorname . " " . $user->name . "</i>";
            $txt .= " f&uuml;r einen Termin angefragt. ";
            $db = db_query("select if (password is null and loginstr is null and lastlogin is null,1,0) as invite from {cdb_person}\n               where id=:id", array(":id" => $id))->fetch();
            if ($db !== false) {
                if ($db->invite == 1) {
                    include_once CHURCHDB . '/churchdb_ajax.php';
                    churchdb_invitePersonToSystem($id);
                    $txt .= "Da Du noch nicht kein Zugriff auf das System hast, bekommst Du noch eine separate E-Mail, mit der Du Dich dann anmelden kannst!";
                }
                $txt .= "<p>Zum Zu- oder Absagen bitte hier klicken:";
                $loginstr = churchcore_createOnTimeLoginKey($id);
                $txt .= '<p><a href="' . $base_url . '?q=home&id=' . $id . '&loginstr=' . $loginstr . '" class="btn btn-primary">%sitename aufrufen</a>';
                churchcore_sendEMailToPersonids($id, "[" . variable_get('site_name', 'ChurchTools') . "] Neue Termin-Anfrage", $txt, null, true);
            }
        } else {
            /*      db_update("cc_meetingrequest")
                    ->fields($i->getDBInsertArrayFromParams($param))
                    ->condition("person_id", $param["person_id"], "=")
                    ->condition("cal_id", $param["cal_id"], "=")
                    ->execute(false);
                  churchcore_sendEMailToPersonids($id, "[".variable_get('site_name', 'ChurchTools')."] Anpassung in einer Termin-Anfrage", "anpassung", null, true);*/
        }
    }
}
 public function sendInvitationMail($params)
 {
     churchdb_invitePersonToSystem($params["id"], $_SESSION["user"]);
 }
/**
 * info for pending requests
 * TODO: rename churchservice_openservice_rememberdays, f.e. to sendOpenServiceRememberMail
 * TODO: could sql queries be reduced?
 */
function churchservice_openservice_rememberdays()
{
    global $base_url;
    include_once "churchservice_db.php";
    $delay = (int) getConf('churchservice_openservice_rememberdays');
    $dt = new datetime();
    // get ONE eventService needed to send (not yet send or still pending).
    // from persons having an email ??und auch gemappt wurde??.
    //   $sql = "SELECT es.id, p.id p_id, p.vorname, p.email, es.modified_pid,
    //             IF (password IS NULL AND loginstr IS NULL AND lastlogin IS NULL,1,0) AS invite
    //           FROM {cs_eventservice} es, {cs_event} e, {cc_cal} cal, {cs_service} s, {cdb_person} p
    //           WHERE e.valid_yn=1 AND e.cc_cal_id=cal.id AND es.valid_yn=1 AND es.zugesagt_yn=0
    //             AND es.cdb_person_id IS NOT NULL AND es.service_id=s.id AND s.sendremindermails_yn=1
    //             AND es.event_id=e.id AND e.Startdate>=current_date
    //             AND ((es.mailsenddate IS NULL) OR (DATEDIFF(current_date,es.mailsenddate)>=$delay))
    //             AND p.email!='' AND p.id=es.cdb_person_id LIMIT 1";
    $sql = "SELECT es.id, p.id p_id, p.vorname, p.spitzname, p.name, p.email, es.modified_pid,\n            IF (password IS NULL AND loginstr IS NULL AND lastlogin IS NULL,1,0) AS invite\n          FROM {cs_eventservice} es, {cs_event} e, {cc_cal} cal, {cs_service} s, {cdb_person} p\n          WHERE e.valid_yn=1 AND e.cc_cal_id=cal.id AND es.valid_yn=1 AND es.zugesagt_yn=0\n            AND es.cdb_person_id IS NOT NULL AND es.service_id=s.id AND s.sendremindermails_yn=1\n            AND es.event_id=e.id AND e.Startdate>=current_date\n            AND ((es.mailsenddate IS NULL) OR (DATEDIFF(current_date,es.mailsenddate)>={$delay}))\n            AND p.email!='' AND p.id=es.cdb_person_id\n          GROUP BY p_id";
    //group to get each person only once, so querying all together dont interfere with the other services of the same person
    $usersToMail = db_query($sql);
    $i = 0;
    // process only 15 services to prevent too many mails at once
    while ($i++ < 15 && ($u = $usersToMail->fetch())) {
        $data = array('inviter' => churchcore_getPersonById($u->modified_pid), 'url' => "{$base_url}?q=home&id={$u->p_id}&loginstr=" . churchcore_createOnTimeLoginKey($u->p_id), 'requestedServices' => array(), 'approvedServices' => array(), 'user' => $u, 'nickname' => $u->spitzname ? $u->spitzname : $u->vorname);
        // Person was not yet invited -> send invitation.
        if ($u->invite == 1) {
            include_once CHURCHDB . '/churchdb_ajax.php';
            churchdb_invitePersonToSystem($u->p_id);
        }
        $servicesOfPerson = db_query("\n       SELECT es.id AS id, es.zugesagt_yn AS approved, cal.bezeichnung AS event, DATE_FORMAT(e.startdate, '%d.%m.%Y %H:%i') AS datum,\n         e.id AS event_id, s.bezeichnung AS service, sg.bezeichnung AS servicegroup, es.mailsenddate\n       FROM {cs_eventservice} es, {cs_event} e, {cc_cal} cal, {cs_service} s, {cs_servicegroup} sg\n       WHERE e.valid_yn=1 AND cal.id=e.cc_cal_id AND es.valid_yn=1 AND es.cdb_person_id=:p_id\n        AND s.sendremindermails_yn=1 AND es.event_id=e.id AND es.service_id=s.id AND sg.id=s.servicegroup_id\n        AND e.startdate>=current_date\n       ORDER BY e.startdate", array(":p_id" => $u->p_id));
        foreach ($servicesOfPerson as $s) {
            if ($s->approved == 1) {
                $data['approvedServices'][] = $s;
            } else {
                $data['requestedServices'][] = $s;
            }
            db_update("cs_eventservice")->fields(array("mailsenddate" => $dt->format('Y-m-d H:i:s')))->condition('id', $s->id, "=")->execute();
        }
        $lang = getUserLanguage($u->p_id);
        $content = getTemplateContent('email/openServiceReminder', 'churchservice', $data, null, $lang);
        churchservice_send_mail("[" . getConf('site_name') . "] " . t2($lang, 'there.are.pending.services'), $content, $u->email);
        $usersToMail->next();
    }
}
/**
 * Infos f�r noch zu best�tigende Dienste
 */
function churchservice_openservice_rememberdays()
{
    global $base_url;
    include_once "churchservice_db.php";
    $delay = readConf('churchservice_openservice_rememberdays');
    $dt = new datetime();
    // Checken, ob EIN EventService noch nicht gesendet wurde, bzw. schon so alt ist.
    // Pr�fe dabei, ob die Person eine EMail-Adresse hat und auch gemappt wurde.
    $sql = "SELECT es.id, p.id p_id, p.vorname, p.email, es.modified_pid, if (password is null and loginstr is null and lastlogin is null,1,0) as invite  \n                    FROM {cs_eventservice} es, {cs_event} e, {cc_cal} cal, {cs_service} s, {cdb_person} p \n                    where e.valid_yn=1 and e.cc_cal_id=cal.id and es.valid_yn=1 and es.zugesagt_yn=0 and es.cdb_person_id is not null\n                      and es.service_id=s.id and s.sendremindermails_yn=1 \n                      and es.event_id=e.id and e.Startdate>=current_date\n                      and ((es.mailsenddate is null) or (datediff(current_date,es.mailsenddate)>={$delay}))\n                      and p.email!='' and p.id=es.cdb_person_id limit 1";
    $res = db_query($sql)->fetch();
    $sql2 = "SELECT es.id id, cal.bezeichnung event, DATE_FORMAT(e.startdate, '%d.%m.%Y %H:%i') datum, e.id event_id,\n                 s.bezeichnung service, sg.bezeichnung servicegroup, es.mailsenddate\n              FROM {cs_eventservice} es, {cs_event} e, {cc_cal} cal, {cs_service} s, {cs_servicegroup} sg \n                 where e.valid_yn=1 and cal.id=e.cc_cal_id and es.valid_yn=1 and es.zugesagt_yn=:zugesagt and es.cdb_person_id=:p_id\n                  and s.sendremindermails_yn=1 \n                  and es.event_id=e.id and es.service_id=s.id and sg.id=s.servicegroup_id\n                  and e.startdate>=current_date\n                  order by e.startdate";
    $i = 0;
    // Lasse 15 EventServices durch, dann warten bis n�chste Cron, sonst werden es zu viele Mails
    while ($res && $i < 15) {
        // Wenn einer vorhanden ist, dann suche nach weiteren offenen Diensten f�r die Person
        $txt = "<h3>Hallo " . $res->vorname . ",</h3><p>";
        $inviter = churchcore_getPersonById($res->modified_pid);
        $txt .= "Du wurdest in dem Dienstplan auf " . readConf('site_name', 'ChurchTools');
        if ($inviter != null) {
            $txt .= ' von <i>' . $inviter->vorname . " " . $inviter->name . "</i>";
        }
        $txt .= " zu Diensten vorgeschlagen. <br/>Zum Zu- oder Absagen bitte hier klicken:";
        $loginstr = churchcore_createOnTimeLoginKey($res->p_id);
        $txt .= '<p><a href="' . $base_url . '?q=home&id=' . $res->p_id . '&loginstr=' . $loginstr . '" class="btn btn-primary">%sitename</a>';
        $txt .= "<p><p><b>Folgende Dienst-Termine sind von Dir noch nicht bearbeitet:</b><ul>";
        $arr = db_query($sql2, array(":p_id" => $res->p_id, ":zugesagt" => 0));
        foreach ($arr as $res2) {
            $txt .= "<li> " . $res2->datum . " " . $res2->event . ":  " . $res2->service . " (" . $res2->servicegroup . ")";
            db_update("cs_eventservice")->fields(array("mailsenddate" => $dt->format('Y-m-d H:i:s')))->condition('id', $res2->id, "=")->execute();
        }
        $txt .= '</ul>';
        $arr = db_query($sql2, array(":p_id" => $res->p_id, ":zugesagt" => 1));
        $txt2 = "";
        foreach ($arr as $res2) {
            $txt2 .= "<li> " . $res2->datum . " - " . $res2->event . ":  " . $res2->service . " (" . $res2->servicegroup . ")";
            if ($res2->mailsenddate == null) {
                $txt2 .= " NEU!";
            }
            db_update("cs_eventservice")->fields(array("mailsenddate" => $dt->format('Y-m-d H:i:s')))->condition('id', $res2->id, "=")->execute();
        }
        if ($txt2 != "") {
            $txt .= "<p><p><b>Bei folgenden Diensten hast Du schon zugesagt:</b><ul>" . $txt2;
            $txt .= "</ul>";
        }
        // Person wurde noch nicht eingeladen, also schicke gleich eine Einladung mit!
        if ($res->invite == 1) {
            include_once CHURCHDB . '/churchdb_ajax.php';
            churchdb_invitePersonToSystem($res->p_id);
            $txt .= "<p><b>Da Du noch nicht kein Zugriff auf das System hast, bekommst Du noch eine separate E-Mail, mit der Du Dich dann anmelden kannst!.</b>";
        }
        churchservice_send_mail("[" . readConf('site_name', 'ChurchTools') . "] Es sind noch Dienste offen", $txt, $res->email);
        $i = $i + 1;
        $res = db_query($sql)->fetch();
    }
}