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.
89 lines
2.1 KiB
89 lines
2.1 KiB
11 years ago
|
<?php
|
||
|
/**
|
||
|
* @link http://www.yiiframework.com/
|
||
|
* @copyright Copyright (c) 2008 Yii Software LLC
|
||
|
* @license http://www.yiiframework.com/license/
|
||
|
*/
|
||
|
|
||
|
namespace yii\phpdoc\commands;
|
||
|
|
||
|
use phpDocumentor\Reflection\FileReflector;
|
||
|
use yii\console\Controller;
|
||
|
use yii\helpers\Console;
|
||
|
use yii\helpers\FileHelper;
|
||
|
use yii\phpdoc\components\OfflineRenderer;
|
||
|
use yii\phpdoc\models\Context;
|
||
|
use Yii;
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
* @author Carsten Brandt <mail@cebe.cc>
|
||
|
* @author Qiang Xue <qiang.xue@gmail.com>
|
||
|
* @since 2.0
|
||
|
*/
|
||
|
class PhpdocController extends Controller
|
||
|
{
|
||
|
public function actionIndex($targetDir)
|
||
|
{
|
||
|
echo "hi\n";
|
||
|
|
||
|
$targetDir = Yii::getAlias($targetDir);
|
||
|
if (is_dir($targetDir) && !$this->confirm('TargetDirectory already exists. Overwrite?')) {
|
||
|
return 2;
|
||
|
}
|
||
|
|
||
|
// TODO determine files to analyze
|
||
|
$this->stdout('Searching files to process... ');
|
||
|
$files = $this->findFiles(YII_PATH);
|
||
|
// $files = array_slice($files, 0, 42); // TODO remove this line
|
||
|
$this->stdout('done.' . PHP_EOL, Console::FG_GREEN);
|
||
|
|
||
|
$fileCount = count($files);
|
||
|
Console::startProgress(0, $fileCount, 'Processing files... ', false);
|
||
|
$context = new Context();
|
||
|
$done = 0;
|
||
|
foreach($files as $file) {
|
||
|
$context->addFile($file);
|
||
|
Console::updateProgress(++$done, $fileCount);
|
||
|
}
|
||
|
Console::endProgress(true);
|
||
|
$this->stdout('done.' . PHP_EOL, Console::FG_GREEN);
|
||
|
|
||
|
$this->stdout('Updating cross references and backlinks... ');
|
||
|
$context->updateReferences();
|
||
|
$this->stdout('done.' . PHP_EOL, Console::FG_GREEN);
|
||
|
|
||
|
|
||
|
// TODO LATER analyze for dead links and similar stuff
|
||
|
|
||
|
// TODO render models
|
||
|
$renderer = new OfflineRenderer();
|
||
|
$renderer->targetDir = $targetDir;
|
||
|
$renderer->render($context, $this);
|
||
|
}
|
||
|
|
||
|
|
||
|
protected function findFiles($path, $except = [])
|
||
|
{
|
||
|
$path = FileHelper::normalizePath($path);
|
||
|
$options = [
|
||
|
'filter' => function ($path) {
|
||
|
if (is_file($path)) {
|
||
|
$file = basename($path);
|
||
|
if ($file[0] < 'A' || $file[0] > 'Z') {
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
return null;
|
||
|
},
|
||
|
'only' => ['.php'],
|
||
|
'except' => array_merge($except, [
|
||
|
'/views/',
|
||
|
'/requirements/',
|
||
|
'/gii/generators/',
|
||
|
]),
|
||
|
];
|
||
|
return FileHelper::findFiles($path, $options);
|
||
|
}
|
||
|
|
||
|
}
|