Add files via upload
Dieser Commit ist enthalten in:
Ursprung
a185d2db52
Commit
faa2e43e37
34 geänderte Dateien mit 9581 neuen und 0 gelöschten Zeilen
248
classes/class.newsletter.recipients.php
Normale Datei
248
classes/class.newsletter.recipients.php
Normale Datei
|
|
@ -0,0 +1,248 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Project:
|
||||
* Contenido Content Management System
|
||||
*
|
||||
* Description:
|
||||
* Newsletter recipient class
|
||||
*
|
||||
* Requirements:
|
||||
* @con_php_req 5.0
|
||||
*
|
||||
*
|
||||
* @package Contenido Backend classes
|
||||
* @version 1.1
|
||||
* @author Björn Behrens
|
||||
* @copyright four for business AG <www.4fb.de>
|
||||
* @license http://www.contenido.org/license/LIZENZ.txt
|
||||
* @link http://www.4fb.de
|
||||
* @link http://www.contenido.org
|
||||
* @since file available since contenido release <= 4.6
|
||||
*
|
||||
* {@internal
|
||||
* created 2004-08-01
|
||||
* modified 2008-06-30, Dominik Ziegler, add security fix
|
||||
* modified 2011-03-14, Murat Purc, adapted to new GenericDB, partly ported to PHP 5, formatting
|
||||
*
|
||||
* $Id: class.newsletter.recipients.php 128 2019-07-03 11:58:28Z oldperl $:
|
||||
* }}
|
||||
*
|
||||
*/
|
||||
if (!defined('CON_FRAMEWORK')) {
|
||||
die('Illegal call');
|
||||
}
|
||||
|
||||
/**
|
||||
* Recipient management class
|
||||
*/
|
||||
class RecipientCollection extends ItemCollection {
|
||||
|
||||
/**
|
||||
* Constructor Function
|
||||
* @param none
|
||||
*/
|
||||
public function __construct() {
|
||||
global $cfg;
|
||||
parent::__construct($cfg["tab"]["news_rcp"], "idnewsrcp");
|
||||
$this->_setItemClass("Recipient");
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new recipient
|
||||
* @param string $sEMail Specifies the e-mail adress
|
||||
* @param string $sName Specifies the recipient name (optional)
|
||||
* @param int $iConfirmed Specifies, if the recipient is confirmed (optional)
|
||||
* @param string $sJoinID Specifies additional recipient group ids to join (optional, e.g. 47,12,...)
|
||||
* @param int $iMessageType Specifies the message type for the recipient (0 = text, 1 = html)
|
||||
*/
|
||||
public function create($sEMail, $sName = "", $iConfirmed = 0, $sJoinID = "", $iMessageType = 0) {
|
||||
global $client, $lang, $auth;
|
||||
|
||||
$iConfirmed = (int) $iConfirmed;
|
||||
$iMessageType = (int) $iMessageType;
|
||||
|
||||
/* Check if the e-mail adress already exists */
|
||||
$email = strtolower($email); // e-mail always lower case
|
||||
$this->setWhere("idclient", $client);
|
||||
$this->setWhere("idlang", $lang);
|
||||
$this->setWhere("email", $sEMail);
|
||||
$this->query();
|
||||
|
||||
if ($this->next()) {
|
||||
return $this->create($sEMail . "_" . substr(md5(rand()), 0, 10), $sName, 0, $sJoinID, $iMessageType); // 0: Deactivate 'confirmed'
|
||||
}
|
||||
$oItem = parent::createNewItem();
|
||||
$oItem->set("idclient", $client);
|
||||
$oItem->set("idlang", $lang);
|
||||
$oItem->set("name", $sName);
|
||||
$oItem->set("email", $sEMail);
|
||||
$oItem->set("hash", substr(md5(rand()), 0, 17) . uniqid("")); // Generating UID, 30 characters
|
||||
$oItem->set("confirmed", $iConfirmed);
|
||||
$oItem->set("news_type", $iMessageType);
|
||||
|
||||
if ($iConfirmed) {
|
||||
$oItem->set("confirmeddate", date("Y-m-d H:i:s"), false);
|
||||
}
|
||||
$oItem->set("deactivated", 0);
|
||||
$oItem->set("created", date("Y-m-d H:i:s"), false);
|
||||
$oItem->set("author", $auth->auth["uid"]);
|
||||
$oItem->store();
|
||||
|
||||
$iIDRcp = $oItem->get("idnewsrcp"); // Getting internal id of new recipient
|
||||
// Add this recipient to the default recipient group (if available)
|
||||
$oGroups = new RecipientGroupCollection();
|
||||
$oGroupMembers = new RecipientGroupMemberCollection();
|
||||
|
||||
$oGroups->setWhere("idclient", $client);
|
||||
$oGroups->setWhere("idlang", $lang);
|
||||
$oGroups->setWhere("defaultgroup", 1);
|
||||
$oGroups->query();
|
||||
|
||||
while ($oGroup = $oGroups->next()) {
|
||||
$iIDGroup = $oGroup->get("idnewsgroup");
|
||||
$oGroupMembers->create($iIDGroup, $iIDRcp);
|
||||
}
|
||||
|
||||
// Add to other recipient groups as well? Do so!
|
||||
if ($sJoinID != "") {
|
||||
$aJoinID = explode(",", $sJoinID);
|
||||
|
||||
if (count($aJoinID) > 0) {
|
||||
foreach ($aJoinID as $iIDGroup) {
|
||||
$oGroupMembers->create($iIDGroup, $iIDRcp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $oItem;
|
||||
}
|
||||
|
||||
/**
|
||||
* Overridden delete method to remove recipient from groupmember table
|
||||
* before deleting recipient
|
||||
*
|
||||
* @param $itemID int specifies the recipient
|
||||
*/
|
||||
public function delete($itemID) {
|
||||
$oAssociations = new RecipientGroupMemberCollection();
|
||||
$oAssociations->setWhere("idnewsrcp", $itemID);
|
||||
$oAssociations->query();
|
||||
|
||||
While ($oItem = $oAssociations->next()) {
|
||||
$oAssociations->delete($oItem->get("idnewsgroupmember"));
|
||||
}
|
||||
parent::delete($itemID);
|
||||
}
|
||||
|
||||
/**
|
||||
* Purge method to delete recipients which hasn't been confirmed since over a month
|
||||
* @param $timeframe int Days after creation a not confirmed recipient will be removed
|
||||
* @return int Count of deleted recipients
|
||||
*/
|
||||
public function purge($timeframe) {
|
||||
global $client, $lang;
|
||||
|
||||
$oRecipientCollection = new RecipientCollection();
|
||||
|
||||
// DATEDIFF(created, NOW()) > 30 would be better, but it's only available in MySQL V4.1.1 and above
|
||||
// Note, that, TO_DAYS or NOW may not be available in other database systems than MySQL
|
||||
$oRecipientCollection->setWhere("idclient", $client);
|
||||
$oRecipientCollection->setWhere("idlang", $lang);
|
||||
$oRecipientCollection->setWhere("confirmed", 0);
|
||||
$oRecipientCollection->setWhere("(TO_DAYS(NOW()) - TO_DAYS(created))", $timeframe, ">");
|
||||
$oRecipientCollection->query();
|
||||
|
||||
while ($oItem = $oRecipientCollection->next()) {
|
||||
$oRecipientCollection->delete($oItem->get("idnewsrcp"));
|
||||
}
|
||||
return $oRecipientCollection->count();
|
||||
}
|
||||
|
||||
/**
|
||||
* checkEMail returns true, if there is no recipient with the same e-mail address; otherwise false
|
||||
* @param $email string e-mail
|
||||
* @return recpient item if item with e-mail exists, false otherwise
|
||||
*/
|
||||
public function emailExists($sEmail) {
|
||||
global $client, $lang;
|
||||
|
||||
$oRecipientCollection = new RecipientCollection();
|
||||
|
||||
$oRecipientCollection->setWhere("idclient", $client);
|
||||
$oRecipientCollection->setWhere("idlang", $lang);
|
||||
$oRecipientCollection->setWhere("email", strtolower($sEmail));
|
||||
$oRecipientCollection->query();
|
||||
|
||||
if ($oItem = $oRecipientCollection->next()) {
|
||||
return $oItem;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets a key for all recipients without key or an old key (len(key) <> 30)
|
||||
* @param none
|
||||
*/
|
||||
public function updateKeys() {
|
||||
$this->setWhere("LENGTH(hash)", 30, "<>");
|
||||
$this->query();
|
||||
|
||||
$iUpdated = $this->count();
|
||||
while ($oItem = $this->next()) {
|
||||
$oItem->set("hash", substr(md5(rand()), 0, 17) . uniqid("")); /* Generating UID, 30 characters */
|
||||
$oItem->store();
|
||||
}
|
||||
|
||||
return $iUpdated;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Single Recipient Item
|
||||
*/
|
||||
class Recipient extends Item {
|
||||
|
||||
/**
|
||||
* Constructor Function
|
||||
* @param mixed $mId Specifies the ID of item to load
|
||||
*/
|
||||
public function __construct($mId = false) {
|
||||
global $cfg;
|
||||
parent::__construct($cfg["tab"]["news_rcp"], "idnewsrcp");
|
||||
if ($mId !== false) {
|
||||
$this->loadByPrimaryKey($mId);
|
||||
}
|
||||
}
|
||||
|
||||
public function store() {
|
||||
global $auth;
|
||||
|
||||
$this->set("lastmodified", date("Y-m-d H:i:s"), false);
|
||||
$this->set("modifiedby", $auth->auth["uid"]);
|
||||
parent::store();
|
||||
|
||||
// Update name, email and newsletter type for recipients in pending newsletter jobs
|
||||
$sName = $this->get("name");
|
||||
$sEmail = $this->get("email");
|
||||
if ($sName == "") {
|
||||
$sName = $sEmail;
|
||||
}
|
||||
$iNewsType = $this->get("news_type");
|
||||
|
||||
$oLogs = new cNewsletterLogCollection();
|
||||
$oLogs->setWhere("idnewsrcp", $this->get($this->primaryKey));
|
||||
$oLogs->setWhere("status", "pending");
|
||||
$oLogs->query();
|
||||
|
||||
while ($oLog = $oLogs->next()) {
|
||||
$oLog->set("rcpname", $sName);
|
||||
$oLog->set("rcpemail", $sEmail);
|
||||
$oLog->set("rcpnewstype", $iNewsType);
|
||||
$oLog->store();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Laden …
Tabelle hinzufügen
Einen Link hinzufügen
In neuem Issue referenzieren