/** * Send a confirmation e-mail with the order data * * Calls {@see Orders::getSubstitutionArray()}, which en route * creates User accounts for individual electronic Products by default. * Set $create_accounts to false when sending a copy. * @static * @param integer $order_id The order ID * @param boolean $create_accounts Create User accounts for electronic * Products it true * @return boolean The Customers' e-mail address * on success, false otherwise * @access private */ static function sendConfirmationMail($order_id, $create_accounts = true) { $arrSubstitution = Orders::getSubstitutionArray($order_id, $create_accounts); $customer_id = $arrSubstitution['CUSTOMER_ID']; $objCustomer = Customer::getById($customer_id); if (!$objCustomer) { //die("Failed to get Customer for ID $customer_id"); return false; } $arrSubstitution += $objCustomer->getSubstitutionArray() + self::getSubstitutionArray() + array('TIMESTAMP' => date(ASCMS_DATE_FORMAT_INTERNATIONAL_DATETIME, date_timestamp_get(date_create())), 'ROOT_URL' => \Cx\Core\Routing\Url::fromDocumentRoot()->toString()); //DBG::log("sendConfirmationMail($order_id, $create_accounts): Subs: ".var_dump($arrSubstitution, true)); if (empty($arrSubstitution)) { return false; } // Prepared template for order confirmation $arrMailTemplate = array('section' => 'Shop', 'key' => 'order_confirmation', 'lang_id' => $arrSubstitution['LANG_ID'], 'to' => $arrSubstitution['CUSTOMER_EMAIL'] . ',' . \Cx\Core\Setting\Controller\Setting::getValue('email_confirmation', 'Shop'), 'substitution' => &$arrSubstitution); //DBG::log("sendConfirmationMail($order_id, $create_accounts): Template: ".var_export($arrMailTemplate, true)); //DBG::log("sendConfirmationMail($order_id, $create_accounts): Substitution: ".var_export($arrSubstitution, true)); // NOTE: Creates some XML order file (for customizing) // $template = file_get_contents( // ASCMS_MODULE_PATH.'/Shop/View/Template/Backend/module_shop_export_orders.xml'); // \Cx\Core\MailTemplate\Controller\MailTemplate::substitute($template, $arrSubstitution, true); // // Strip leftover comments from blocks: "<!---->" or "<!-- -->" // $template = preg_replace('/<!--\s*-->/', '', $template); // $file = new Cx\Lib\FileSystem\File( // ASCMS_DOCUMENT_ROOT.'/orders/'.$order_id.'.xml'); // //$file->makeWritable(); // Fails on win32 // $file->write($template); /// if (!\Cx\Core\MailTemplate\Controller\MailTemplate::send($arrMailTemplate)) { return false; } return $arrSubstitution['CUSTOMER_EMAIL']; }
function _createRSS() { global $_CONFIG, $objDatabase; $this->_arrSettings =& $this->_getSettings(); $arrMedia = array(); $objMedium = $objDatabase->Execute("\n SELECT tblMedium.id,\n tblMedium.title,\n tblMedium.author,\n tblMedium.description,\n tblMedium.source,\n tblMedium.size,\n tblMedium.date_added,\n tblCategory.id AS categoryId,\n tblCategory.title AS categoryTitle\n FROM " . DBPREFIX . "module_podcast_medium AS tblMedium\n LEFT JOIN " . DBPREFIX . "module_podcast_rel_medium_category AS tblRel ON tblRel.medium_id=tblMedium.id\n LEFT JOIN " . DBPREFIX . "module_podcast_category AS tblCategory ON tblCategory.id=tblRel.category_id\n WHERE tblMedium.status=1\n ORDER BY tblMedium.date_added DESC"); if ($objMedium !== false) { while (!$objMedium->EOF) { if (!isset($arrMedia[$objMedium->fields['id']])) { $arrMedia[$objMedium->fields['id']] = array('title' => $objMedium->fields['title'], 'author' => $objMedium->fields['author'], 'description' => $objMedium->fields['description'], 'source' => str_replace(array('%domain%', '%offset%'), array($_CONFIG['domainUrl'], \Cx\Core\Core\Controller\Cx::instanciate()->getWebsiteOffsetPath()), $objMedium->fields['source']), 'size' => $objMedium->fields['size'], 'date_added' => $objMedium->fields['date_added'], 'categories' => array()); } if (!empty($objMedium->fields['id'])) { $arrMedia[$objMedium->fields['id']]['categories'][$objMedium->fields['categoryId']] = $objMedium->fields['categoryTitle']; } $objMedium->MoveNext(); } } $objRSSWriter = new \RSSWriter(); $objRSSWriter->characterEncoding = CONTREXX_CHARSET; $objRSSWriter->channelTitle = $this->_arrSettings['feed_title']; $objRSSWriter->channelLink = \Cx\Core\Routing\Url::fromModuleAndCmd('Podcast')->toString(); $objRSSWriter->channelDescription = $this->_arrSettings['feed_description']; $objRSSWriter->channelCopyright = 'Copyright ' . date('Y') . ', http://' . $_CONFIG['domainUrl']; if (!empty($this->_arrSettings['feed_image'])) { $channelImageUrl = \Cx\Core\Routing\Url::fromDocumentRoot(); $channelImageUrl->setMode('backend'); $channelImageUrl->setPath(substr($this->_arrSettings['feed_image'], strlen(\Cx\Core\Core\Controller\Cx::instanciate()->getWebsiteOffsetPath()) + 1)); $objRSSWriter->channelImageUrl = $channelImageUrl; $objRSSWriter->channelImageTitle = $objRSSWriter->channelTitle; $objRSSWriter->channelImageLink = $objRSSWriter->channelLink; } $objRSSWriter->channelWebMaster = $_CONFIG['coreAdminEmail']; // create podcast feed $objRSSWriter->xmlDocumentPath = \Env::get('cx')->getWebsiteFeedPath() . '/podcast.xml'; foreach ($arrMedia as $mediumId => $arrMedium) { $arrCategories = array(); foreach ($arrMedium['categories'] as $categoryId => $categoryTitle) { array_push($arrCategories, array('domain' => htmlspecialchars(\Cx\Core\Routing\Url::fromModuleAndCmd('Podcast', '', '', array('cid' => $categoryId))->toString(), ENT_QUOTES, CONTREXX_CHARSET), 'title' => htmlspecialchars($categoryTitle, ENT_QUOTES, CONTREXX_CHARSET))); } $objRSSWriter->addItem(htmlspecialchars($arrMedium['title'], ENT_QUOTES, CONTREXX_CHARSET), contrexx_raw2xhtml(\Cx\Core\Routing\Url::fromModuleAndCmd('Podcast', '', '', array('id' => $mediumId))->toString()), htmlspecialchars($arrMedium['description'], ENT_QUOTES, CONTREXX_CHARSET), htmlspecialchars($arrMedium['author'], ENT_QUOTES, CONTREXX_CHARSET), $arrCategories, '', array('url' => htmlspecialchars($arrMedium['source'], ENT_QUOTES, CONTREXX_CHARSET), 'length' => !empty($arrMedium['size']) ? $arrMedium['size'] : 'N/A', 'type' => 'application/x-video'), '', $arrMedium['date_added']); } $status = $objRSSWriter->write(); if (count($objRSSWriter->arrErrorMsg) > 0) { $this->_strErrMessage .= implode('<br />', $objRSSWriter->arrErrorMsg); } if (count($objRSSWriter->arrWarningMsg) > 0) { $this->_strErrMessage .= implode('<br />', $objRSSWriter->arrWarningMsg); } return $status; }
/** * displays newsletter contentn in browser * */ public static function displayInBrowser() { global $objDatabase, $_ARRAYLANG, $_CONFIG; $id = !empty($_GET['id']) ? contrexx_input2raw($_GET['id']) : ''; $email = !empty($_GET['email']) ? contrexx_input2raw($_GET['email']) : ''; $code = !empty($_GET['code']) ? contrexx_input2raw($_GET['code']) : ''; $unsubscribe = ''; $profile = ''; $date = ''; $sex = ''; $salutation = ''; $title = ''; $firstname = ''; $lastname = ''; $position = ''; $company = ''; $industry_sector = ''; $address = ''; $city = ''; $zip = ''; $country = ''; $phoneOffice = ''; $phoneMobile = ''; $phonePrivate = ''; $fax = ''; $birthday = ''; $website = ''; if (!self::checkCode($id, $email, $code)) { // unable to verify user, therefore we will not load any user data to prevent leaking any privacy data $email = ''; $code = ''; } // Get newsletter content and template. $query = ' SELECT `n`.`content`, `t`.`html`, `n`.`date_sent` FROM `' . DBPREFIX . 'module_newsletter` as `n` INNER JOIN `' . DBPREFIX . 'module_newsletter_template` as `t` ON `n`.`template` = `t`.`id` WHERE `n`.`id` = "' . contrexx_raw2db($id) . '" '; $objResult = $objDatabase->Execute($query); if ($objResult->RecordCount()) { $html = $objResult->fields['html']; $content = $objResult->fields['content']; $date = date(ASCMS_DATE_FORMAT_DATE, $objResult->fields['date_sent']); } else { // newsletter not found > redirect to homepage \Cx\Core\Csrf\Controller\Csrf::header('Location: ' . \Cx\Core\Routing\Url::fromDocumentRoot()); exit; } // Get user details. $query = ' SELECT `id`, `email`, `uri`, `salutation`, `title`, `position`, `company`, `industry_sector`, `sex`, `lastname`, `firstname`, `address`, `zip`, `city`, `country_id`, `phone_office`, `phone_mobile`, `phone_private`, `fax`, `birthday` FROM `' . DBPREFIX . 'module_newsletter_user` WHERE `email` = "' . contrexx_raw2db($email) . '" '; $objResult = $objDatabase->Execute($query); if ($objResult->RecordCount()) { // set recipient sex switch ($objResult->fields['sex']) { case 'm': $gender = 'gender_male'; break; case 'f': $gender = 'gender_female'; break; default: $gender = 'gender_undefined'; break; } $objUser = \FWUser::getFWUserObject()->objUser; $userId = $objResult->fields['id']; $sex = $objUser->objAttribute->getById($gender)->getName(); //$salutation = contrexx_raw2xhtml($objUser->objAttribute->getById('title_'.$objResult->fields['salutation'])->getName()); $objNewsletterLib = new NewsletterLib(); $arrRecipientTitles = $objNewsletterLib->_getRecipientTitles(); $salutation = $arrRecipientTitles[$objResult->fields['salutation']]; $title = contrexx_raw2xhtml($objResult->fields['title']); $firstname = contrexx_raw2xhtml($objResult->fields['firstname']); $lastname = contrexx_raw2xhtml($objResult->fields['lastname']); $position = contrexx_raw2xhtml($objResult->fields['position']); $company = contrexx_raw2xhtml($objResult->fields['company']); $industry_sector = contrexx_raw2xhtml($objResult->fields['industry_sector']); $address = contrexx_raw2xhtml($objResult->fields['address']); $city = contrexx_raw2xhtml($objResult->fields['city']); $zip = contrexx_raw2xhtml($objResult->fields['zip']); // TODO: migrate to Country class $country = contrexx_raw2xhtml($objUser->objAttribute->getById('country_' . $objResult->fields['country_id'])->getName()); $phoneOffice = contrexx_raw2xhtml($objResult->fields['phone_office']); $phoneMobile = contrexx_raw2xhtml($objResult->fields['phone_mobile']); $phonePrivate = contrexx_raw2xhtml($objResult->fields['phone_private']); $fax = contrexx_raw2xhtml($objResult->fields['fax']); $website = contrexx_raw2xhtml($objResult->fields['uri']); $birthday = contrexx_raw2xhtml($objResult->fields['birthday']); // unsubscribe and profile links have been removed from browser-view - 12/20/12 TD //$unsubscribe = '<a href="'.\Cx\Core\Routing\Url::fromModuleAndCmd('Newsletter', 'unsubscribe', '', array('code' => $code, 'mail' => $email)).'">'.$_ARRAYLANG['TXT_UNSUBSCRIBE'].'</a>'; //$profile = '<a href="'.\Cx\Core\Routing\Url::fromModuleAndCmd('Newsletter', 'profile', '', array('code' => $code, 'mail' => $email)).'">'.$_ARRAYLANG['TXT_EDIT_PROFILE'].'</a>'; } elseif ($objUser = \FWUser::getFWUserObject()->objUser->getUsers(array('email' => contrexx_raw2db($email), 'active' => 1), null, null, null, 1)) { $sex = $objUser->objAttribute->getById($objUser->getProfileAttribute('gender'))->getName(); $salutation = contrexx_raw2xhtml($objUser->objAttribute->getById('title_' . $objUser->getProfileAttribute('title'))->getName()); $firstname = contrexx_raw2xhtml($objUser->getProfileAttribute('firstname')); $lastname = contrexx_raw2xhtml($objUser->getProfileAttribute('lastname')); $company = contrexx_raw2xhtml($objUser->getProfileAttribute('company')); $address = contrexx_raw2xhtml($objUser->getProfileAttribute('address')); $city = contrexx_raw2xhtml($objUser->getProfileAttribute('city')); $zip = contrexx_raw2xhtml($objUser->getProfileAttribute('zip')); // TODO: migrate to Country class $country = contrexx_raw2xhtml($objUser->objAttribute->getById('country_' . $objUser->getProfileAttribute('country'))->getName()); $phoneOffice = contrexx_raw2xhtml($objUser->getProfileAttribute('phone_office')); $phoneMobile = contrexx_raw2xhtml($objUser->getProfileAttribute('phone_mobile')); $phonePrivate = contrexx_raw2xhtml($objUser->getProfileAttribute('phone_private')); $fax = contrexx_raw2xhtml($objUser->getProfileAttribute('phone_fax')); $website = contrexx_raw2xhtml($objUser->getProfileAttribute('website')); $birthday = date(ASCMS_DATE_FORMAT_DATE, $objUser->getProfileAttribute('birthday')); // unsubscribe and profile links have been removed from browser-view - 12/20/12 TD //$unsubscribe = '<a href="'.\Cx\Core\Routing\Url::fromModuleAndCmd('Newsletter', 'unsubscribe', '', array('code' => $code, 'mail' => $email)).'">'.$_ARRAYLANG['TXT_UNSUBSCRIBE'].'</a>'; //$profile = '<a href="'.\Cx\Core\Routing\Url::fromModuleAndCmd('Newsletter', 'profile', '', array('code' => $code, 'mail' => $email)).'">'.$_ARRAYLANG['TXT_EDIT_PROFILE'].'</a>'; } else { // no user found by the specified e-mail address, therefore we will unset any profile specific data to prevent leaking any privacy data $email = ''; $code = ''; } $search = array('[[email]]', '[[date]]', '[[display_in_browser_url]]', '[[unsubscribe]]', '[[profile_setup]]', '[[sex]]', '[[salutation]]', '[[title]]', '[[firstname]]', '[[lastname]]', '[[position]]', '[[company]]', '[[industry_sector]]', '[[address]]', '[[city]]', '[[zip]]', '[[country]]', '[[phone_office]]', '[[phone_private]]', '[[phone_mobile]]', '[[fax]]', '[[birthday]]', '[[website]]'); $replace = array($email, $date, ASCMS_PROTOCOL . '://' . $_CONFIG['domainUrl'] . ASCMS_PATH_OFFSET . '/' . \FWLanguage::getLanguageCodeById(FRONTEND_LANG_ID) . '/index.php?section=Newsletter&cmd=displayInBrowser&standalone=true&code=' . $code . '&email=' . $email . '&id=' . $id, '', '', $sex, $salutation, $title, $firstname, $lastname, $position, $company, $industry_sector, $address, $city, $zip, $country, $phoneOffice, $phoneMobile, $phonePrivate, $fax, $birthday, $website); // Replaces the placeholder in the template and content. $html = str_replace($search, $replace, $html); $content = str_replace($search, $replace, $content); // prepare links in content for tracking if (is_object($objUser) && $objUser->getId()) { $userId = $objUser->getId(); $realUser = true; } else { $userId = $userId ? $userId : 0; $realUser = false; } $content = self::prepareNewsletterLinksForSend($id, $content, $userId, $realUser); // Finally replace content placeholder in the template. $html = str_replace('[[content]]', $content, $html); // parse node-url placeholders \LinkGenerator::parseTemplate($html); // Output die($html); }
/** * Validates the submitted comment data and writes it to the databse if valid. * Additionally, a notification is send out to the administration about the comment * by e-mail (only if the corresponding configuration option is set to do so). * * @param integer News message ID for which the comment shall be stored * @param string Title of the news message for which the comment shall be stored. * The title will be used in the notification e-mail * @param string The poster's name of the comment * @param string The comment's title * @param string The comment's message text * @global ADONewConnection * @global array * @global array * @global array * @return array Returns an array of two elements. The first is either TRUE on success or FALSE on failure. * The second element contains an error message on failure. */ private function storeMessageComment($newsMessageId, $newsMessageTitle, $name, $title, $message) { global $objDatabase, $_ARRAYLANG, $_CORELANG, $_CONFIG; if (!isset($_SESSION['news'])) { $_SESSION['news'] = array(); $_SESSION['news']['comments'] = array(); } // just comment if ($this->checkForCommentFlooding($newsMessageId)) { return array(false, sprintf($_ARRAYLANG['TXT_NEWS_COMMENT_INTERVAL_MSG'], $this->arrSettings['news_comments_timeout'])); } if (empty($title)) { return array(false, $_ARRAYLANG['TXT_NEWS_MISSING_COMMENT_TITLE']); } if (empty($message)) { return array(false, $_ARRAYLANG['TXT_NEWS_MISSING_COMMENT_MESSAGE']); } $date = time(); $userId = 0; if (\FWUser::getFWUserObject()->objUser->login()) { $userId = \FWUser::getFWUserObject()->objUser->getId(); $name = \FWUser::getParsedUserTitle($userId); } elseif ($this->arrSettings['news_comments_anonymous'] == '1') { // deny comment if the poster did not specify his name if (empty($name)) { return array(false, $_ARRAYLANG['TXT_NEWS_POSTER_NAME_MISSING']); } // check CAPTCHA for anonymous posters if (!\Cx\Core_Modules\Captcha\Controller\Captcha::getInstance()->check()) { return array(false, null); } } else { // Anonymous comments are not allowed return array(false, null); } $isActive = $this->arrSettings['news_comments_autoactivate']; $ipAddress = contrexx_input2raw($_SERVER['REMOTE_ADDR']); $objResult = $objDatabase->Execute("\n INSERT INTO `" . DBPREFIX . "module_news_comments`\n SET `title` = '" . contrexx_raw2db($title) . "',\n `text` = '" . contrexx_raw2db($message) . "',\n `newsid` = '" . contrexx_raw2db($newsMessageId) . "',\n `date` = '" . contrexx_raw2db($date) . "',\n `poster_name` = '" . contrexx_raw2db($name) . "',\n `userid` = '" . contrexx_raw2db($userId) . "',\n `ip_address` = '" . contrexx_raw2db($ipAddress) . "',\n `is_active` = '" . contrexx_raw2db($isActive) . "'"); if (!$objResult) { return array(false, $_ARRAYLANG['TXT_NEWS_COMMENT_SAVE_ERROR']); } /* Prevent comment flooding from same user: Either user is authenticated or had to validate a CAPTCHA. In either way, a Cloudrexx session had been initialized, therefore we are able to use the $_SESSION to log this comment */ $_SESSION['news']['comments'][$newsMessageId] = $date; // Don't send a notification e-mail to the administrator if (!$this->arrSettings['news_comments_notification']) { return array(true, null); } // Send a notification e-mail to administrator if (!@(include_once ASCMS_LIBRARY_PATH . '/phpmailer/class.phpmailer.php')) { \DBG::msg('Unable to send e-mail notification to admin'); //DBG::stack(); return array(true, null); } $objMail = new \phpmailer(); if ($_CONFIG['coreSmtpServer'] > 0 && @(include_once ASCMS_CORE_PATH . '/SmtpSettings.class.php')) { if (($arrSmtp = \SmtpSettings::getSmtpAccount($_CONFIG['coreSmtpServer'])) !== false) { $objMail->IsSMTP(); $objMail->Host = $arrSmtp['hostname']; $objMail->Port = $arrSmtp['port']; $objMail->SMTPAuth = true; $objMail->Username = $arrSmtp['username']; $objMail->Password = $arrSmtp['password']; } } $objMail->CharSet = CONTREXX_CHARSET; $objMail->SetFrom($_CONFIG['coreAdminEmail'], $_CONFIG['coreGlobalPageTitle']); $objMail->IsHTML(false); $objMail->Subject = sprintf($_ARRAYLANG['TXT_NEWS_COMMENT_NOTIFICATION_MAIL_SUBJECT'], $newsMessageTitle); $manageCommentsUrl = \Cx\Core\Routing\Url::fromDocumentRoot(array('cmd' => 'News', 'act' => 'comments', 'newsId' => $newsMessageId)); $manageCommentsUrl->setPath(substr(\Cx\Core\Core\Controller\Cx::instanciate()->getBackendFolderName(), 1) . '/index.php'); $manageCommentsUrl->setMode('backend'); $manageCommentsUrl = $manageCommentsUrl->toString(); $activateCommentTxt = $this->arrSettings['news_comments_autoactivate'] ? '' : sprintf($_ARRAYLANG['TXT_NEWS_COMMENT_NOTIFICATION_MAIL_LINK'], $manageCommentsUrl); $objMail->Body = sprintf($_ARRAYLANG['TXT_NEWS_COMMENT_NOTIFICATION_MAIL_BODY'], $_CONFIG['domainUrl'], $newsMessageTitle, \FWUser::getParsedUserTitle($userId, $name), $title, nl2br($message), $activateCommentTxt); $objMail->AddAddress($_CONFIG['coreAdminEmail']); if (!$objMail->Send()) { \DBG::msg('Sending of notification e-mail failed'); //DBG::stack(); } return array(true, null); }
protected static function prepareNewsletterLinksForSend($MailId, $MailHtmlContent, $UserId, $realUser) { global $objDatabase; $result = $MailHtmlContent; $matches = NULL; if (preg_match_all("/<a([^>]+)>(.*?)<\\/a>/is", $result, $matches)) { // get all links info $arrLinks = array(); $objLinks = $objDatabase->Execute("\n SELECT `id`, `title`, `url`\n FROM " . DBPREFIX . "module_newsletter_email_link\n WHERE `email_id`={$MailId}"); if ($objLinks) { while (!$objLinks->EOF) { $arrLinks[$objLinks->fields['id']] = array('title' => $objLinks->fields['title'], 'url' => $objLinks->fields['url']); $objLinks->MoveNext(); } } // replace links if (count($arrLinks) > 0) { $tagCount = count($matches[0]); $fullKey = 0; $attrKey = 1; $textKey = 2; $rmatches = NULL; for ($i = 0; $i < $tagCount; $i++) { if (!preg_match("/newsletter_link_(\\d+)/i", $matches[$attrKey][$i], $rmatches)) { continue; } $linkId = $rmatches[1]; $url = ''; if (preg_match("/href\\s*=\\s*(['\"])(.*?)\\1/i", $matches[$attrKey][$i], $rmatches)) { $url = $rmatches[2]; } // remove newsletter_link_N from rel attribute $matches[$attrKey][$i] = preg_replace("/newsletter_link_" . $linkId . "/i", "", $matches[$attrKey][$i]); // remove empty rel attribute $matches[$attrKey][$i] = preg_replace("/\\s*rel=\\s*(['\"])\\s*\\1/i", "", $matches[$attrKey][$i]); // remove left and right spaces $matches[$attrKey][$i] = preg_replace("/([^=])\\s*\"/i", "\$1\"", $matches[$attrKey][$i]); $matches[$attrKey][$i] = preg_replace("/=\"\\s*/i", "=\"", $matches[$attrKey][$i]); // replace href attribute if (isset($arrLinks[$linkId])) { // TODO: use new URL-format $arrParameters = array('section' => 'Newsletter', 'n' => $MailId, 'l' => $linkId, $realUser ? 'r' : 'm' => $UserId); $newUrl = \Cx\Core\Routing\Url::fromDocumentRoot($arrParameters, null, null)->toString(); $matches[$attrKey][$i] = preg_replace("/href\\s*=\\s*(['\"]).*?\\1/i", "href=\"" . $newUrl . "\"", $matches[$attrKey][$i]); } $result = preg_replace("/" . preg_quote($matches[$fullKey][$i], '/') . "/is", "<a " . $matches[$attrKey][$i] . ">" . $matches[$textKey][$i] . "</a>", $result, 1); } } } return $result; }
/** * Redirect to content manager (open site) * * @param integer The page with this id will be shown in content manager. */ protected function redirectPage($intPageId) { // This is not really a nice way to generate this URL! $baseUrl = \Cx\Core\Routing\Url::fromDocumentRoot(); $baseUrl->setMode(\Cx\Core\Core\Controller\Cx::MODE_BACKEND); \Cx\Core\Csrf\Controller\Csrf::redirect($baseUrl . 'cadmin/ContentManager?page=' . $intPageId . '&tab=content'); }
/** * Returns the URL object for a command mode command accessed via HTTP(s) * @param string $command Command mode command name * @param array $arguments List of non-named arguments * @param array $parameters List of named parameters (key=>value style array) * @return \Cx\Core\Routing\Url Url object for the supplied command name */ public static function fromApi($command, $arguments, $parameters = array()) { $url = \Cx\Core\Routing\Url::fromDocumentRoot(); $url->setMode('backend'); $url->setPath('api/' . $command . '/' . implode('/', $arguments)); $url->removeAllParams(); $url->setParams($parameters); return $url; }
/** * Create the RSS-Feed */ function createRSS() { global $_CONFIG, $objDatabase, $_FRONTEND_LANGID; // languages $arrLanguages = \FWLanguage::getLanguageArray(); if (intval($this->arrSettings['news_feed_status']) == 1) { if (count($arrLanguages > 0)) { $categoryDetails = $this->getCategoryLocale(null, array_keys($arrLanguages)); foreach ($arrLanguages as $LangId => $arrLanguage) { if ($arrLanguage['frontend'] == 1) { $objRSSWriter = new \RSSWriter(); $query = "\n SELECT tblNews.id,\n tblNews.date,\n tblNews.redirect,\n tblNews.source,\n tblNews.teaser_frames AS teaser_frames,\n tblLocale.lang_id,\n tblLocale.title,\n tblLocale.text,\n tblLocale.teaser_text\n FROM " . DBPREFIX . "module_news AS tblNews\n INNER JOIN " . DBPREFIX . "module_news_locale AS tblLocale ON tblLocale.news_id = tblNews.id\n WHERE tblNews.status=1\n AND tblLocale.is_active = 1\n AND tblLocale.lang_id = " . $LangId . "\n AND (tblNews.startdate <= '" . date(ASCMS_DATE_FORMAT_INTERNATIONAL_DATETIME) . "' OR tblNews.startdate = '0000-00-00 00:00:00')\n AND (tblNews.enddate >= '" . date(ASCMS_DATE_FORMAT_INTERNATIONAL_DATETIME) . "' OR tblNews.enddate = '0000-00-00 00:00:00')" . ($this->arrSettings['news_message_protection'] == '1' ? " AND tblNews.frontend_access_id=0 " : '') . " ORDER BY tblNews.date DESC"; $arrNews = array(); if (($objResult = $objDatabase->SelectLimit($query, 20)) !== false && $objResult->RecordCount() > 0) { while (!$objResult->EOF) { if (empty($objRSSWriter->channelLastBuildDate)) { $objRSSWriter->channelLastBuildDate = date('r', $objResult->fields['date']); } $teaserText = preg_replace('/\\[\\[([A-Z0-9_-]+)\\]\\]/', '{\\1}', $objResult->fields['teaser_text']); $text = preg_replace('/\\[\\[([A-Z0-9_-]+)\\]\\]/', '{\\1}', $objResult->fields['text']); $redirect = preg_replace('/\\[\\[([A-Z0-9_-]+)\\]\\]/', '{\\1}', $objResult->fields['redirect']); \LinkGenerator::parseTemplate($teaserText, true); \LinkGenerator::parseTemplate($text, true); \LinkGenerator::parseTemplate($redirect, true); $arrNews[$objResult->fields['id']] = array('date' => $objResult->fields['date'], 'title' => $objResult->fields['title'], 'text' => empty($redirect) ? (!empty($teaserText) ? nl2br($teaserText) . '<br /><br />' : '') . $text : (!empty($teaserText) ? nl2br($teaserText) : ''), 'redirect' => $redirect, 'source' => $objResult->fields['source'], 'teaser_frames' => explode(';', $objResult->fields['teaser_frames']), 'categoryIds' => $this->getNewsRelCategories($objResult->fields['id'])); $objResult->MoveNext(); } } else { continue; } $objRSSWriter->characterEncoding = CONTREXX_CHARSET; $objRSSWriter->channelTitle = contrexx_raw2xml($this->arrSettings['news_feed_title'][$LangId]); $objRSSWriter->channelDescription = contrexx_raw2xml($this->arrSettings['news_feed_description'][$LangId]); $objRSSWriter->channelLink = \Cx\Core\Routing\Url::fromModuleAndCmd('News', '', $LangId)->toString(); $objRSSWriter->channelLanguage = \FWLanguage::getLanguageParameter($LangId, 'lang'); $objRSSWriter->channelCopyright = 'Copyright ' . date('Y') . ', http://' . $_CONFIG['domainUrl']; if (!empty($this->arrSettings['news_feed_image'])) { $channelImageUrl = \Cx\Core\Routing\Url::fromDocumentRoot(); $channelImageUrl->setMode('backend'); $channelImageUrl->setPath(substr($this->arrSettings['news_feed_image'], strlen(\Cx\Core\Core\Controller\Cx::instanciate()->getWebsiteOffsetPath()) + 1)); $objRSSWriter->channelImageUrl = $channelImageUrl; $objRSSWriter->channelImageTitle = $objRSSWriter->channelTitle; $objRSSWriter->channelImageLink = $objRSSWriter->channelLink; } $objRSSWriter->channelWebMaster = $_CONFIG['coreAdminEmail']; // create rss feed $objRSSWriter->xmlDocumentPath = \Env::get('cx')->getWebsiteFeedPath() . '/news_' . \FWLanguage::getLanguageParameter($LangId, 'lang') . '.xml'; foreach ($arrNews as $newsId => $arrNewsItem) { list($cmdDetail, $categories) = $this->getRssNewsLinks($LangId, $arrNewsItem['categoryIds'], $categoryDetails[$LangId]); $itemUrl = \Cx\Core\Routing\Url::fromModuleAndCmd('News', $cmdDetail, $LangId, array('newsid' => $newsId)); if (isset($arrNewsItem['teaser_frames'][0])) { $itemUrl->setParam('teaserId', $arrNewsItem['teaser_frames'][0]); } $objRSSWriter->addItem(contrexx_raw2xml($arrNewsItem['title']), empty($arrNewsItem['redirect']) ? contrexx_raw2xml($itemUrl->toString()) : htmlspecialchars($arrNewsItem['redirect'], ENT_QUOTES, CONTREXX_CHARSET), contrexx_raw2xml($arrNewsItem['text']), '', $categories, '', '', '', $arrNewsItem['date'], array('url' => htmlspecialchars($arrNewsItem['source'], ENT_QUOTES, CONTREXX_CHARSET), 'title' => contrexx_raw2xml($arrNewsItem['title']))); } $objRSSWriter->write(); // create headlines rss feed $objRSSWriter->removeItems(); $objRSSWriter->xmlDocumentPath = \Env::get('cx')->getWebsiteFeedPath() . '/news_headlines_' . \FWLanguage::getLanguageParameter($LangId, 'lang') . '.xml'; foreach ($arrNews as $newsId => $arrNewsItem) { list($cmdDetail, $categories) = $this->getRssNewsLinks($LangId, $arrNewsItem['categoryIds'], $categoryDetails[$LangId]); $itemUrl = \Cx\Core\Routing\Url::fromModuleAndCmd('News', $cmdDetail, $LangId, array('newsid' => $newsId)); if (isset($arrNewsItem['teaser_frames'][0])) { $itemUrl->setParam('teaserId', $arrNewsItem['teaser_frames'][0]); } $objRSSWriter->addItem(contrexx_raw2xml($arrNewsItem['title']), contrexx_raw2xml($itemUrl->toString()), '', '', $categories, '', '', '', $arrNewsItem['date']); } $objRSSWriter->write(); $objRSSWriter->feedType = 'js'; $objRSSWriter->xmlDocumentPath = \Env::get('cx')->getWebsiteFeedPath() . '/news_' . \FWLanguage::getLanguageParameter($LangId, 'lang') . '.js'; $objRSSWriter->write(); if (count($objRSSWriter->arrErrorMsg) > 0) { $this->strErrMessage .= implode('<br />', $objRSSWriter->arrErrorMsg); } if (count($objRSSWriter->arrWarningMsg) > 0) { $this->strErrMessage .= implode('<br />', $objRSSWriter->arrWarningMsg); } } } } } else { if (count($arrLanguages > 0)) { foreach ($arrLanguages as $LangId => $arrLanguage) { if ($arrLanguage['frontend'] == 1) { @unlink(\Env::get('cx')->getWebsiteFeedPath() . '/news_' . \FWLanguage::getLanguageParameter($LangId, 'lang') . '.xml'); @unlink(\Env::get('cx')->getWebsiteFeedPath() . '/news_headlines_' . \FWLanguage::getLanguageParameter($LangId, 'lang') . '.xml'); @unlink(\Env::get('cx')->getWebsiteFeedPath() . '/news_' . \FWLanguage::getLanguageParameter($LangId, 'lang') . '.js'); } } } } }