You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					153 lines
				
				3.9 KiB
			
		
		
			
		
	
	
					153 lines
				
				3.9 KiB
			| 
								 
											12 years ago
										 
									 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @link http://www.yiiframework.com/
							 | 
						||
| 
								 | 
							
								 * @copyright Copyright (c) 2008 Yii Software LLC
							 | 
						||
| 
								 | 
							
								 * @license http://www.yiiframework.com/license/
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace yii\gii\controllers;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 
											12 years ago
										 
									 | 
							
								use Yii;
							 | 
						||
| 
								 
											12 years ago
										 
									 | 
							
								use yii\web\Controller;
							 | 
						||
| 
								 | 
							
								use yii\web\HttpException;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @author Qiang Xue <qiang.xue@gmail.com>
							 | 
						||
| 
								 | 
							
								 * @since 2.0
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								class DefaultController extends Controller
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									public $layout = 'generator';
							 | 
						||
| 
								 
											12 years ago
										 
									 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * @var \yii\gii\Module
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public $module;
							 | 
						||
| 
								 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * @var \yii\gii\Generator
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 
											12 years ago
										 
									 | 
							
									public $generator;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function actionIndex()
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										$this->layout = 'main';
							 | 
						||
| 
								 | 
							
										return $this->render('index');
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									public function actionView($id)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										$generator = $this->loadGenerator($id);
							 | 
						||
| 
								 
											12 years ago
										 
									 | 
							
										$params = ['generator' => $generator, 'id' => $id];
							 | 
						||
