コード例 #1
0
 /**
  * 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'];
 }
コード例 #2
0
ファイル: PodcastLib.class.php プロジェクト: Niggu/cloudrexx
 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;
 }
コード例 #3
0
 /**
  * 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);
 }
コード例 #4
0
ファイル: News.class.php プロジェクト: Cloudrexx/cloudrexx
 /**
  * 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);
 }
コード例 #5
0
 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;
 }
コード例 #6
0
 /**
  * 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');
 }
コード例 #7
0
ファイル: Url.class.php プロジェクト: Cloudrexx/cloudrexx
 /**
  * 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;
 }
コード例 #8
0
 /**
  * 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');
                 }
             }
         }
     }
 }