$oForm->add($sValue, $aPluginDisplay[$sKey]); } } else { if (is_array($aPluginTitle) || is_array($aPluginDisplay)) { $oForm->add(i18n("WARNING", $plugin_name), sprintf(i18n("The plugin %s delivered an array for the displayed titles, but did not return an array for the contents.", $plugin_name), $sPlugin)); } else { $oForm->add($aPluginTitle, $aPluginDisplay); } } } } } $oGroupList = new UI_List(); $oGroupList->setWidth("100%"); $oGroupList->setBorder(1); $oAssocGroups = new RecipientGroupMemberCollection(); $oAssocGroups->link("RecipientGroupCollection"); $oAssocGroups->setWhere("recipientgroupmembercollection.idnewsrcp", $recipient->get("idnewsrcp")); $oAssocGroups->setOrder("recipientgroupcollection.groupname"); $oAssocGroups->query(); if ($oAssocGroups->count() == 0) { $oGroupList->setCell(0, 1, i18n("Recipient is not member of any group", $plugin_name)); } else { // Headline $oGroupList->setCell(0, 1, "<strong>" . i18n("Groupname", $plugin_name) . "</strong>"); $oImgDel = new cHTMLImage("images/delete.gif"); $oGroupList->setCell(0, 2, $oImgDel->render()); $oGroupList->setCellAlignment(0, 2, "right"); // Data while ($oAssocGroup = $oAssocGroups->next()) { $oGroup = $oAssocGroups->fetchObject("RecipientGroupCollection");
/** * Sends test newsletter directly to specified recipients (single or group) * * Note: Sending in chunks not supported! Only usable for tests and only a few * recipients. * * @param integer $iIDCatArt idcatart of newsletter handler article * @param integer $iIDNewsRcp If specified, newsletter recipient id, ignored, if group specified * @param integer $iIDNewsGroup If specified, newsletter recipient group id * @param array $aSendRcps As reference: Filled with a list of succesfull recipients * @param string $sEncoding Message (and header) encoding, e.g. iso-8859-1 */ public function sendDirect($iIDCatArt, $iIDNewsRcp = false, $iIDNewsGroup = false, &$aSendRcps, $sEncoding = "iso-8859-1") { global $lang, $client, $cfg, $cfgClient, $contenido, $recipient; // Initialization $aMessages = array(); $oLanguage = new cApiLanguage($lang); $sFormatDate = $oLanguage->getProperty("dateformat", "date"); $sFormatTime = $oLanguage->getProperty("dateformat", "time"); unset($oLanguage); if ($sFormatDate == "") { $sFormatDate = 'Y-m-d'; } if ($sFormatTime == "") { $sFormatTime = 'h:i a'; } #$sPath = $cfgClient[$client]["path"]["htmlpath"]."front_content.php?changelang=".$lang."&idcatart=".$iIDCatArt."&"; $sPath = Contenido_Url::getInstance()->build(array('idcatart' => $iIDCatArt, 'client' => $client, 'lang' => $lang), true); $sPath .= strpos($sPath, '?') === false ? '?' : '&'; // Get newsletter data $sFrom = $this->get("newsfrom"); $sFromName = $this->get("newsfromname"); if ($sFromName == "") { $sFromName = $sFrom; } $sSubject = $this->get("subject"); $sMessageText = $this->get("message"); $bIsHTML = false; if ($this->get("type") == "html") { $sMessageHTML = $this->getHTMLMessage(); if ($sMessageHTML === false) { // There was a problem getting the html message (maybe article // deleted). Exit with error instead of sending as text message only if ($contenido) { // Use i18n only in backend $sError = i18n("Newsletter could not be sent: No html message available", $plugin_name); } else { $sError = "Newsletter could not be sent: No html message available"; } $this->_sError = $sError; return false; } else { $bIsHTML = true; } } // Preventing double lines in mail, you may wish to disable this function on windows servers if (!getSystemProperty("newsletter", "disable-rn-replacement")) { $sMessageText = str_replace("\r\n", "\n", $sMessageText); } // Single replacements // Replace message tags (text message) $this->_replaceTag($sMessageText, false, "date", date($sFormatDate)); $this->_replaceTag($sMessageText, false, "time", date($sFormatTime)); // Replace message tags (html message) if ($bIsHTML) { $this->_replaceTag($sMessageHTML, true, "date", date($sFormatDate)); $this->_replaceTag($sMessageHTML, true, "time", date($sFormatTime)); } // Enabling plugin interface if (getSystemProperty("newsletter", "newsletter-recipients-plugin") == "true") { $bPluginEnabled = true; $aPlugins = array(); if (is_array($cfg['plugins']['recipients'])) { foreach ($cfg['plugins']['recipients'] as $sPlugin) { plugin_include("recipients", $sPlugin . "/" . $sPlugin . ".php"); if (function_exists("recipients_" . $sPlugin . "_wantedVariables")) { $aPlugins[$sPlugin] = call_user_func("recipients_" . $sPlugin . "_wantedVariables"); } } } } else { setSystemProperty("newsletter", "newsletter-recipients-plugin", "false"); $bPluginEnabled = false; } $aRecipients = array(); if ($iIDNewsGroup !== false) { $oGroupMembers = new RecipientGroupMemberCollection(); $aRecipients = $oGroupMembers->getRecipientsInGroup($iIDNewsGroup, false); } else { if ($iIDNewsRcp !== false) { $aRecipients[] = $iIDNewsRcp; } } $iCount = count($aRecipients); if ($iCount > 0) { $this->_replaceTag($sMessageText, false, "number", $iCount); // Replace message tags (html message) if ($bIsHTML) { $this->_replaceTag($sMessageHTML, true, "number", $iCount); } foreach ($aRecipients as $iID) { $sRcpMsgText = $sMessageText; $sRcpMsgHTML = $sMessageHTML; // Don't change name of $recipient variable as it is used in plugins! $recipient = new Recipient(); $recipient->loadByPrimaryKey($iID); $sEMail = $recipient->get("email"); $sName = $recipient->get("name"); if (empty($sName)) { $sName = $sEMail; } $sKey = $recipient->get("hash"); $bSendHTML = false; if ($recipient->get("news_type") == 1) { $bSendHTML = true; // Recipient accepts html newsletter } $this->_replaceTag($sRcpMsgText, false, "name", $sName); $this->_replaceTag($sRcpMsgText, false, "unsubscribe", $sPath . "unsubscribe=" . $sKey); $this->_replaceTag($sRcpMsgText, false, "change", $sPath . "change=" . $sKey); $this->_replaceTag($sRcpMsgText, false, "stop", $sPath . "stop=" . $sKey); $this->_replaceTag($sRcpMsgText, false, "goon", $sPath . "goon=" . $sKey); // Replace message tags (html message) if ($bIsHTML && $bSendHTML) { $this->_replaceTag($sRcpMsgHTML, true, "name", $sName); $this->_replaceTag($sRcpMsgHTML, true, "unsubscribe", $sPath . "unsubscribe=" . $sKey); $this->_replaceTag($sRcpMsgHTML, true, "change", $sPath . "change=" . $sKey); $this->_replaceTag($sRcpMsgHTML, true, "stop", $sPath . "stop=" . $sKey); $this->_replaceTag($sRcpMsgHTML, true, "goon", $sPath . "goon=" . $sKey); # Link to online article --> if (!is_object($db)) { $db = new DB_Contenido(); } $sql = 'SELECT idart FROM ' . $cfg['tab']['news'] . ' WHERE (idnews=' . $this->get('idnews') . ')'; $db->query($sql); $db->next_record(); $news_idart = $db->f('idart'); $link = Contenido_Url::getInstance()->build(array('idart' => $news_idart, 'client' => $this->get('idclient'), 'lang' => $this->get("idlang"), 'rcp' => $sKey), true); $p1 = strpos($sMessageHTML, '<body'); if ($p1 !== false) { $p1 = strpos($sMessageHTML, '>', $p1) + 1; } else { $p1 = 0; } $sOnlineText = getEffectiveSetting('newsletter-online-text', $this->get("idlang"), 'If the newsletter is not shown properly, please click here to view the online version.'); $sMessageHTML = substr($sMessageHTML, 0, $p1) . '<div style="text-align: center; background-color: #FFF;"><a href="' . $link . '" style="font-weight: bold;">' . $sOnlineText . '</a></div>' . substr($sMessageHTML, $p1); # <-- Link to online article // Remove base tag $sMessageHTML = preg_replace('/<base href=(.*?)>/is', '', $sMessageHTML, 1); // Fix source path // TODO: Test any URL specification that may exist under the sun... $sMainURL = Contenido_Url::getInstance()->build(array('idcat' => getEffectiveSetting('navigation', 'idcat-home', 1), 'client' => $this->get('idclient'), 'lang' => $this->get("idlang")), true); $sSelfURL = Contenido_Url::getInstance()->build(array('idart' => $this->get("idart"), 'client' => $this->get('idclient'), 'lang' => $this->get("idlang")), true); $sMessageHTML = preg_replace("/(href|src)\\=(\"|\\')([^(http|#)])(\\/)?/", "\$1=" . "\$2" . $sMainURL . "\$3", $sMessageHTML); $sMessageHTML = preg_replace('/url\\([\\"\'](.*)[\\"\']\\)/', 'url(\'' . $sMainURL . '$1\')', $sMessageHTML); $sMessageHTML = str_replace('/cms//', '/', $sMessageHTML); // Now replace anchor tags to the newsletter article itself just by the anchor $sMessageHTML = preg_replace("/(href|src)\\=(\"|\\')" . str_replace('/', '\\/', $sSelfURL) . "(.*)#(.*)(\"|\\')/", "\$1=" . "\$2" . "#" . "\$4" . "\$5", $sMessageHTML); // Now correct mailto tags $sMessageHTML = str_replace($sMainURL . 'mailto:', 'mailto:', $sMessageHTML); # Remove the <noscript> info from the newsletter message $sMessageHTML = str_replace(array('This website is powered by drugCMS, the Content Management System with addictive potential.', 'For more info and download visit <a href="http://www.drugcms.org">www.drugcms.org</a>.', 'drugCMS is made in Germany.'), '', $sMessageHTML); } if ($bPluginEnabled) { foreach ($aPlugins as $sPlugin => $aPluginVar) { foreach ($aPluginVar as $sPluginVar) { // Replace tags in text message $this->_replaceTag($sRcpMsgText, false, $sPluginVar, call_user_func("recipients_" . $sPlugin . "_getvalue", $sPluginVar)); // Replace tags in html message if ($bIsHTML && $bSendHTML) { $this->_replaceTag($sRcpMsgHTML, true, $sPluginVar, call_user_func("recipients_" . $sPlugin . "_getvalue", $sPluginVar)); } } } } if (strlen($sKey) != 30) { // Prevents sending without having a key if ($contenido) { // Use i18n only in backend $sError = i18n("Newsletter to %s could not be sent: Recipient has an incompatible or empty key", $plugin_name); } else { $sError = "Newsletter to %s could not be sent: Recipient has an incompatible or empty key"; } $aMessages[] = $sName . " (" . $sEMail . "): " . sprintf($sError, $sEMail); } else { if (!isValidMail($sEMail)) { if ($contenido) { // Use i18n only in backend $sError = i18n("Newsletter to %s could not be sent: No valid e-mail address specified", $plugin_name); } else { $sError = "Newsletter to %s could not be sent: No valid e-mail address specified"; } $aMessages[] = $sName . " (" . $sEMail . "): " . sprintf($sError, $sEMail); } else { $oMail = new PHPMailer(); $oMail->CharSet = $sEncoding; $oMail->IsHTML($bIsHTML && $bSendHTML); $oMail->From = $sFrom; $oMail->FromName = $sFromName; $oMail->AddAddress($sEMail); # Mailer Configuration --> $sMailer = strtolower(getEffectiveSetting('newsletter', 'mailer')); $sHost = getEffectiveSetting('newsletter', 'host'); $iPort = intval(getEffectiveSetting('newsletter', 'port')); $sUsername = getEffectiveSetting('newsletter', 'username'); $sPassword = getEffectiveSetting('newsletter', 'password'); if (strlen($sMailer) == 0) { $sMailer = strtolower(getEffectiveSetting('email', 'mailer')); $sHost = getEffectiveSetting('email', 'host'); $iPort = intval(getEffectiveSetting('email', 'port')); $sUsername = getEffectiveSetting('email', 'username'); $sPassword = getEffectiveSetting('email', 'password'); } if (strlen($sMailer) == 0) { setClientProperty('email', 'mailer', 'mail'); $sMailer = 'mail'; } if (strlen($sHost) == 0) { setClientProperty('email', 'host', ''); } if ($iPort == 0) { setClientProperty('email', 'port', '25'); $iPort = 25; } if (strlen($sUsername) == 0) { setClientProperty('email', 'username', ''); } if (strlen($sPassword) == 0) { setClientProperty('email', 'password', ''); } $oMail->Mailer = $sMailer; if ($sMailer == 'smtp') { $oMail->SMTPAuth = true; $oMail->Host = $sHost; $oMail->Port = $iPort; $oMail->Username = $sUsername; $oMail->Password = $sPassword; } # <-- Mailer Configuration $oMail->Subject = $sSubject; if ($bIsHTML && $bSendHTML) { $oMail->Body = $sRcpMsgHTML; $oMail->AltBody = $sRcpMsgText . "\n\n"; } else { $oMail->Body = $sRcpMsgText . "\n\n"; } if ($oMail->Send()) { $aSendRcps[] = $sName . " (" . $sEMail . ")"; } else { if ($contenido) { // Use i18n only in backend $sError = i18n("Newsletter to %s could not be sent", $plugin_name); } else { $sError = "Newsletter to %s could not be sent"; } $aMessages[] = $sName . " (" . $sEMail . "): " . sprintf($sError, $sEMail); } } } } } else { if ($contenido) { // Use i18n only in backend $sError = i18n("No recipient with specified recipient/group id %s/%s found", $plugin_name); } else { $sError = "No recipient with specified recpient/group id %s/%s found"; } $aMessages[] = sprintf($sError, $iIDNewsRcp, $iIDNewsGroup); } if (count($aMessages) > 0) { $this->_sError = implode("<br />", $aMessages); return false; } else { return true; } }
/** * Overridden delete method to remove groups from groupmember table * before deleting group * * @param $itemID int specifies the newsletter recipient group */ public function delete($itemID) { $oAssociations = new RecipientGroupMemberCollection(); $oAssociations->setWhere("idnewsgroup", $itemID); $oAssociations->query(); while ($oItem = $oAssociations->next()) { $oAssociations->delete($oItem->get("idnewsgroupmember")); } parent::delete($itemID); }
* {@internal * created 2004-08-01, Björn Behrens (HerrB) * modified 2008-06-27, Dominik Ziegler, add security fix * * $Id$: * }} * */ if (!defined('CON_FRAMEWORK')) { die('Illegal call'); } $plugin_name = 'newsletter'; // Initialization $oPage = new cPage(); $oRGroups = new RecipientGroupCollection(); $oRGroupMembers = new RecipientGroupMemberCollection(); $oRGroup = new RecipientGroup(); $aFields = array(); $aFields["name"] = array("field" => "name", "caption" => i18n("Name", $plugin_name), "type" => "base,sort,search"); $aFields["email"] = array("field" => "email", "caption" => i18n("E-Mail", $plugin_name), "type" => "base,sort,search"); $aFields["confirmed"] = array("field" => "confirmed", "caption" => i18n("Confirmed", $plugin_name), "type" => "base"); $aFields["deactivated"] = array("field" => "deactivated", "caption" => i18n("Deactivated", $plugin_name), "type" => "base"); if ($action == "recipientgroup_create" && $perm->have_perm_area_action($area, $action)) { $oRGroup = $oRGroups->create(" " . i18n("-- new group --", $plugin_name)); $_REQUEST["idrecipientgroup"] = $oRGroup->get("idnewsgroup"); $oPage->setReload(); $sRefreshLeftTopScript = '<script type="text/javascript">top.content.left.left_top.refreshGroupOption(\'' . $_REQUEST["idrecipientgroup"] . '\', \'add\')</script>'; $oPage->addScript('refreshlefttop', $sRefreshLeftTopScript); } elseif ($action == "recipientgroup_delete" && $perm->have_perm_area_action($area, $action)) { $oRGroups->delete($_REQUEST["idrecipientgroup"]); $sRefreshLeftTopScript = '<script type="text/javascript">top.content.left.left_top.refreshGroupOption(\'' . $_REQUEST["idrecipientgroup"] . '\', \'remove\')</script>';
default: $sDelimiter = "\t"; //chr(9); } //echo "<pre>".nl2br(stripslashes($_REQUEST["txtData"]))."</pre>"; $aLines = explode("\n", stripslashes($_REQUEST["txtData"])); $iAdded = 0; $iDublettes = 0; $iInvalid = 0; $iRow = 0; $iCol = 0; $bStop = false; $sMessage = ""; $aMessage = array(); $aInvalidLines = array(); $oGroupMembers = new RecipientGroupMemberCollection(); foreach ($aLines as $sLine) { $iRow++; $aParts = explode($sDelimiter, trim($sLine)); if ($iRow == 1) { $aInvalidLines[] = $sLine; foreach ($aParts as $sHeader) { $sKey = array_search(mb_strtolower(trim(htmlentities($sHeader, ENT_COMPAT, $encoding[$lang])), $encoding[$lang]), $aFields); if ($sKey === false) { $aMessage[] = sprintf(i18n("Given column header '%s' unknown, column ignored", $plugin_name), $sHeader); } else { $aFieldDetails[$sKey]["col"] = $iCol; $iCol++; } } foreach ($aFieldDetails as $sKey => $aDetails) {