'Arabic', 'de'=>'German', 'en'=>'English', 'es'=>'Spanish', 'fr'=>'French', 'he'=>'Hebrew', 'hu'=>'Hungarian', 'id'=>'Indonesian', 'it'=>'Italian', 'nl'=>'Dutch', 'no'=>'Norwegian', 'ja'=>'Japanese', 'pl'=>'Polish', 'pt'=>'Portuguese', 'ru'=>'Russian', 'sv'=>'Swedish', 'ta_in'=>'Tamil', 'vi'=>'Vietnam', 'uk'=>'Ukrainian', 'zh_cn'=>'Simplified Chinese', 'zh_tw'=>'Traditional Chinese', ); private $_languages; private $_language; private $_topics; public function actionView() { $topic=$this->getTopic(); $file=Yii::getPathOfAlias("docs.blog.{$this->language}").DIRECTORY_SEPARATOR.$topic.'.txt'; if(!is_file($file)) $file=Yii::getPathOfAlias("docs.blog").DIRECTORY_SEPARATOR.$topic.'.txt'; if(!strcasecmp($topic,'toc') || !is_file($file)) throw new CHttpException(404,'The page you looked for does not exist.'); $content=file_get_contents($file); $markdown=new MarkdownParser; $content=$markdown->safeTransform($content); $imageUrl=Yii::app()->baseUrl.'/blog/images'; $content=preg_replace('/

\s*\s*<\/p>/', "

\\3

",$content); $content=preg_replace_callback('/href="\/doc\/blog\/(.*?)\/?"/',array($this,'replaceBlogLink'),$content); $content=preg_replace('/href="(\/doc\/api\/.*?)"/','href="https://www.yiiframework.com$1"',$content); $this->pageTitle='The Yii Blog Tutorial'; if($topic!=='index' && preg_match('/]*>(.*?)pageTitle.=' - '.CHtml::encode($matches[1]); $this->render('view',array('content'=>$content)); } public function replaceBlogLink($matches) { if(($pos=strpos($matches[1],'#'))!==false) { $anchor=substr($matches[1],$pos); $matches[1]=substr($matches[1],0,$pos); } else $anchor=''; return 'href="'.$this->createUrl('view',array('lang'=>$this->language,'page'=>$matches[1])).$anchor.'"'; } public function getTopic() { if(!isset($_GET['page']) || empty($_GET['page'])) return 'start.overview'; else return str_replace(array('/','\\'),'',trim($_GET['page'])); } public function getTopics() { if($this->_topics===null) { $file=Yii::getPathOfAlias("docs.blog.{$this->language}.toc").'.txt'; if(!is_file($file)) $file=Yii::getPathOfAlias('docs.blog.toc').'.txt'; $lines=file($file); $chapter=''; foreach($lines as $line) { if(($line=trim($line))==='') continue; if($line[0]==='*') $chapter=trim($line,'* '); else if($line[0]==='-' && preg_match('/\[(.*?)\]\((.*?)\)/',$line,$matches)) $this->_topics[$chapter][$matches[2]]=$matches[1]; } } return $this->_topics; } public function getLanguage() { if($this->_language===null) { if(isset($_GET['lang']) && preg_match('/^[a-z_]+$/',$_GET['lang'])) $this->_language=$_GET['lang']; else $this->_language='en'; } return $this->_language; } public function getLanguages() { if($this->_languages===null) { $basePath=Yii::getPathOfAlias('docs.blog'); $dir=opendir($basePath); $this->_languages=array('en'=>'English'); while(($file=readdir($dir))!==false) { if(!is_dir($basePath.DIRECTORY_SEPARATOR.$file) || $file==='.' || $file==='..' || $file==='source') continue; if(isset($this->languageNames[$file])) $this->_languages[$file]=$this->languageNames[$file]; } ksort($this->_languages); } return $this->_languages; } }