示例#1
0
 /**
  * Construct
  *
  * @param \Sendmail\Sender\Smtp\Dialogue $dialogue
  */
 public function __construct(Dialogue $dialogue)
 {
     $this->dialogue = $dialogue;
     $response = explode("\n", $dialogue->getLog());
     $response = array_shift($response);
     if (preg_match('/^(\\d{3})(.+)/', $response, $match)) {
         parent::__construct(trim($match[2]), (int) $match[1]);
     } else {
         parent::__construct(trim($response), 500);
     }
 }
 public static function replaceWithLink($content, $lang = null, $relatedType = null, $relatedId = null, $linkOptions = array())
 {
     if (is_null($lang)) {
         $lang = Yii::app()->language;
     }
     $criteria = new CDbCriteria();
     $criteria->compare('lang', $lang);
     $criteria->order = 'keyword ASC';
     $internalLinkKeywords = self::model()->findAll($criteria);
     if (count($internalLinkKeywords)) {
         $matchKeywordList = array();
         foreach ($internalLinkKeywords as $internalLinkKeyword) {
             if (stripos($content, $internalLinkKeyword->keyword)) {
                 $matchKeywordList[$internalLinkKeyword->internal_link_keyword_id] = $internalLinkKeyword;
             }
         }
         $relatedList = array();
         foreach ($matchKeywordList as $matchKeyword) {
             if (isset($relatedList[$matchKeyword->related_type]) == false) {
                 $relatedList[$matchKeyword->related_type] = array();
             }
             if (isset($relatedList[$matchKeyword->related_type][$matchKeyword->related_id]) == false) {
                 $relatedList[$matchKeyword->related_type][$matchKeyword->related_id] = array();
             }
             $relatedList[$matchKeyword->related_type][$matchKeyword->related_id][] = $matchKeyword->keyword;
         }
         if (is_null($relatedType) == false && is_null($relatedId) == false) {
             unset($relatedList[$relatedType][$relatedId]);
         }
         $replaceList = array();
         foreach ($relatedList as $relatedType => $relatedIdList) {
             switch ($relatedType) {
                 case 'brand_culture':
                     $criteria = new CDbCriteria();
                     $criteria->addInCondition('brand_culture_id', array_keys($relatedIdList));
                     $brandCultures = BrandCulture::model()->localized()->findAll($criteria);
                     foreach ($brandCultures as $brandCulture) {
                         foreach ($relatedIdList as $relatedId => $keyword) {
                             if ($brandCulture->brand_culture_id == $relatedId) {
                                 foreach ($keywords as $keyword) {
                                     $replaceList[$keyword] = $brandCulture->getPermalink();
                                 }
                             }
                         }
                     }
                     break;
                 case 'news':
                     $criteria = new CDbCriteria();
                     $criteria->addInCondition('news_id', array_keys($relatedIdList));
                     $news = News::model()->localized()->findAll($criteria);
                     foreach ($news as $article) {
                         foreach ($relatedIdList as $relatedId => $keywords) {
                             if ($article->news_id == $relatedId) {
                                 foreach ($keywords as $keyword) {
                                     $replaceList[$keyword] = $article->getPermalink();
                                 }
                             }
                         }
                     }
                     break;
                 case 'dialogue':
                     $criteria = new CDbCriteria();
                     $criteria->addInCondition('dialogue_id', array_keys($relatedIdList));
                     $dialogues = Dialogue::model()->localized()->findAll($criteria);
                     foreach ($dialogues as $dialogue) {
                         foreach ($relatedIdList as $relatedId => $keywords) {
                             if ($dialogue->dialogue_id == $relatedId) {
                                 foreach ($keywords as $keyword) {
                                     $replaceList[$keyword] = $dialogue->getPermalink();
                                 }
                             }
                         }
                     }
                     break;
                 case 'magazine_article':
                     $criteria = new CDbCriteria();
                     $criteria->addInCondition('magazine_article_id', array_keys($relatedIdList));
                     $magazineArticles = MagazineArticle::model()->localized()->findAll($criteria);
                     foreach ($magazineArticles as $magazineArticle) {
                         foreach ($relatedIdList as $relatedId => $keywords) {
                             if ($magazineArticle->magazine_article_id == $relatedId) {
                                 foreach ($keywords as $keyword) {
                                     $replaceList[$keyword] = $magazineArticle->getPermalink();
                                 }
                             }
                         }
                     }
                     break;
                 case 'page':
                     $criteria = new CDbCriteria();
                     $criteria->addInCondition('page_id', array_keys($relatedIdList));
                     $pages = Page::model()->localized()->findAll($criteria);
                     foreach ($pages as $page) {
                         foreach ($relatedIdList as $relatedId => $keywords) {
                             if ($page->page_id == $relatedId) {
                                 foreach ($keywords as $keyword) {
                                     $replaceList[$keyword] = $page->getPermalink();
                                 }
                             }
                         }
                     }
                     break;
                 case 'home':
                     foreach ($relatedIdList as $relatedId => $keywords) {
                         foreach ($keywords as $keyword) {
                             $replaceList[$keyword] = Yii::app()->createUrl('site/index');
                         }
                     }
                     break;
                 default:
                     return false;
                     break;
             }
         }
         $currentLinkOptions = $linkOptions;
         if (isset($currentLinkOptions['class'])) {
             $currentLinkOptions['class'] .= ' internal-link';
         } else {
             $currentLinkOptions['class'] = 'internal-link';
         }
         foreach ($replaceList as $keyword => $linkUrl) {
             $content = self::replaceOnce($keyword, $linkUrl, $currentLinkOptions, $content);
         }
     }
     return $content;
 }