| 
								 
											12 years ago
										 
									 | 
							
										if (isset($_POST['preview']) || isset($_POST['generate'])) {
							 | 
						||
| 
								 | 
							
											if ($generator->validate()) {
							 | 
						||
| 
								 
											12 years ago
										 
									 | 
							
												$generator->saveStickyAttributes();
							 | 
						||
| 
								 
											12 years ago
										 
									 | 
							
												$files = $generator->generate();
							 | 
						||
| 
								 
											12 years ago
										 
									 | 
							
												if (isset($_POST['generate']) && !empty($_POST['answers'])) {
							 | 
						||
| 
								 
											12 years ago
										 
									 | 
							
													$params['hasError'] = $generator->save($files, (array)$_POST['answers'], $results);
							 | 
						||
| 
								 | 
							
													$params['results'] = $results;
							 | 
						||
| 
								 
											12 years ago
										 
									 | 
							
												} else {
							 | 
						||
| 
								 | 
							
													$params['files'] = $files;
							 | 
						||
| 
								 
											12 years ago
										 
									 | 
							
													$params['answers'] = isset($_POST['answers']) ? $_POST['answers'] : null;
							 | 
						||
| 
								 
											12 years ago
										 
									 | 
							
												}
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										return $this->render('view', $params);
							 | 
						||
| 
								 
											12 years ago
										 
									 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 
											12 years ago
										 
									 | 
							
									public function actionPreview($id, $file)
							 | 
						||
| 
								 
											12 years ago
										 
									 | 
							
									{
							 | 
						||
| 
								 
											12 years ago
										 
									 | 
							
										$generator = $this->loadGenerator($id);
							 | 
						||
| 
								 | 
							
										if ($generator->validate()) {
							 | 
						||
| 
								 
											12 years ago
										 
									 | 
							
											foreach ($generator->generate() as $f) {
							 | 
						||
| 
								 
											12 years ago
										 
									 | 
							
												if ($f->id === $file) {
							 | 
						||
| 
								 
											12 years ago
										 
									 | 
							
													$content = $f->preview();
							 | 
						||
| 
								 | 
							
													if ($content !== false) {
							 | 
						||
| 
								 | 
							
														return  '<div class="content">' . $content . '</content>';
							 | 
						||
| 
								 | 
							
													} else {
							 | 
						||
| 
								 | 
							
														return '<div class="error">Preview is not available for this file type.</div>';
							 | 
						||
| 
								 | 
							
													}
							 | 
						||
| 
								 
											12 years ago
										 
									 | 
							
												}
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										throw new HttpException(404, "Code file not found: $file");
							 | 
						||
| 
								 
											12 years ago
										 
									 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 
											12 years ago
										 
									 | 
							
									public function actionDiff($id, $file)
							 | 
						||
| 
								 
											12 years ago
										 
									 | 
							
									{
							 | 
						||
| 
								 
											12 years ago
										 
									 | 
							
										$generator = $this->loadGenerator($id);
							 | 
						||
| 
								 | 
							
										if ($generator->validate()) {
							 | 
						||
| 
								 
											12 years ago
										 
									 | 
							
											foreach ($generator->generate() as $f) {
							 | 
						||
| 
								 
											12 years ago
										 
									 | 
							
												if ($f->id === $file) {
							 | 
						||
| 
								 
											12 years ago
										 
									 | 
							
													return $this->renderPartial('diff', [
							 | 
						||
| 
								 
											12 years ago
										 
									 | 
							
														'diff' => $f->diff(),
							 | 
						||
| 
								 
											12 years ago
										 
									 | 
							
													]);
							 | 
						||
| 
								 
											12 years ago
										 
									 | 
							
												}
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										throw new HttpException(404, "Code file not found: $file");
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 
											12 years ago
										 
									 | 
							
								
							 | 
						||
| 
								 
											12 years ago
										 
									 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * Runs an action defined in the generator.
							 | 
						||
| 
								 | 
							
									 * Given an action named "xyz", the method "actionXyz()" in the generator will be called.
							 | 
						||
| 
								 | 
							
									 * If the method does not exist, a 400 HTTP exception will be thrown.
							 | 
						||
| 
								 | 
							
									 * @param string $id the ID of the generator
							 | 
						||
| 
								 | 
							
									 * @param string $name the action name
							 | 
						||
| 
								 | 
							
									 * @return mixed the result of the action.
							 | 
						||
| 
								 | 
							
									 * @throws HttpException if the action method does not exist.
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 | 
							
									public function actionAction($id, $name)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										$generator = $this->loadGenerator($id);
							 | 
						||
| 
								 | 
							
										$method = 'action' . $name;
							 | 
						||
| 
								 | 
							
										if (method_exists($generator, $method)) {
							 | 
						||
| 
								 | 
							
											return $generator->$method();
							 | 
						||
| 
								 | 
							
										} else {
							 | 
						||
| 
								 | 
							
											throw new HttpException(400, "Unknown generator action: $name");
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 
											12 years ago
										 
									 | 
							
									public function createUrl($route, $params = [])
							 | 
						||
| 
								 
											12 years ago
										 
									 | 
							
									{
							 | 
						||
| 
								 | 
							
										if (!isset($params['id']) && $this->generator !== null) {
							 | 
						||
| 
								 | 
							
											foreach ($this->module->generators as $id => $generator) {
							 | 
						||
| 
								 | 
							
												if ($generator === $this->generator) {
							 | 
						||
| 
								 | 
							
													$params['id'] = $id;
							 | 
						||
| 
								 | 
							
													break;
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										return parent::createUrl($route, $params);
							 | 
						||
| 
								 
											12 years ago
										 
									 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 
											12 years ago
										 
									 | 
							
									public function createActionUrl($name, $params = [])
							 | 
						||
| 
								 
											12 years ago
										 
									 | 
							
									{
							 | 
						||
| 
								 | 
							
										foreach ($this->module->generators as $id => $generator) {
							 | 
						||
| 
								 | 
							
											if ($generator === $this->generator) {
							 | 
						||
| 
								 | 
							
												$params['id'] = $id;
							 | 
						||
| 
								 | 
							
												break;
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										$params['name'] = $name;
							 | 
						||
| 
								 | 
							
										return parent::createUrl('action', $params);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 
											12 years ago
										 
									 | 
							
									/**
							 | 
						||
| 
								 | 
							
									 * Loads the generator with the specified ID.
							 | 
						||
| 
								 | 
							
									 * @param string $id the ID of the generator to be loaded.
							 | 
						||
| 
								 | 
							
									 * @return \yii\gii\Generator the loaded generator
							 | 
						||
| 
								 | 
							
									 * @throws \yii\web\HttpException
							 | 
						||
| 
								 | 
							
									 */
							 | 
						||
| 
								 
											12 years ago
										 
									 | 
							
									protected function loadGenerator($id)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										if (isset($this->module->generators[$id])) {
							 | 
						||
| 
								 
											12 years ago
										 
									 | 
							
											$this->generator = $this->module->generators[$id];
							 | 
						||
| 
								 
											12 years ago
										 
									 | 
							
											$this->generator->loadStickyAttributes();
							 | 
						||
| 
								 
											12 years ago
										 
									 | 
							
											$this->generator->load($_POST);
							 | 
						||
| 
								 | 
							
											return $this->generator;
							 | 
						||
| 
								 
											12 years ago
										 
									 | 
							
										} else {
							 | 
						||
| 
								 | 
							
											throw new HttpException(404, "Code generator not found: $id");
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 |