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");
 | ||
|  | 		}
 | ||
|  | 	}
 | ||
|  | }
 |