#!/usr/bin/env php
[[-o|--output]
]
选项说明
--project=
-p 用于指定要搜索的项目名称或项目配置文件的路径,
如果指定的是名称,则使用 ../app/.ini 作为配置文件
--output=
-o 指定生成的骨架代码存储位置,默认为当前目录
-h|--help 显示帮助信息
EOF;
exit(0);
}
// output dir
$output = XSUtil::getOpt('o', 'output', true);
if ($output === null)
$output = '.';
if (!is_dir($output))
{
echo "错误:输出目录 ($output) 不是一个有效的目录。\n";
exit(-1);
}
if (!is_writable($output))
{
echo "错误:输出目录 ($output) 不可写入,请注意检查权限。\n";
exit(-1);
}
// execute the search
try
{
// create xs object
echo "初始化项目对象 ...\n";
$xs = new XS($project);
// generate varialbes
echo "解析字段,生成变量清单 ...\n";
$vars = array();
// basic
$vars['@project@'] = $project;
$vars['@charset@'] = $xs->getDefaultCharset();
if ($vars['@charset@'] !== 'GB2312' && $vars['@charset@'] !== 'GBK')
$vars['@charset@'] = 'UTF-8';
$vars['@xs_lib_root@'] = XS_LIB_ROOT;
$vars['@date_time@'] = date('Y-m-d H:i:s');
$vars['@project_name@'] = ucfirst($xs->name);
$vars['@package_name@'] = PACKAGE_NAME;
$vars['@package_version@'] = PACKAGE_VERSION;
// fields
$vars['@set_filter@'] = '';
$vars['@set_sort@'] = '';
$vars['@field_id@'] = $xs->getFieldId()->name;
if (($field = $xs->getFieldTitle()) !== false)
$vars['@field_title@'] = $field->name;
if (($field = $xs->getFieldBody()) !== false)
$vars['@field_body@'] = $field->name;
$vars['@field_info@'] = '';
foreach ($xs->getAllFields() as $field) /* @var $field XSFieldMeta */
{
if ($field->hasIndexSelf() && $field->type != XSFieldMeta::TYPE_BODY && !$field->isBoolIndex())
$vars['@set_filter@'] .= "\t\t\tname}\" name}; ?> />" . ucfirst($field->name) . "\n";
if ($field->isNumeric())
{
$vars['@set_sort@'] .= "\t\t\t\t\t\n";
$vars['@set_sort@'] .= "\t\t\t\t\t\n";
}
if ($field->isSpeical())
continue;
if ($field->type == XSFieldMeta::TYPE_STRING)
{
if (!isset($vars['@field_title@']))
{
$vars['@field_title@'] = $field->name;
continue;
}
if (!isset($vars['@field_body@']))
{
$vars['@field_body@'] = $field->name;
continue;
}
}
$vars['@field_info@'] .= "\t\t\t\t" . ucfirst($field->name) . ": " . $field->name . "); ?>\n";
}
$vars['@set_filter@'] = trim($vars['@set_filter@']);
$vars['@set_sort@'] = trim($vars['@set_sort@']);
$vars['@field_info@'] = trim($vars['@field_info@']);
if (!isset($vars['@field_title@']))
$vars['@field_title@'] = 'title';
if (!isset($vars['@field_body@']))
$vars['@field_body@'] = 'body';
// output dir
echo "检测并创建输出目录 ...\n";
$output .= '/' . $xs->name;
if (!is_dir($output) && !mkdir($output))
throw new XSException('Failed to create output directory: ' . $output);
// loop to write-in files
$input = dirname(__FILE__) . '/skel';
$dir = dir($input);
while (($entry = $dir->read()) !== false)
{
if ($entry === '.' || $entry === '..')
continue;
if (substr($entry, -3) === '.in')
{
echo "正在生成 " . substr($entry, 0, -3) . " ...\n";
$file = $output . '/' . substr($entry, 0, -3);
if (file_exists($file))
copy($file, $file . '.bak');
$content = file_get_contents($input . '/' . $entry);
$content = strtr($content, $vars);
if ($vars['@charset@'] !== 'UTF-8')
$content = XS::convert($content, $vars['@charset@'], 'UTF-8');
file_put_contents($file, $content);
}
else
{
echo "正在复制 " . $entry . " ...\n";
$file = $output . '/' . $entry;
if (file_exists($file))
copy($file, $file . '.bak');
copy($input . '/' . $entry, $file);
}
}
$dir->close();
echo "完成,请将 `$output` 目录转移到 web 可达目录,然后访问 search.php 即可。\n";
}
catch (XSException $e)
{
// Exception
$start = dirname(dirname(__FILE__)) . '/';
$relative = substr(XSException::getRelPath($start), 0, -1);
$traceString = $e->getTraceAsString();
$traceString = str_replace(dirname(__FILE__) . '/', '', $traceString);
$traceString = str_replace($start, $relative, $traceString);
echo $e . "\n" . $traceString . "\n";
}